From 95bfea1675c02d83cf1923272e62f91db11cbb8f Mon Sep 17 00:00:00 2001 From: Shawn Guo Date: Thu, 30 Jun 2011 16:06:33 +0800 Subject: dmaengine: mxs-dma: skip request_irq for NO_IRQ In general, the mxs-dma users get separate irq for each channel, but gpmi is special one which has only one irq shared by all gpmi channels. It causes mxs_dma channel allocation function fail for all other gpmi channels except the first one calling into the function. The patch gets request_irq call skipped for NO_IRQ case, and leaves this gpmi specific quirk to gpmi driver to sort out. It will fix above problem if gpmi driver sets chan_irq as gpmi irq for only one channel and NO_IRQ for all the rest channels. Signed-off-by: Shawn Guo Cc: Vinod Koul Signed-off-by: Vinod Koul --- drivers/dma/mxs-dma.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'drivers/dma/mxs-dma.c') diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c index 88aad4f54002..2870d919f112 100644 --- a/drivers/dma/mxs-dma.c +++ b/drivers/dma/mxs-dma.c @@ -327,10 +327,12 @@ static int mxs_dma_alloc_chan_resources(struct dma_chan *chan) memset(mxs_chan->ccw, 0, PAGE_SIZE); - ret = request_irq(mxs_chan->chan_irq, mxs_dma_int_handler, - 0, "mxs-dma", mxs_dma); - if (ret) - goto err_irq; + if (mxs_chan->chan_irq != NO_IRQ) { + ret = request_irq(mxs_chan->chan_irq, mxs_dma_int_handler, + 0, "mxs-dma", mxs_dma); + if (ret) + goto err_irq; + } ret = clk_enable(mxs_dma->clk); if (ret) -- cgit v1.2.3 From 2a9778ed83b142e88cb38acc496a573a3472d27f Mon Sep 17 00:00:00 2001 From: Axel Lin Date: Tue, 12 Jul 2011 18:53:52 +0800 Subject: dma: mxs-dma: fix unterminated platform_device_id table Signed-off-by: Axel Lin Signed-off-by: Vinod Koul --- drivers/dma/mxs-dma.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'drivers/dma/mxs-dma.c') diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c index 2870d919f112..f22a237b7dd6 100644 --- a/drivers/dma/mxs-dma.c +++ b/drivers/dma/mxs-dma.c @@ -709,6 +709,8 @@ static struct platform_device_id mxs_dma_type[] = { }, { .name = "mxs-dma-apbx", .driver_data = MXS_DMA_APBX, + }, { + /* end of list */ } }; -- cgit v1.2.3 From a62bae98a93e6c4d53b1e6c20715e94b4a5aca3c Mon Sep 17 00:00:00 2001 From: Dong Aisheng Date: Tue, 19 Jul 2011 12:09:56 +0800 Subject: ARM: mxs-dma: reset after disable channel We met some channels in abnormal state after disable. Reset it to get a clean state. Signed-off-by: Dong Aisheng Cc: Vinod Koul Cc: Shawn Guo Signed-off-by: Vinod Koul --- drivers/dma/mxs-dma.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/dma/mxs-dma.c') diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c index f22a237b7dd6..be641cbd36fc 100644 --- a/drivers/dma/mxs-dma.c +++ b/drivers/dma/mxs-dma.c @@ -537,6 +537,7 @@ static int mxs_dma_control(struct dma_chan *chan, enum dma_ctrl_cmd cmd, switch (cmd) { case DMA_TERMINATE_ALL: mxs_dma_disable_chan(mxs_chan); + mxs_dma_reset_chan(mxs_chan); break; case DMA_PAUSE: mxs_dma_pause_chan(mxs_chan); -- cgit v1.2.3