Commit e861dccc authored by Julia Lawall's avatar Julia Lawall Committed by Mauro Carvalho Chehab

[media] v4l: s5p-tv: use devm_ functions

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: default avatarJulia Lawall <Julia.Lawall@lip6.fr>
Acked-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 58df1716
...@@ -875,7 +875,7 @@ static int __devinit hdmi_probe(struct platform_device *pdev) ...@@ -875,7 +875,7 @@ static int __devinit hdmi_probe(struct platform_device *pdev)
dev_dbg(dev, "probe start\n"); 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) { if (!hdmi_dev) {
dev_err(dev, "out of memory\n"); dev_err(dev, "out of memory\n");
ret = -ENOMEM; ret = -ENOMEM;
...@@ -886,7 +886,7 @@ static int __devinit hdmi_probe(struct platform_device *pdev) ...@@ -886,7 +886,7 @@ static int __devinit hdmi_probe(struct platform_device *pdev)
ret = hdmi_resources_init(hdmi_dev); ret = hdmi_resources_init(hdmi_dev);
if (ret) if (ret)
goto fail_hdev; goto fail;
/* mapping HDMI registers */ /* mapping HDMI registers */
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
...@@ -896,24 +896,26 @@ static int __devinit hdmi_probe(struct platform_device *pdev) ...@@ -896,24 +896,26 @@ static int __devinit hdmi_probe(struct platform_device *pdev)
goto fail_init; 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) { if (hdmi_dev->regs == NULL) {
dev_err(dev, "register mapping failed.\n"); dev_err(dev, "register mapping failed.\n");
ret = -ENXIO; ret = -ENXIO;
goto fail_hdev; goto fail_init;
} }
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (res == NULL) { if (res == NULL) {
dev_err(dev, "get interrupt resource failed.\n"); dev_err(dev, "get interrupt resource failed.\n");
ret = -ENXIO; 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) { if (ret) {
dev_err(dev, "request interrupt failed.\n"); dev_err(dev, "request interrupt failed.\n");
goto fail_regs; goto fail_init;
} }
hdmi_dev->irq = res->start; hdmi_dev->irq = res->start;
...@@ -924,7 +926,7 @@ static int __devinit hdmi_probe(struct platform_device *pdev) ...@@ -924,7 +926,7 @@ static int __devinit hdmi_probe(struct platform_device *pdev)
ret = v4l2_device_register(NULL, &hdmi_dev->v4l2_dev); ret = v4l2_device_register(NULL, &hdmi_dev->v4l2_dev);
if (ret) { if (ret) {
dev_err(dev, "could not register v4l2 device.\n"); dev_err(dev, "could not register v4l2 device.\n");
goto fail_irq; goto fail_init;
} }
drv_data = (struct hdmi_driver_data *) drv_data = (struct hdmi_driver_data *)
...@@ -969,18 +971,9 @@ static int __devinit hdmi_probe(struct platform_device *pdev) ...@@ -969,18 +971,9 @@ static int __devinit hdmi_probe(struct platform_device *pdev)
fail_vdev: fail_vdev:
v4l2_device_unregister(&hdmi_dev->v4l2_dev); v4l2_device_unregister(&hdmi_dev->v4l2_dev);
fail_irq:
free_irq(hdmi_dev->irq, hdmi_dev);
fail_regs:
iounmap(hdmi_dev->regs);
fail_init: fail_init:
hdmi_resources_cleanup(hdmi_dev); hdmi_resources_cleanup(hdmi_dev);
fail_hdev:
kfree(hdmi_dev);
fail: fail:
dev_err(dev, "probe failed\n"); dev_err(dev, "probe failed\n");
return ret; return ret;
...@@ -996,10 +989,7 @@ static int __devexit hdmi_remove(struct platform_device *pdev) ...@@ -996,10 +989,7 @@ static int __devexit hdmi_remove(struct platform_device *pdev)
clk_disable(hdmi_dev->res.hdmi); clk_disable(hdmi_dev->res.hdmi);
v4l2_device_unregister(&hdmi_dev->v4l2_dev); v4l2_device_unregister(&hdmi_dev->v4l2_dev);
disable_irq(hdmi_dev->irq); disable_irq(hdmi_dev->irq);
free_irq(hdmi_dev->irq, hdmi_dev);
iounmap(hdmi_dev->regs);
hdmi_resources_cleanup(hdmi_dev); hdmi_resources_cleanup(hdmi_dev);
kfree(hdmi_dev);
dev_info(dev, "remove successful\n"); dev_info(dev, "remove successful\n");
return 0; return 0;
......
...@@ -301,7 +301,7 @@ static int __devinit sdo_probe(struct platform_device *pdev) ...@@ -301,7 +301,7 @@ static int __devinit sdo_probe(struct platform_device *pdev)
struct clk *sclk_vpll; struct clk *sclk_vpll;
dev_info(dev, "probe start\n"); dev_info(dev, "probe start\n");
sdev = kzalloc(sizeof *sdev, GFP_KERNEL); sdev = devm_kzalloc(&pdev->dev, sizeof *sdev, GFP_KERNEL);
if (!sdev) { if (!sdev) {
dev_err(dev, "not enough memory.\n"); dev_err(dev, "not enough memory.\n");
ret = -ENOMEM; ret = -ENOMEM;
...@@ -314,14 +314,14 @@ static int __devinit sdo_probe(struct platform_device *pdev) ...@@ -314,14 +314,14 @@ static int __devinit sdo_probe(struct platform_device *pdev)
if (res == NULL) { if (res == NULL) {
dev_err(dev, "get memory resource failed.\n"); dev_err(dev, "get memory resource failed.\n");
ret = -ENXIO; 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) { if (sdev->regs == NULL) {
dev_err(dev, "register mapping failed.\n"); dev_err(dev, "register mapping failed.\n");
ret = -ENXIO; ret = -ENXIO;
goto fail_sdev; goto fail;
} }
/* acquiring interrupt */ /* acquiring interrupt */
...@@ -329,12 +329,13 @@ static int __devinit sdo_probe(struct platform_device *pdev) ...@@ -329,12 +329,13 @@ static int __devinit sdo_probe(struct platform_device *pdev)
if (res == NULL) { if (res == NULL) {
dev_err(dev, "get interrupt resource failed.\n"); dev_err(dev, "get interrupt resource failed.\n");
ret = -ENXIO; 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) { if (ret) {
dev_err(dev, "request interrupt failed.\n"); dev_err(dev, "request interrupt failed.\n");
goto fail_regs; goto fail;
} }
sdev->irq = res->start; sdev->irq = res->start;
...@@ -343,7 +344,7 @@ static int __devinit sdo_probe(struct platform_device *pdev) ...@@ -343,7 +344,7 @@ static int __devinit sdo_probe(struct platform_device *pdev)
if (IS_ERR_OR_NULL(sdev->sclk_dac)) { if (IS_ERR_OR_NULL(sdev->sclk_dac)) {
dev_err(dev, "failed to get clock 'sclk_dac'\n"); dev_err(dev, "failed to get clock 'sclk_dac'\n");
ret = -ENXIO; ret = -ENXIO;
goto fail_irq; goto fail;
} }
sdev->dac = clk_get(dev, "dac"); sdev->dac = clk_get(dev, "dac");
if (IS_ERR_OR_NULL(sdev->dac)) { if (IS_ERR_OR_NULL(sdev->dac)) {
...@@ -415,12 +416,6 @@ static int __devinit sdo_probe(struct platform_device *pdev) ...@@ -415,12 +416,6 @@ static int __devinit sdo_probe(struct platform_device *pdev)
clk_put(sdev->dac); clk_put(sdev->dac);
fail_sclk_dac: fail_sclk_dac:
clk_put(sdev->sclk_dac); clk_put(sdev->sclk_dac);
fail_irq:
free_irq(sdev->irq, sdev);
fail_regs:
iounmap(sdev->regs);
fail_sdev:
kfree(sdev);
fail: fail:
dev_info(dev, "probe failed\n"); dev_info(dev, "probe failed\n");
return ret; return ret;
...@@ -439,9 +434,6 @@ static int __devexit sdo_remove(struct platform_device *pdev) ...@@ -439,9 +434,6 @@ static int __devexit sdo_remove(struct platform_device *pdev)
clk_put(sdev->dacphy); clk_put(sdev->dacphy);
clk_put(sdev->dac); clk_put(sdev->dac);
clk_put(sdev->sclk_dac); clk_put(sdev->sclk_dac);
free_irq(sdev->irq, sdev);
iounmap(sdev->regs);
kfree(sdev);
dev_info(&pdev->dev, "remove successful\n"); dev_info(&pdev->dev, "remove successful\n");
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment