> -----Original Message-----
> From: Sachin Kamat [mailto:sachin.kamat at linaro.org]
> Sent: Monday, August 06, 2012 3:46 PM
> To: dri-devel at lists.freedesktop.org
> Cc: inki.dae at samsung.com; airlied at linux.ie; sachin.kamat at linaro.org;
> patches at linaro.org
> Subject: [PATCH 5/5] drm/exynos: Use devm_* functions in exynos_drm_g2d.c
> file
> 
> devm_* functions are device managed functions and make error handling
> and cleanup cleaner and simpler.
> 
> Signed-off-by: Sachin Kamat <sachin.kamat at linaro.org>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_g2d.c |   50
++++++---------------------
> ---
>  1 files changed, 10 insertions(+), 40 deletions(-)
> 
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> index d2d88f2..6adfa4e 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_g2d.c
> @@ -129,7 +129,6 @@ struct g2d_runqueue_node {
>  struct g2d_data {
>       struct device                   *dev;
>       struct clk                      *gate_clk;
> -     struct resource                 *regs_res;
>       void __iomem                    *regs;
>       int                             irq;
>       struct workqueue_struct         *g2d_workq;
> @@ -751,7 +750,7 @@ static int __devinit g2d_probe(struct platform_device
> *pdev)
>       struct exynos_drm_subdrv *subdrv;
>       int ret;
> 
> -     g2d = kzalloc(sizeof(*g2d), GFP_KERNEL);
> +     g2d = devm_kzalloc(&pdev->dev, sizeof(*g2d), GFP_KERNEL);
>       if (!g2d) {
>               dev_err(dev, "failed to allocate driver data\n");
>               return -ENOMEM;
> @@ -759,10 +758,8 @@ static int __devinit g2d_probe(struct platform_device
> *pdev)
> 
>       g2d->runqueue_slab = kmem_cache_create("g2d_runqueue_slab",
>                       sizeof(struct g2d_runqueue_node), 0, 0, NULL);
> -     if (!g2d->runqueue_slab) {
> -             ret = -ENOMEM;
> -             goto err_free_mem;
> -     }
> +     if (!g2d->runqueue_slab)
> +             return -ENOMEM;
> 
>       g2d->dev = dev;
> 
> @@ -794,38 +791,26 @@ static int __devinit g2d_probe(struct
> platform_device *pdev)
>       pm_runtime_enable(dev);
> 
>       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> -     if (!res) {
> -             dev_err(dev, "failed to get I/O memory\n");
> -             ret = -ENOENT;
> -             goto err_put_clk;
> -     }
> 
> -     g2d->regs_res = request_mem_region(res->start, resource_size(res),
> -                                        dev_name(dev));
> -     if (!g2d->regs_res) {
> -             dev_err(dev, "failed to request I/O memory\n");
> -             ret = -ENOENT;
> -             goto err_put_clk;
> -     }
> -
> -     g2d->regs = ioremap(res->start, resource_size(res));
> +     g2d->regs = devm_request_and_ioremap(&pdev->dev, res);
>       if (!g2d->regs) {
>               dev_err(dev, "failed to remap I/O memory\n");
>               ret = -ENXIO;
> -             goto err_release_res;
> +             goto err_put_clk;
>       }
> 
>       g2d->irq = platform_get_irq(pdev, 0);
>       if (g2d->irq < 0) {
>               dev_err(dev, "failed to get irq\n");
>               ret = g2d->irq;
> -             goto err_unmap_base;
> +             goto err_put_clk;
>       }
> 
> -     ret = request_irq(g2d->irq, g2d_irq_handler, 0, "drm_g2d", g2d);
> +     ret = devm_request_irq(&pdev->dev, g2d->irq, g2d_irq_handler, 0,
> +                                                             "drm_g2d",
g2d);
>       if (ret < 0) {
>               dev_err(dev, "irq request failed\n");
> -             goto err_unmap_base;
> +             goto err_put_clk;
>       }
> 
>       platform_set_drvdata(pdev, g2d);
> @@ -838,7 +823,7 @@ static int __devinit g2d_probe(struct platform_device
> *pdev)
>       ret = exynos_drm_subdrv_register(subdrv);
>       if (ret < 0) {
>               dev_err(dev, "failed to register drm g2d device\n");
> -             goto err_free_irq;
> +             goto err_put_clk;
>       }
> 
>       dev_info(dev, "The exynos g2d(ver %d.%d) successfully probed\n",
> @@ -846,13 +831,6 @@ static int __devinit g2d_probe(struct platform_device
> *pdev)
> 
>       return 0;
> 
> -err_free_irq:
> -     free_irq(g2d->irq, g2d);
> -err_unmap_base:
> -     iounmap(g2d->regs);
> -err_release_res:
> -     release_resource(g2d->regs_res);
> -     kfree(g2d->regs_res);
>  err_put_clk:
>       pm_runtime_disable(dev);
>       clk_put(g2d->gate_clk);
> @@ -862,8 +840,6 @@ err_destroy_workqueue:
>       destroy_workqueue(g2d->g2d_workq);
>  err_destroy_slab:
>       kmem_cache_destroy(g2d->runqueue_slab);
> -err_free_mem:
> -     kfree(g2d);
>       return ret;
>  }
> 
> @@ -873,24 +849,18 @@ static int __devexit g2d_remove(struct
> platform_device *pdev)
> 
>       cancel_work_sync(&g2d->runqueue_work);
>       exynos_drm_subdrv_unregister(&g2d->subdrv);
> -     free_irq(g2d->irq, g2d);
> 
>       while (g2d->runqueue_node) {
>               g2d_free_runqueue_node(g2d, g2d->runqueue_node);
>               g2d->runqueue_node = g2d_get_runqueue_node(g2d);
>       }
> 
> -     iounmap(g2d->regs);
> -     release_resource(g2d->regs_res);
> -     kfree(g2d->regs_res);
> -
>       pm_runtime_disable(&pdev->dev);
>       clk_put(g2d->gate_clk);
> 
>       g2d_fini_cmdlist(g2d);
>       destroy_workqueue(g2d->g2d_workq);
>       kmem_cache_destroy(g2d->runqueue_slab);
> -     kfree(g2d);
> 
>       return 0;
>  }
> --
> 1.7.4.1

Applied.

Thanks for your patch.

Reply via email to