Beispiel #1
0
int s3c2410_dma_ctrl(unsigned int channel, enum s3c2410_chan_op op)
{
	struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel);

	WARN_ON(!chan);
	if (!chan)
		return -EINVAL;

	switch (op) {
	case S3C2410_DMAOP_START:
		return s3c64xx_dma_start(chan);

	case S3C2410_DMAOP_STOP:
		return s3c64xx_dma_stop(chan);

	case S3C2410_DMAOP_FLUSH:
		return s3c64xx_dma_flush(chan);

	/* belive PAUSE/RESUME are no-ops */
	case S3C2410_DMAOP_PAUSE:
	case S3C2410_DMAOP_RESUME:
	case S3C2410_DMAOP_STARTED:
	case S3C2410_DMAOP_TIMEOUT:
		return 0;
	}

	return -ENOENT;
}
Beispiel #2
0
static int s3c64xx_dma_suspend(struct device *dev)
{
	struct s3c64xx_dmac *dmac = dev_get_drvdata(dev);
	int i;

	dev_dbg(dev, "suspend\n");

	for (i = 0; i < 8; ++i)
		s3c64xx_dma_flush(&dmac->channels[i]);

	writel(0, dmac->regs + PL080_CONFIG);
	clk_disable(dmac->clk);

	return 0;
}