dmaengine: mmp_pdma: 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> Acked-by: Zhangfei Gao <zhangfei.gao@linaro.org>
This commit is contained in:
parent
486b10a255
commit
a46018929b
|
@ -931,6 +931,25 @@ static void dma_do_tasklet(unsigned long data)
|
|||
static int mmp_pdma_remove(struct platform_device *op)
|
||||
{
|
||||
struct mmp_pdma_device *pdev = platform_get_drvdata(op);
|
||||
struct mmp_pdma_phy *phy;
|
||||
int i, irq = 0, irq_num = 0;
|
||||
|
||||
|
||||
for (i = 0; i < pdev->dma_channels; i++) {
|
||||
if (platform_get_irq(op, i) > 0)
|
||||
irq_num++;
|
||||
}
|
||||
|
||||
if (irq_num != pdev->dma_channels) {
|
||||
irq = platform_get_irq(op, 0);
|
||||
devm_free_irq(&op->dev, irq, pdev);
|
||||
} else {
|
||||
for (i = 0; i < pdev->dma_channels; i++) {
|
||||
phy = &pdev->phy[i];
|
||||
irq = platform_get_irq(op, i);
|
||||
devm_free_irq(&op->dev, irq, phy);
|
||||
}
|
||||
}
|
||||
|
||||
dma_async_device_unregister(&pdev->device);
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue