|
@@ -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)
|
|
/* .. 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)
|
|
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);
|