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

Commit 5b58b954 authored by Sachin Kamat's avatar Sachin Kamat Committed by Mauro Carvalho Chehab
Browse files

[media] s5p-jpeg: Use devm_* functions in jpeg-core.c file



devm_* functions are used to replace kzalloc, request_mem_region, ioremap
and request_irq functions in probe call. With the usage of devm_* functions
explicit freeing and unmapping is not required.

Signed-off-by: default avatarSachin Kamat <sachin.kamat@linaro.org>
Signed-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 32fced05
Loading
Loading
Loading
Loading
+10 −48
Original line number Original line Diff line number Diff line
@@ -1290,7 +1290,7 @@ static int s5p_jpeg_probe(struct platform_device *pdev)
	int ret;
	int ret;


	/* JPEG IP abstraction struct */
	/* JPEG IP abstraction struct */
	jpeg = kzalloc(sizeof(struct s5p_jpeg), GFP_KERNEL);
	jpeg = devm_kzalloc(&pdev->dev, sizeof(struct s5p_jpeg), GFP_KERNEL);
	if (!jpeg)
	if (!jpeg)
		return -ENOMEM;
		return -ENOMEM;


@@ -1300,43 +1300,25 @@ static int s5p_jpeg_probe(struct platform_device *pdev)


	/* memory-mapped registers */
	/* memory-mapped registers */
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (!res) {
		dev_err(&pdev->dev, "cannot find IO resource\n");
		ret = -ENOENT;
		goto jpeg_alloc_rollback;
	}

	jpeg->ioarea = request_mem_region(res->start, resource_size(res),
					  pdev->name);
	if (!jpeg->ioarea) {
		dev_err(&pdev->dev, "cannot request IO\n");
		ret = -ENXIO;
		goto jpeg_alloc_rollback;
	}


	jpeg->regs = ioremap(res->start, resource_size(res));
	jpeg->regs = devm_request_and_ioremap(&pdev->dev, res);
	if (!jpeg->regs) {
	if (jpeg->regs == NULL) {
		dev_err(&pdev->dev, "cannot map IO\n");
		dev_err(&pdev->dev, "Failed to obtain io memory\n");
		ret = -ENXIO;
		return -ENOENT;
		goto mem_region_rollback;
	}
	}


	dev_dbg(&pdev->dev, "registers %p (%p, %p)\n",
		jpeg->regs, jpeg->ioarea, res);

	/* interrupt service routine registration */
	/* interrupt service routine registration */
	jpeg->irq = ret = platform_get_irq(pdev, 0);
	jpeg->irq = ret = platform_get_irq(pdev, 0);
	if (ret < 0) {
	if (ret < 0) {
		dev_err(&pdev->dev, "cannot find IRQ\n");
		dev_err(&pdev->dev, "cannot find IRQ\n");
		goto ioremap_rollback;
		return ret;
	}
	}


	ret = request_irq(jpeg->irq, s5p_jpeg_irq, 0,
	ret = devm_request_irq(&pdev->dev, jpeg->irq, s5p_jpeg_irq, 0,
			dev_name(&pdev->dev), jpeg);
			dev_name(&pdev->dev), jpeg);

	if (ret) {
	if (ret) {
		dev_err(&pdev->dev, "cannot claim IRQ %d\n", jpeg->irq);
		dev_err(&pdev->dev, "cannot claim IRQ %d\n", jpeg->irq);
		goto ioremap_rollback;
		return ret;
	}
	}


	/* clocks */
	/* clocks */
@@ -1344,7 +1326,7 @@ static int s5p_jpeg_probe(struct platform_device *pdev)
	if (IS_ERR(jpeg->clk)) {
	if (IS_ERR(jpeg->clk)) {
		dev_err(&pdev->dev, "cannot get clock\n");
		dev_err(&pdev->dev, "cannot get clock\n");
		ret = PTR_ERR(jpeg->clk);
		ret = PTR_ERR(jpeg->clk);
		goto request_irq_rollback;
		return ret;
	}
	}
	dev_dbg(&pdev->dev, "clock source %p\n", jpeg->clk);
	dev_dbg(&pdev->dev, "clock source %p\n", jpeg->clk);
	clk_enable(jpeg->clk);
	clk_enable(jpeg->clk);
@@ -1464,18 +1446,6 @@ static int s5p_jpeg_probe(struct platform_device *pdev)
	clk_disable(jpeg->clk);
	clk_disable(jpeg->clk);
	clk_put(jpeg->clk);
	clk_put(jpeg->clk);


request_irq_rollback:
	free_irq(jpeg->irq, jpeg);

ioremap_rollback:
	iounmap(jpeg->regs);

mem_region_rollback:
	release_resource(jpeg->ioarea);
	release_mem_region(jpeg->ioarea->start, resource_size(jpeg->ioarea));

jpeg_alloc_rollback:
	kfree(jpeg);
	return ret;
	return ret;
}
}


@@ -1496,14 +1466,6 @@ static int s5p_jpeg_remove(struct platform_device *pdev)
	clk_disable(jpeg->clk);
	clk_disable(jpeg->clk);
	clk_put(jpeg->clk);
	clk_put(jpeg->clk);


	free_irq(jpeg->irq, jpeg);

	iounmap(jpeg->regs);

	release_resource(jpeg->ioarea);
	release_mem_region(jpeg->ioarea->start, resource_size(jpeg->ioarea));
	kfree(jpeg);

	return 0;
	return 0;
}
}


+0 −2
Original line number Original line Diff line number Diff line
@@ -54,7 +54,6 @@
 * @vfd_encoder:	video device node for encoder mem2mem mode
 * @vfd_encoder:	video device node for encoder mem2mem mode
 * @vfd_decoder:	video device node for decoder mem2mem mode
 * @vfd_decoder:	video device node for decoder mem2mem mode
 * @m2m_dev:		v4l2 mem2mem device data
 * @m2m_dev:		v4l2 mem2mem device data
 * @ioarea:		JPEG IP memory region
 * @regs:		JPEG IP registers mapping
 * @regs:		JPEG IP registers mapping
 * @irq:		JPEG IP irq
 * @irq:		JPEG IP irq
 * @clk:		JPEG IP clock
 * @clk:		JPEG IP clock
@@ -70,7 +69,6 @@ struct s5p_jpeg {
	struct video_device	*vfd_decoder;
	struct video_device	*vfd_decoder;
	struct v4l2_m2m_dev	*m2m_dev;
	struct v4l2_m2m_dev	*m2m_dev;


	struct resource		*ioarea;
	void __iomem		*regs;
	void __iomem		*regs;
	unsigned int		irq;
	unsigned int		irq;
	struct clk		*clk;
	struct clk		*clk;