Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+10 −20
Original line number Original line Diff line number Diff line
@@ -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)


	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)
		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)
	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)
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)
	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;
+9 −17
Original line number Original line Diff line number Diff line
@@ -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)
	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)
	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)
	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)
	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)
	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;