Commit ced197bd authored by Sylwester Nawrocki's avatar Sylwester Nawrocki Committed by Mauro Carvalho Chehab

[media] exynos4-is: Activate mipi-csis in probe() if runtime PM is disabled

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: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent ea3f1a3d
...@@ -790,6 +790,7 @@ static int s5pcsis_parse_dt(struct platform_device *pdev, ...@@ -790,6 +790,7 @@ static int s5pcsis_parse_dt(struct platform_device *pdev,
#define s5pcsis_parse_dt(pdev, state) (-ENOSYS) #define s5pcsis_parse_dt(pdev, state) (-ENOSYS)
#endif #endif
static int s5pcsis_pm_resume(struct device *dev, bool runtime);
static const struct of_device_id s5pcsis_of_match[]; static const struct of_device_id s5pcsis_of_match[];
static int s5pcsis_probe(struct platform_device *pdev) static int s5pcsis_probe(struct platform_device *pdev)
...@@ -902,13 +903,21 @@ 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. */ /* .. and a pointer to the subdev. */
platform_set_drvdata(pdev, &state->sd); platform_set_drvdata(pdev, &state->sd);
memcpy(state->events, s5pcsis_events, sizeof(state->events)); memcpy(state->events, s5pcsis_events, sizeof(state->events));
pm_runtime_enable(dev); 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", dev_info(&pdev->dev, "lanes: %d, hs_settle: %d, wclk: %d, freq: %u\n",
state->num_lanes, state->hs_settle, state->wclk_ext, state->num_lanes, state->hs_settle, state->wclk_ext,
state->clk_frequency); state->clk_frequency);
return 0; return 0;
e_m_ent:
media_entity_cleanup(&state->sd.entity);
e_clkdis: e_clkdis:
clk_disable(state->clock[CSIS_CLK_MUX]); clk_disable(state->clock[CSIS_CLK_MUX]);
e_clkput: e_clkput:
...@@ -1014,7 +1023,7 @@ static int s5pcsis_remove(struct platform_device *pdev) ...@@ -1014,7 +1023,7 @@ static int s5pcsis_remove(struct platform_device *pdev)
struct csis_state *state = sd_to_csis_state(sd); struct csis_state *state = sd_to_csis_state(sd);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
s5pcsis_pm_suspend(&pdev->dev, false); s5pcsis_pm_suspend(&pdev->dev, true);
clk_disable(state->clock[CSIS_CLK_MUX]); clk_disable(state->clock[CSIS_CLK_MUX]);
pm_runtime_set_suspended(&pdev->dev); pm_runtime_set_suspended(&pdev->dev);
s5pcsis_clk_put(state); s5pcsis_clk_put(state);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment