dmaengine: imx-dma: Check for clk_prepare_enable() error
authorFabio Estevam <fabio.estevam@freescale.com>
Sat, 20 Jun 2015 21:43:44 +0000 (18:43 -0300)
committerVinod Koul <vinod.koul@intel.com>
Tue, 7 Jul 2015 04:05:08 +0000 (09:35 +0530)
clk_prepare_enable() may fail, so we should better check its return value
and propagate it in the case of error.

While at it, change the label 'err' to a more descriptive naming.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/imx-dma.c

index 865501f..139c567 100644 (file)
@@ -1083,8 +1083,12 @@ static int __init imxdma_probe(struct platform_device *pdev)
        if (IS_ERR(imxdma->dma_ahb))
                return PTR_ERR(imxdma->dma_ahb);
 
-       clk_prepare_enable(imxdma->dma_ipg);
-       clk_prepare_enable(imxdma->dma_ahb);
+       ret = clk_prepare_enable(imxdma->dma_ipg);
+       if (ret)
+               return ret;
+       ret = clk_prepare_enable(imxdma->dma_ahb);
+       if (ret)
+               goto disable_dma_ipg_clk;
 
        /* reset DMA module */
        imx_dmav1_writel(imxdma, DCR_DRST, DMA_DCR);
@@ -1094,20 +1098,20 @@ static int __init imxdma_probe(struct platform_device *pdev)
                                       dma_irq_handler, 0, "DMA", imxdma);
                if (ret) {
                        dev_warn(imxdma->dev, "Can't register IRQ for DMA\n");
-                       goto err;
+                       goto disable_dma_ahb_clk;
                }
 
                irq_err = platform_get_irq(pdev, 1);
                if (irq_err < 0) {
                        ret = irq_err;
-                       goto err;
+                       goto disable_dma_ahb_clk;
                }
 
                ret = devm_request_irq(&pdev->dev, irq_err,
                                       imxdma_err_handler, 0, "DMA", imxdma);
                if (ret) {
                        dev_warn(imxdma->dev, "Can't register ERRIRQ for DMA\n");
-                       goto err;
+                       goto disable_dma_ahb_clk;
                }
        }
 
@@ -1144,7 +1148,7 @@ static int __init imxdma_probe(struct platform_device *pdev)
                                dev_warn(imxdma->dev, "Can't register IRQ %d "
                                         "for DMA channel %d\n",
                                         irq + i, i);
-                               goto err;
+                               goto disable_dma_ahb_clk;
                        }
                        init_timer(&imxdmac->watchdog);
                        imxdmac->watchdog.function = &imxdma_watchdog;
@@ -1190,7 +1194,7 @@ static int __init imxdma_probe(struct platform_device *pdev)
        ret = dma_async_device_register(&imxdma->dma_device);
        if (ret) {
                dev_err(&pdev->dev, "unable to register\n");
-               goto err;
+               goto disable_dma_ahb_clk;
        }
 
        if (pdev->dev.of_node) {
@@ -1206,9 +1210,10 @@ static int __init imxdma_probe(struct platform_device *pdev)
 
 err_of_dma_controller:
        dma_async_device_unregister(&imxdma->dma_device);
-err:
-       clk_disable_unprepare(imxdma->dma_ipg);
+disable_dma_ahb_clk:
        clk_disable_unprepare(imxdma->dma_ahb);
+disable_dma_ipg_clk:
+       clk_disable_unprepare(imxdma->dma_ipg);
        return ret;
 }