diff options
author | Vinod Koul <vinod.koul@intel.com> | 2015-05-18 15:33:13 +0530 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2015-07-16 18:58:50 +0530 |
commit | 9bde2823dcb97997456645f9b18f8c3468b727ca (patch) | |
tree | fe97bc54655142c4e1e66bc2818ad994b84123ee /drivers/dma | |
parent | e3fa9841d309ae7992b658eba0f973543b97ed1f (diff) | |
download | linux-stable-9bde2823dcb97997456645f9b18f8c3468b727ca.tar.gz linux-stable-9bde2823dcb97997456645f9b18f8c3468b727ca.tar.bz2 linux-stable-9bde2823dcb97997456645f9b18f8c3468b727ca.zip |
dmaengine: zxdma: explicitly free irq on device removal
At device removal, tasklets are not disabled and irqs are still enabled, so
free the irq explicitly on device removal
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma')
-rw-r--r-- | drivers/dma/zx296702_dma.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/dma/zx296702_dma.c b/drivers/dma/zx296702_dma.c index c99f0d1ac88a..ec470bc74df8 100644 --- a/drivers/dma/zx296702_dma.c +++ b/drivers/dma/zx296702_dma.c @@ -127,6 +127,7 @@ struct zx_dma_dev { struct dma_pool *pool; u32 dma_channels; u32 dma_requests; + int irq; }; #define to_zx_dma(dmadev) container_of(dmadev, struct zx_dma_dev, slave) @@ -683,7 +684,7 @@ static int zx_dma_probe(struct platform_device *op) { struct zx_dma_dev *d; struct resource *iores; - int i, ret = 0, irq = 0; + int i, ret = 0; iores = platform_get_resource(op, IORESOURCE_MEM, 0); if (!iores) @@ -710,8 +711,8 @@ static int zx_dma_probe(struct platform_device *op) return PTR_ERR(d->clk); } - irq = platform_get_irq(op, 0); - ret = devm_request_irq(&op->dev, irq, zx_dma_int_handler, + d->irq = platform_get_irq(op, 0); + ret = devm_request_irq(&op->dev, d->irq, zx_dma_int_handler, 0, DRIVER_NAME, d); if (ret) return ret; @@ -807,6 +808,9 @@ static int zx_dma_remove(struct platform_device *op) struct zx_dma_chan *c, *cn; struct zx_dma_dev *d = platform_get_drvdata(op); + /* explictly free the irq */ + devm_free_irq(&op->dev, d->irq, d); + dma_async_device_unregister(&d->slave); of_dma_controller_free((&op->dev)->of_node); |