forked from Minki/linux
drm/exynos: enable out_bridge in exynos_dsi_enable
As the out bridge will not be enabled directly by the framework, it should be enabled by DSI. exynos_dsi_enable() should handle a case, when there is an out_bridge connected as a DSI peripheral. Changed in v5: - fixed error path in exynos_dsi_enable Signed-off-by: Maciej Purski <m.purski@samsung.com> [ a.hajda@samsung.com: v5 ] Signed-off-by: Andrzej Hajda <a.hajda@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
This commit is contained in:
parent
6afb7721e2
commit
8a08f671f3
@ -1383,29 +1383,37 @@ static void exynos_dsi_enable(struct drm_encoder *encoder)
|
||||
return;
|
||||
|
||||
pm_runtime_get_sync(dsi->dev);
|
||||
|
||||
dsi->state |= DSIM_STATE_ENABLED;
|
||||
|
||||
ret = drm_panel_prepare(dsi->panel);
|
||||
if (ret < 0) {
|
||||
dsi->state &= ~DSIM_STATE_ENABLED;
|
||||
pm_runtime_put_sync(dsi->dev);
|
||||
return;
|
||||
if (dsi->panel) {
|
||||
ret = drm_panel_prepare(dsi->panel);
|
||||
if (ret < 0)
|
||||
goto err_put_sync;
|
||||
} else {
|
||||
drm_bridge_pre_enable(dsi->out_bridge);
|
||||
}
|
||||
|
||||
exynos_dsi_set_display_mode(dsi);
|
||||
exynos_dsi_set_display_enable(dsi, true);
|
||||
|
||||
ret = drm_panel_enable(dsi->panel);
|
||||
if (ret < 0) {
|
||||
dsi->state &= ~DSIM_STATE_ENABLED;
|
||||
exynos_dsi_set_display_enable(dsi, false);
|
||||
drm_panel_unprepare(dsi->panel);
|
||||
pm_runtime_put_sync(dsi->dev);
|
||||
return;
|
||||
if (dsi->panel) {
|
||||
ret = drm_panel_enable(dsi->panel);
|
||||
if (ret < 0)
|
||||
goto err_display_disable;
|
||||
} else {
|
||||
drm_bridge_enable(dsi->out_bridge);
|
||||
}
|
||||
|
||||
dsi->state |= DSIM_STATE_VIDOUT_AVAILABLE;
|
||||
return;
|
||||
|
||||
err_display_disable:
|
||||
exynos_dsi_set_display_enable(dsi, false);
|
||||
drm_panel_unprepare(dsi->panel);
|
||||
|
||||
err_put_sync:
|
||||
dsi->state &= ~DSIM_STATE_ENABLED;
|
||||
pm_runtime_put(dsi->dev);
|
||||
}
|
||||
|
||||
static void exynos_dsi_disable(struct drm_encoder *encoder)
|
||||
@ -1418,11 +1426,11 @@ static void exynos_dsi_disable(struct drm_encoder *encoder)
|
||||
dsi->state &= ~DSIM_STATE_VIDOUT_AVAILABLE;
|
||||
|
||||
drm_panel_disable(dsi->panel);
|
||||
drm_bridge_disable(dsi->out_bridge);
|
||||
exynos_dsi_set_display_enable(dsi, false);
|
||||
drm_panel_unprepare(dsi->panel);
|
||||
|
||||
drm_bridge_post_disable(dsi->out_bridge);
|
||||
dsi->state &= ~DSIM_STATE_ENABLED;
|
||||
|
||||
pm_runtime_put_sync(dsi->dev);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user