提交 ced197bd 编写于 作者: S Sylwester Nawrocki 提交者: 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: NSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: NMauro Carvalho Chehab <m.chehab@samsung.com>
上级 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% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册