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

Commit 5f6d636f authored by Marek Szyprowski's avatar Marek Szyprowski Committed by Mauro Carvalho Chehab
Browse files

[media] exynos4-is: Improve clock management



There is no need to keep all clocks prepared all the time. Call to
clk_prepare/unprepare can be done on demand from runtime pm callbacks
(it is allowed to call sleeping functions from that context).

Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Acked-by: default avatarKrzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 438236e7
Loading
Loading
Loading
Loading
+4 −12
Original line number Diff line number Diff line
@@ -1454,25 +1454,17 @@ static void fimc_lite_clk_put(struct fimc_lite *fimc)
	if (IS_ERR(fimc->clock))
		return;

	clk_unprepare(fimc->clock);
	clk_put(fimc->clock);
	fimc->clock = ERR_PTR(-EINVAL);
}

static int fimc_lite_clk_get(struct fimc_lite *fimc)
{
	int ret;

	fimc->clock = clk_get(&fimc->pdev->dev, FLITE_CLK_NAME);
	if (IS_ERR(fimc->clock))
		return PTR_ERR(fimc->clock);

	ret = clk_prepare(fimc->clock);
	if (ret < 0) {
		clk_put(fimc->clock);
		fimc->clock = ERR_PTR(-EINVAL);
	}
	return ret;
	return 0;
}

static const struct of_device_id flite_of_match[];
@@ -1543,7 +1535,7 @@ static int fimc_lite_probe(struct platform_device *pdev)
	pm_runtime_enable(dev);

	if (!pm_runtime_enabled(dev)) {
		ret = clk_enable(fimc->clock);
		ret = clk_prepare_enable(fimc->clock);
		if (ret < 0)
			goto err_sd;
	}
@@ -1568,7 +1560,7 @@ static int fimc_lite_runtime_resume(struct device *dev)
{
	struct fimc_lite *fimc = dev_get_drvdata(dev);

	clk_enable(fimc->clock);
	clk_prepare_enable(fimc->clock);
	return 0;
}

@@ -1576,7 +1568,7 @@ static int fimc_lite_runtime_suspend(struct device *dev)
{
	struct fimc_lite *fimc = dev_get_drvdata(dev);

	clk_disable(fimc->clock);
	clk_disable_unprepare(fimc->clock);
	return 0;
}
#endif