dmaengine: txx9dmac: explicitly freeup irq
authorVinod Koul <vinod.koul@intel.com>
Tue, 5 Jul 2016 09:22:21 +0000 (14:52 +0530)
committerVinod Koul <vinod.koul@intel.com>
Sat, 23 Jul 2016 10:37:25 +0000 (16:07 +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>
drivers/dma/txx9dmac.c

index 8849318b32b7ab5b48f14ea8304027f8a0da7fd9..7632290e7c1438ff331a79c2750041366c352366 100644 (file)
@@ -1165,9 +1165,12 @@ static int txx9dmac_chan_remove(struct platform_device *pdev)
 {
        struct txx9dmac_chan *dc = platform_get_drvdata(pdev);
 
+
        dma_async_device_unregister(&dc->dma);
-       if (dc->irq >= 0)
+       if (dc->irq >= 0) {
+               devm_free_irq(&pdev->dev, dc->irq, dc);
                tasklet_kill(&dc->tasklet);
+       }
        dc->ddev->chan[pdev->id % TXX9_DMA_MAX_NR_CHANNELS] = NULL;
        return 0;
 }
@@ -1228,8 +1231,10 @@ static int txx9dmac_remove(struct platform_device *pdev)
        struct txx9dmac_dev *ddev = platform_get_drvdata(pdev);
 
        txx9dmac_off(ddev);
-       if (ddev->irq >= 0)
+       if (ddev->irq >= 0) {
+               devm_free_irq(&pdev->dev, ddev->irq, ddev);
                tasklet_kill(&ddev->tasklet);
+       }
        return 0;
 }