[PATCH] drivers/media/video/s5p-tv/*_drv.c: use devm_ functions
Kyungmin Park
kyungmin.park at samsung.com
Thu Feb 9 12:36:16 EST 2012
Acked-by: Kyungmin Park <kyungmin.park at samsung.com>
To Marek,
Please include this patch at next git pull request.
On Thu, Feb 9, 2012 at 7:45 PM, Julia Lawall <Julia.Lawall at lip6.fr> wrote:
> From: Julia Lawall <Julia.Lawall at lip6.fr>
>
> The various devm_ functions allocate memory that is released when a driver
> detaches. This patch uses these functions for data that is allocated in
> the probe function of a platform device and is only freed in the remove
> function.
>
> Signed-off-by: Julia Lawall <Julia.Lawall at lip6.fr>
>
> ---
> drivers/media/video/s5p-tv/hdmi_drv.c | 30 ++++++++++--------------------
> drivers/media/video/s5p-tv/sdo_drv.c | 26 +++++++++-----------------
> 2 files changed, 19 insertions(+), 37 deletions(-)
>
> diff --git a/drivers/media/video/s5p-tv/hdmi_drv.c b/drivers/media/video/s5p-tv/hdmi_drv.c
> index 3e0dd09..6c21dc6 100644
> --- a/drivers/media/video/s5p-tv/hdmi_drv.c
> +++ b/drivers/media/video/s5p-tv/hdmi_drv.c
> @@ -875,7 +875,7 @@ static int __devinit hdmi_probe(struct platform_device *pdev)
>
> dev_dbg(dev, "probe start\n");
>
> - hdmi_dev = kzalloc(sizeof(*hdmi_dev), GFP_KERNEL);
> + hdmi_dev = devm_kzalloc(&pdev->dev, sizeof(*hdmi_dev), GFP_KERNEL);
> if (!hdmi_dev) {
> dev_err(dev, "out of memory\n");
> ret = -ENOMEM;
> @@ -886,7 +886,7 @@ static int __devinit hdmi_probe(struct platform_device *pdev)
>
> ret = hdmi_resources_init(hdmi_dev);
> if (ret)
> - goto fail_hdev;
> + goto fail;
>
> /* mapping HDMI registers */
> res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> @@ -896,24 +896,26 @@ static int __devinit hdmi_probe(struct platform_device *pdev)
> goto fail_init;
> }
>
> - hdmi_dev->regs = ioremap(res->start, resource_size(res));
> + hdmi_dev->regs = devm_ioremap(&pdev->dev, res->start,
> + resource_size(res));
> if (hdmi_dev->regs == NULL) {
> dev_err(dev, "register mapping failed.\n");
> ret = -ENXIO;
> - goto fail_hdev;
> + goto fail;
> }
>
> res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
> if (res == NULL) {
> dev_err(dev, "get interrupt resource failed.\n");
> ret = -ENXIO;
> - goto fail_regs;
> + goto fail_init;
> }
>
> - ret = request_irq(res->start, hdmi_irq_handler, 0, "hdmi", hdmi_dev);
> + ret = devm_request_irq(&pdev->dev, res->start, hdmi_irq_handler, 0,
> + "hdmi", hdmi_dev);
> if (ret) {
> dev_err(dev, "request interrupt failed.\n");
> - goto fail_regs;
> + goto fail_init;
> }
> hdmi_dev->irq = res->start;
>
> @@ -924,7 +926,7 @@ static int __devinit hdmi_probe(struct platform_device *pdev)
> ret = v4l2_device_register(NULL, &hdmi_dev->v4l2_dev);
> if (ret) {
> dev_err(dev, "could not register v4l2 device.\n");
> - goto fail_irq;
> + goto fail_init;
> }
>
> drv_data = (struct hdmi_driver_data *)
> @@ -969,18 +971,9 @@ static int __devinit hdmi_probe(struct platform_device *pdev)
> fail_vdev:
> v4l2_device_unregister(&hdmi_dev->v4l2_dev);
>
> -fail_irq:
> - free_irq(hdmi_dev->irq, hdmi_dev);
> -
> -fail_regs:
> - iounmap(hdmi_dev->regs);
> -
> fail_init:
> hdmi_resources_cleanup(hdmi_dev);
>
> -fail_hdev:
> - kfree(hdmi_dev);
> -
> fail:
> dev_err(dev, "probe failed\n");
> return ret;
> @@ -996,10 +989,7 @@ static int __devexit hdmi_remove(struct platform_device *pdev)
> clk_disable(hdmi_dev->res.hdmi);
> v4l2_device_unregister(&hdmi_dev->v4l2_dev);
> disable_irq(hdmi_dev->irq);
> - free_irq(hdmi_dev->irq, hdmi_dev);
> - iounmap(hdmi_dev->regs);
> hdmi_resources_cleanup(hdmi_dev);
> - kfree(hdmi_dev);
> dev_info(dev, "remove successful\n");
>
> return 0;
> diff --git a/drivers/media/video/s5p-tv/sdo_drv.c b/drivers/media/video/s5p-tv/sdo_drv.c
> index 059e774..f6bca2c 100644
> --- a/drivers/media/video/s5p-tv/sdo_drv.c
> +++ b/drivers/media/video/s5p-tv/sdo_drv.c
> @@ -301,7 +301,7 @@ static int __devinit sdo_probe(struct platform_device *pdev)
> struct clk *sclk_vpll;
>
> dev_info(dev, "probe start\n");
> - sdev = kzalloc(sizeof *sdev, GFP_KERNEL);
> + sdev = devm_kzalloc(&pdev->dev, sizeof *sdev, GFP_KERNEL);
> if (!sdev) {
> dev_err(dev, "not enough memory.\n");
> ret = -ENOMEM;
> @@ -314,14 +314,14 @@ static int __devinit sdo_probe(struct platform_device *pdev)
> if (res == NULL) {
> dev_err(dev, "get memory resource failed.\n");
> ret = -ENXIO;
> - goto fail_sdev;
> + goto fail;
> }
>
> - sdev->regs = ioremap(res->start, resource_size(res));
> + sdev->regs = devm_ioremap(&pdev->dev, res->start, resource_size(res));
> if (sdev->regs == NULL) {
> dev_err(dev, "register mapping failed.\n");
> ret = -ENXIO;
> - goto fail_sdev;
> + goto fail;
> }
>
> /* acquiring interrupt */
> @@ -329,12 +329,13 @@ static int __devinit sdo_probe(struct platform_device *pdev)
> if (res == NULL) {
> dev_err(dev, "get interrupt resource failed.\n");
> ret = -ENXIO;
> - goto fail_regs;
> + goto fail;
> }
> - ret = request_irq(res->start, sdo_irq_handler, 0, "s5p-sdo", sdev);
> + ret = devm_request_irq(&pdev->dev, res->start, sdo_irq_handler, 0,
> + "s5p-sdo", sdev);
> if (ret) {
> dev_err(dev, "request interrupt failed.\n");
> - goto fail_regs;
> + goto fail;
> }
> sdev->irq = res->start;
>
> @@ -343,7 +344,7 @@ static int __devinit sdo_probe(struct platform_device *pdev)
> if (IS_ERR_OR_NULL(sdev->sclk_dac)) {
> dev_err(dev, "failed to get clock 'sclk_dac'\n");
> ret = -ENXIO;
> - goto fail_irq;
> + goto fail;
> }
> sdev->dac = clk_get(dev, "dac");
> if (IS_ERR_OR_NULL(sdev->dac)) {
> @@ -415,12 +416,6 @@ fail_dac:
> clk_put(sdev->dac);
> fail_sclk_dac:
> clk_put(sdev->sclk_dac);
> -fail_irq:
> - free_irq(sdev->irq, sdev);
> -fail_regs:
> - iounmap(sdev->regs);
> -fail_sdev:
> - kfree(sdev);
> fail:
> dev_info(dev, "probe failed\n");
> return ret;
> @@ -439,9 +434,6 @@ static int __devexit sdo_remove(struct platform_device *pdev)
> clk_put(sdev->dacphy);
> clk_put(sdev->dac);
> clk_put(sdev->sclk_dac);
> - free_irq(sdev->irq, sdev);
> - iounmap(sdev->regs);
> - kfree(sdev);
>
> dev_info(&pdev->dev, "remove successful\n");
> return 0;
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the linux-arm-kernel
mailing list