dmaengine: imx-sdma: Use devm functions
authorFabio Estevam <fabio.estevam@freescale.com>
Mon, 29 Dec 2014 17:20:52 +0000 (15:20 -0200)
committerVinod Koul <vinod.koul@intel.com>
Tue, 13 Jan 2015 18:21:07 +0000 (23:51 +0530)
By using devm functions we can make the code shorter and cleaner.

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

index d28c26bf7a2ada6a4a72da7a4738fd979a9cb5b7..125c326c525fcfdee27899cd185bb781b67ac345 100644 (file)
@@ -1472,7 +1472,7 @@ static int sdma_probe(struct platform_device *pdev)
        if (ret)
                return ret;
 
-       sdma = kzalloc(sizeof(*sdma), GFP_KERNEL);
+       sdma = devm_kzalloc(&pdev->dev, sizeof(*sdma), GFP_KERNEL);
        if (!sdma)
                return -ENOMEM;
 
@@ -1481,48 +1481,34 @@ static int sdma_probe(struct platform_device *pdev)
        sdma->dev = &pdev->dev;
        sdma->drvdata = drvdata;
 
-       iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        irq = platform_get_irq(pdev, 0);
-       if (!iores || irq < 0) {
-               ret = -EINVAL;
-               goto err_irq;
-       }
+       if (irq < 0)
+               return -EINVAL;
 
-       if (!request_mem_region(iores->start, resource_size(iores), pdev->name)) {
-               ret = -EBUSY;
-               goto err_request_region;
-       }
+       iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       sdma->regs = devm_ioremap_resource(&pdev->dev, iores);
+       if (IS_ERR(sdma->regs))
+               return PTR_ERR(sdma->regs);
 
        sdma->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
-       if (IS_ERR(sdma->clk_ipg)) {
-               ret = PTR_ERR(sdma->clk_ipg);
-               goto err_clk;
-       }
+       if (IS_ERR(sdma->clk_ipg))
+               return PTR_ERR(sdma->clk_ipg);
 
        sdma->clk_ahb = devm_clk_get(&pdev->dev, "ahb");
-       if (IS_ERR(sdma->clk_ahb)) {
-               ret = PTR_ERR(sdma->clk_ahb);
-               goto err_clk;
-       }
+       if (IS_ERR(sdma->clk_ahb))
+               return PTR_ERR(sdma->clk_ahb);
 
        clk_prepare(sdma->clk_ipg);
        clk_prepare(sdma->clk_ahb);
 
-       sdma->regs = ioremap(iores->start, resource_size(iores));
-       if (!sdma->regs) {
-               ret = -ENOMEM;
-               goto err_ioremap;
-       }
-
-       ret = request_irq(irq, sdma_int_handler, 0, "sdma", sdma);
+       ret = devm_request_irq(&pdev->dev, irq, sdma_int_handler, 0, "sdma",
+                              sdma);
        if (ret)
-               goto err_request_irq;
+               return ret;
 
        sdma->script_addrs = kzalloc(sizeof(*sdma->script_addrs), GFP_KERNEL);
-       if (!sdma->script_addrs) {
-               ret = -ENOMEM;
-               goto err_alloc;
-       }
+       if (!sdma->script_addrs)
+               return -ENOMEM;
 
        /* initially no scripts available */
        saddr_arr = (s32 *)sdma->script_addrs;
@@ -1627,38 +1613,22 @@ err_register:
        dma_async_device_unregister(&sdma->dma_device);
 err_init:
        kfree(sdma->script_addrs);
-err_alloc:
-       free_irq(irq, sdma);
-err_request_irq:
-       iounmap(sdma->regs);
-err_ioremap:
-err_clk:
-       release_mem_region(iores->start, resource_size(iores));
-err_request_region:
-err_irq:
-       kfree(sdma);
        return ret;
 }
 
 static int sdma_remove(struct platform_device *pdev)
 {
        struct sdma_engine *sdma = platform_get_drvdata(pdev);
-       struct resource *iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       int irq = platform_get_irq(pdev, 0);
        int i;
 
        dma_async_device_unregister(&sdma->dma_device);
        kfree(sdma->script_addrs);
-       free_irq(irq, sdma);
-       iounmap(sdma->regs);
-       release_mem_region(iores->start, resource_size(iores));
        /* Kill the tasklet */
        for (i = 0; i < MAX_DMA_CHANNELS; i++) {
                struct sdma_channel *sdmac = &sdma->channel[i];
 
                tasklet_kill(&sdmac->tasklet);
        }
-       kfree(sdma);
 
        platform_set_drvdata(pdev, NULL);
        dev_info(&pdev->dev, "Removed...\n");