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; }
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; }