Message ID | 1340086661-12388-2-git-send-email-sachin.kamat@linaro.org |
---|---|
State | Accepted |
Headers | show |
2012/6/19, Sachin Kamat <sachin.kamat@linaro.org>: > devm_* functions are device managed functions and make error handling > and cleanup cleaner and simpler. > > Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org> > Signed-off-by: Sachin Kamat <sachin.kamat@samsung.com> > --- > drivers/gpu/drm/exynos/exynos_hdmi.c | 36 > ++++++--------------------------- > 1 files changed, 7 insertions(+), 29 deletions(-) > > diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c > b/drivers/gpu/drm/exynos/exynos_hdmi.c > index a137e9e..5816b0f 100644 > --- a/drivers/gpu/drm/exynos/exynos_hdmi.c > +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c > @@ -63,7 +63,6 @@ struct hdmi_context { > bool dvi_mode; > struct mutex hdmi_mutex; > > - struct resource *regs_res; > void __iomem *regs; > unsigned int external_irq; > unsigned int internal_irq; > @@ -2280,16 +2279,17 @@ static int __devinit hdmi_probe(struct > platform_device *pdev) > return -EINVAL; > } > > - drm_hdmi_ctx = kzalloc(sizeof(*drm_hdmi_ctx), GFP_KERNEL); > + drm_hdmi_ctx = devm_kzalloc(&pdev->dev, sizeof(*drm_hdmi_ctx), > + GFP_KERNEL); > if (!drm_hdmi_ctx) { > DRM_ERROR("failed to allocate common hdmi context.\n"); > return -ENOMEM; > } > > - hdata = kzalloc(sizeof(struct hdmi_context), GFP_KERNEL); > + hdata = devm_kzalloc(&pdev->dev, sizeof(struct hdmi_context), > + GFP_KERNEL); > if (!hdata) { > DRM_ERROR("out of memory\n"); > - kfree(drm_hdmi_ctx); > return -ENOMEM; > } > > @@ -2318,26 +2318,18 @@ static int __devinit hdmi_probe(struct > platform_device *pdev) > goto err_resource; > } > > - hdata->regs_res = request_mem_region(res->start, resource_size(res), > - dev_name(dev)); > - if (!hdata->regs_res) { > - DRM_ERROR("failed to claim register region\n"); > - ret = -ENOENT; > - goto err_resource; > - } > - > - hdata->regs = ioremap(res->start, resource_size(res)); > + hdata->regs = devm_request_and_ioremap(&pdev->dev, res); > if (!hdata->regs) { > DRM_ERROR("failed to map registers\n"); > ret = -ENXIO; > - goto err_req_region; > + goto err_resource; > } > > /* DDC i2c driver */ > if (i2c_add_driver(&ddc_driver)) { > DRM_ERROR("failed to register ddc i2c driver\n"); > ret = -ENOENT; > - goto err_iomap; > + goto err_resource; > } > > hdata->ddc_port = hdmi_ddc; > @@ -2398,16 +2390,9 @@ err_hdmiphy: > i2c_del_driver(&hdmiphy_driver); > err_ddc: > i2c_del_driver(&ddc_driver); > -err_iomap: > - iounmap(hdata->regs); > -err_req_region: > - release_mem_region(hdata->regs_res->start, > - resource_size(hdata->regs_res)); > err_resource: > hdmi_resources_cleanup(hdata); > err_data: > - kfree(hdata); > - kfree(drm_hdmi_ctx); > return ret; > } > > @@ -2425,18 +2410,11 @@ static int __devexit hdmi_remove(struct > platform_device *pdev) > > hdmi_resources_cleanup(hdata); > > - iounmap(hdata->regs); > - > - release_mem_region(hdata->regs_res->start, > - resource_size(hdata->regs_res)); > - > /* hdmiphy i2c driver */ > i2c_del_driver(&hdmiphy_driver); > /* DDC i2c driver */ > i2c_del_driver(&ddc_driver); > > - kfree(hdata); > - > return 0; > } > > -- > 1.7.4.1 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel > Applied. Thanks, Inki Dae
diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c index a137e9e..5816b0f 100644 --- a/drivers/gpu/drm/exynos/exynos_hdmi.c +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c @@ -63,7 +63,6 @@ struct hdmi_context { bool dvi_mode; struct mutex hdmi_mutex; - struct resource *regs_res; void __iomem *regs; unsigned int external_irq; unsigned int internal_irq; @@ -2280,16 +2279,17 @@ static int __devinit hdmi_probe(struct platform_device *pdev) return -EINVAL; } - drm_hdmi_ctx = kzalloc(sizeof(*drm_hdmi_ctx), GFP_KERNEL); + drm_hdmi_ctx = devm_kzalloc(&pdev->dev, sizeof(*drm_hdmi_ctx), + GFP_KERNEL); if (!drm_hdmi_ctx) { DRM_ERROR("failed to allocate common hdmi context.\n"); return -ENOMEM; } - hdata = kzalloc(sizeof(struct hdmi_context), GFP_KERNEL); + hdata = devm_kzalloc(&pdev->dev, sizeof(struct hdmi_context), + GFP_KERNEL); if (!hdata) { DRM_ERROR("out of memory\n"); - kfree(drm_hdmi_ctx); return -ENOMEM; } @@ -2318,26 +2318,18 @@ static int __devinit hdmi_probe(struct platform_device *pdev) goto err_resource; } - hdata->regs_res = request_mem_region(res->start, resource_size(res), - dev_name(dev)); - if (!hdata->regs_res) { - DRM_ERROR("failed to claim register region\n"); - ret = -ENOENT; - goto err_resource; - } - - hdata->regs = ioremap(res->start, resource_size(res)); + hdata->regs = devm_request_and_ioremap(&pdev->dev, res); if (!hdata->regs) { DRM_ERROR("failed to map registers\n"); ret = -ENXIO; - goto err_req_region; + goto err_resource; } /* DDC i2c driver */ if (i2c_add_driver(&ddc_driver)) { DRM_ERROR("failed to register ddc i2c driver\n"); ret = -ENOENT; - goto err_iomap; + goto err_resource; } hdata->ddc_port = hdmi_ddc; @@ -2398,16 +2390,9 @@ err_hdmiphy: i2c_del_driver(&hdmiphy_driver); err_ddc: i2c_del_driver(&ddc_driver); -err_iomap: - iounmap(hdata->regs); -err_req_region: - release_mem_region(hdata->regs_res->start, - resource_size(hdata->regs_res)); err_resource: hdmi_resources_cleanup(hdata); err_data: - kfree(hdata); - kfree(drm_hdmi_ctx); return ret; } @@ -2425,18 +2410,11 @@ static int __devexit hdmi_remove(struct platform_device *pdev) hdmi_resources_cleanup(hdata); - iounmap(hdata->regs); - - release_mem_region(hdata->regs_res->start, - resource_size(hdata->regs_res)); - /* hdmiphy i2c driver */ i2c_del_driver(&hdmiphy_driver); /* DDC i2c driver */ i2c_del_driver(&ddc_driver); - kfree(hdata); - return 0; }