diff options
-rw-r--r-- | drivers/dma/dma-jz4740.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/dma/dma-jz4740.c b/drivers/dma/dma-jz4740.c index 7638b24ce8d0..9689b36c005a 100644 --- a/drivers/dma/dma-jz4740.c +++ b/drivers/dma/dma-jz4740.c | |||
@@ -573,12 +573,26 @@ err_unregister: | |||
573 | return ret; | 573 | return ret; |
574 | } | 574 | } |
575 | 575 | ||
576 | static void jz4740_cleanup_vchan(struct dma_device *dmadev) | ||
577 | { | ||
578 | struct jz4740_dmaengine_chan *chan, *_chan; | ||
579 | |||
580 | list_for_each_entry_safe(chan, _chan, | ||
581 | &dmadev->channels, vchan.chan.device_node) { | ||
582 | list_del(&chan->vchan.chan.device_node); | ||
583 | tasklet_kill(&chan->vchan.task); | ||
584 | } | ||
585 | } | ||
586 | |||
587 | |||
576 | static int jz4740_dma_remove(struct platform_device *pdev) | 588 | static int jz4740_dma_remove(struct platform_device *pdev) |
577 | { | 589 | { |
578 | struct jz4740_dma_dev *dmadev = platform_get_drvdata(pdev); | 590 | struct jz4740_dma_dev *dmadev = platform_get_drvdata(pdev); |
579 | int irq = platform_get_irq(pdev, 0); | 591 | int irq = platform_get_irq(pdev, 0); |
580 | 592 | ||
581 | free_irq(irq, dmadev); | 593 | free_irq(irq, dmadev); |
594 | |||
595 | jz4740_cleanup_vchan(&dmadev->ddev); | ||
582 | dma_async_device_unregister(&dmadev->ddev); | 596 | dma_async_device_unregister(&dmadev->ddev); |
583 | clk_disable_unprepare(dmadev->clk); | 597 | clk_disable_unprepare(dmadev->clk); |
584 | 598 | ||