dmaengine: jz4780: Don't use devm_*_irq() functions
authorAlex Smith <alex.smith@imgtec.com>
Fri, 24 Jul 2015 16:24:26 +0000 (17:24 +0100)
committerVinod Koul <vinod.koul@intel.com>
Tue, 18 Aug 2015 16:58:50 +0000 (22:28 +0530)
We must explicitly free the IRQ before the device is unregistered in
case any device interrupt still occurs, so there's no point in using
the managed variations of the IRQ functions. Change to the regular
versions.

Signed-off-by: Alex Smith <alex.smith@imgtec.com>
Cc: Vinod Koul <vinod.koul@intel.com>
Cc: Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
Cc: dmaengine@vger.kernel.org
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/dma-jz4780.c

index 572e07e4b42dd1485aeb6eae8877c5acfd833620..d6cae6cb5b7affe50bebc63de0c40aa3251b914f 100644 (file)
@@ -774,8 +774,8 @@ static int jz4780_dma_probe(struct platform_device *pdev)
 
        jzdma->irq = ret;
 
-       ret = devm_request_irq(dev, jzdma->irq, jz4780_dma_irq_handler, 0,
-                              dev_name(dev), jzdma);
+       ret = request_irq(jzdma->irq, jz4780_dma_irq_handler, 0, dev_name(dev),
+                         jzdma);
        if (ret) {
                dev_err(dev, "failed to request IRQ %u!\n", jzdma->irq);
                return ret;
@@ -784,7 +784,8 @@ static int jz4780_dma_probe(struct platform_device *pdev)
        jzdma->clk = devm_clk_get(dev, NULL);
        if (IS_ERR(jzdma->clk)) {
                dev_err(dev, "failed to get clock\n");
-               return PTR_ERR(jzdma->clk);
+               ret = PTR_ERR(jzdma->clk);
+               goto err_free_irq;
        }
 
        clk_prepare_enable(jzdma->clk);
@@ -856,6 +857,9 @@ err_unregister_dev:
 
 err_disable_clk:
        clk_disable_unprepare(jzdma->clk);
+
+err_free_irq:
+       free_irq(jzdma->irq, jzdma);
        return ret;
 }
 
@@ -864,7 +868,7 @@ static int jz4780_dma_remove(struct platform_device *pdev)
        struct jz4780_dma_dev *jzdma = platform_get_drvdata(pdev);
 
        of_dma_controller_free(pdev->dev.of_node);
-       devm_free_irq(&pdev->dev, jzdma->irq, jzdma);
+       free_irq(jzdma->irq, jzdma);
        dma_async_device_unregister(&jzdma->dma_device);
        return 0;
 }