dmaengine: coh901318: explicitly freeup irq
authorVinod Koul <vinod.koul@intel.com>
Fri, 1 Jul 2016 05:24:56 +0000 (10:54 +0530)
committerVinod Koul <vinod.koul@intel.com>
Sat, 16 Jul 2016 14:48:57 +0000 (20:18 +0530)
dmaengine device should explicitly call devm_free_irq() when using
devm_request_irq().

The irq is still ON when devices remove is executed and irq should be
quiesced before remove is completed.

Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
drivers/dma/coh901318.c

index c1006165cea81f09311a9e9a86e1ffe59e6dcf15..ba044d4c1d53405c8c6994f5acc9a6915bca1289 100644 (file)
@@ -1280,6 +1280,7 @@ struct coh901318_desc {
 struct coh901318_base {
        struct device *dev;
        void __iomem *virtbase;
+       unsigned int irq;
        struct coh901318_pool pool;
        struct powersave pm;
        struct dma_device dma_slave;
@@ -2680,6 +2681,8 @@ static int __init coh901318_probe(struct platform_device *pdev)
        if (err)
                return err;
 
+       base->irq = irq;
+
        err = coh901318_pool_create(&base->pool, &pdev->dev,
                                    sizeof(struct coh901318_lli),
                                    32);
@@ -2760,6 +2763,8 @@ static int coh901318_remove(struct platform_device *pdev)
 {
        struct coh901318_base *base = platform_get_drvdata(pdev);
 
+       devm_free_irq(&pdev->dev, base->irq, base);
+
        of_dma_controller_free(pdev->dev.of_node);
        dma_async_device_unregister(&base->dma_memcpy);
        dma_async_device_unregister(&base->dma_slave);