[media] exynos4-is: Activate mipi-csis in probe() if runtime PM is disabled
authorSylwester Nawrocki <s.nawrocki@samsung.com>
Sat, 19 Oct 2013 21:13:12 +0000 (18:13 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Thu, 2 Jan 2014 16:25:18 +0000 (14:25 -0200)
Devices should also operate normally when runtime PM is not enabled.
In case runtime PM is disabled activate the device already in probe().
Any related power domain needs to be then left permanently in active
state by the platform.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/media/platform/exynos4-is/mipi-csis.c

index 31dfc50..f3c3591 100644 (file)
@@ -790,6 +790,7 @@ static int s5pcsis_parse_dt(struct platform_device *pdev,
 #define s5pcsis_parse_dt(pdev, state) (-ENOSYS)
 #endif
 
+static int s5pcsis_pm_resume(struct device *dev, bool runtime);
 static const struct of_device_id s5pcsis_of_match[];
 
 static int s5pcsis_probe(struct platform_device *pdev)
@@ -902,13 +903,21 @@ static int s5pcsis_probe(struct platform_device *pdev)
        /* .. and a pointer to the subdev. */
        platform_set_drvdata(pdev, &state->sd);
        memcpy(state->events, s5pcsis_events, sizeof(state->events));
+
        pm_runtime_enable(dev);
+       if (!pm_runtime_enabled(dev)) {
+               ret = s5pcsis_pm_resume(dev, true);
+               if (ret < 0)
+                       goto e_m_ent;
+       }
 
        dev_info(&pdev->dev, "lanes: %d, hs_settle: %d, wclk: %d, freq: %u\n",
                 state->num_lanes, state->hs_settle, state->wclk_ext,
                 state->clk_frequency);
        return 0;
 
+e_m_ent:
+       media_entity_cleanup(&state->sd.entity);
 e_clkdis:
        clk_disable(state->clock[CSIS_CLK_MUX]);
 e_clkput:
@@ -1014,7 +1023,7 @@ static int s5pcsis_remove(struct platform_device *pdev)
        struct csis_state *state = sd_to_csis_state(sd);
 
        pm_runtime_disable(&pdev->dev);
-       s5pcsis_pm_suspend(&pdev->dev, false);
+       s5pcsis_pm_suspend(&pdev->dev, true);
        clk_disable(state->clock[CSIS_CLK_MUX]);
        pm_runtime_set_suspended(&pdev->dev);
        s5pcsis_clk_put(state);