diff options
author | Vinod Koul <vinod.koul@intel.com> | 2016-07-05 14:52:21 +0530 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2016-07-23 16:07:25 +0530 |
commit | debc4849007517be8f03a199ea29dc3f797c329e (patch) | |
tree | 4ed98fcab2f1540c274c42390e532134515d113f /drivers/dma/txx9dmac.c | |
parent | 1f11e37729d7bedd5c9aba59550f694307b7efd9 (diff) | |
download | lwn-debc4849007517be8f03a199ea29dc3f797c329e.tar.gz lwn-debc4849007517be8f03a199ea29dc3f797c329e.zip |
dmaengine: txx9dmac: explicitly freeup irq
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>
Diffstat (limited to 'drivers/dma/txx9dmac.c')
-rw-r--r-- | drivers/dma/txx9dmac.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/dma/txx9dmac.c b/drivers/dma/txx9dmac.c index 8849318b32b7..7632290e7c14 100644 --- a/drivers/dma/txx9dmac.c +++ b/drivers/dma/txx9dmac.c @@ -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; } |