[PATCH] drivers/media/video/s5p-tv/*_drv.c: use devm_ functions
From: kyungmin.park@samsung.com (Kyungmin Park)
Date: 2012-02-09 17:36:18
Also in:
kernel-janitors, linux-media, lkml
Acked-by: Kyungmin Park <kyungmin.park@samsung.com> To Marek, Please include this patch at next git pull request. On Thu, Feb 9, 2012 at 7:45 PM, Julia Lawall [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: Julia Lawall <redacted> 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 <redacted> --- ?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