The driver depended on CONFIG_PM_RUNTIME to be functional, which isn't
necessary.

The solution to the above is to enable all runtime PM resourses during
probe and update the device's runtime PM status to active.

Since driver core invokes pm_request_idle() after ->probe(), unused gsc
devices will be runtime PM suspended and thus we will still benefit
from using CONFIG_PM_RUNTIME.

Signed-off-by: Ulf Hansson <ulf.hans...@linaro.org>
---
 drivers/media/platform/exynos-gsc/gsc-core.c | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/drivers/media/platform/exynos-gsc/gsc-core.c 
b/drivers/media/platform/exynos-gsc/gsc-core.c
index 13d0226..c3a050e 100644
--- a/drivers/media/platform/exynos-gsc/gsc-core.c
+++ b/drivers/media/platform/exynos-gsc/gsc-core.c
@@ -1085,7 +1085,7 @@ static int gsc_probe(struct platform_device *pdev)
                return PTR_ERR(gsc->clock);
        }
 
-       ret = clk_prepare(gsc->clock);
+       ret = clk_prepare_enable(gsc->clock);
        if (ret) {
                dev_err(&gsc->pdev->dev, "clock prepare failed for clock: %s\n",
                        GSC_CLOCK_GATE_NAME);
@@ -1108,30 +1108,30 @@ static int gsc_probe(struct platform_device *pdev)
                goto err_v4l2;
 
        platform_set_drvdata(pdev, gsc);
-       pm_runtime_enable(dev);
-       ret = pm_runtime_get_sync(&pdev->dev);
-       if (ret < 0)
-               goto err_m2m;
+
+       gsc_hw_set_sw_reset(gsc);
+       gsc_wait_reset(gsc);
+       gsc_m2m_resume(gsc);
 
        /* Initialize continious memory allocator */
        gsc->alloc_ctx = vb2_dma_contig_init_ctx(dev);
        if (IS_ERR(gsc->alloc_ctx)) {
                ret = PTR_ERR(gsc->alloc_ctx);
-               goto err_pm;
+               goto err_m2m;
        }
 
        dev_dbg(dev, "gsc-%d registered successfully\n", gsc->id);
 
-       pm_runtime_put(dev);
+       pm_runtime_set_active(dev);
+       pm_runtime_enable(dev);
+
        return 0;
-err_pm:
-       pm_runtime_put(dev);
 err_m2m:
        gsc_unregister_m2m_device(gsc);
 err_v4l2:
        v4l2_device_unregister(&gsc->v4l2_dev);
 err_clk:
-       clk_unprepare(gsc->clock);
+       clk_disable_unprepare(gsc->clock);
        return ret;
 }
 
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to