diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2018-06-08 18:42:15 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-06-08 18:42:14 -0700 |
| commit | cfefd5602587f4b6fc520fa1cafd7dbc4a1a3678 (patch) | |
| tree | 0d84b3a3dd8b2d66ed80deaeaf46abd5db7f11de /drivers/gpu | |
| parent | 45ac2680dd2a2ecf1a3abb6085ef7dcee26c65a9 (diff) | |
| parent | c523959445aa0b87868b42c102eb6202b7fa4379 (diff) | |
Merge "drm: msm: Fix blue screen glitch problem on DSI"
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/msm/dba_bridge.c | 7 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.c | 21 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.h | 10 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/dsi-staging/dsi_display.c | 42 |
4 files changed, 35 insertions, 45 deletions
diff --git a/drivers/gpu/drm/msm/dba_bridge.c b/drivers/gpu/drm/msm/dba_bridge.c index 7887bda23df0..62294ddf8034 100644 --- a/drivers/gpu/drm/msm/dba_bridge.c +++ b/drivers/gpu/drm/msm/dba_bridge.c @@ -132,7 +132,9 @@ static void _dba_bridge_pre_enable(struct drm_bridge *bridge) } d_bridge = to_dba_bridge(bridge); - if (d_bridge->ops.power_on) + + /* Skip power_on calling when splash is enabled in bootloader. */ + if ((d_bridge->ops.power_on) && (!d_bridge->cont_splash_enabled)) d_bridge->ops.power_on(d_bridge->dba_ctx, true, 0); } @@ -193,7 +195,8 @@ static void _dba_bridge_enable(struct drm_bridge *bridge) video_cfg.scaninfo, video_cfg.ar, video_cfg.vic); } - if (d_bridge->ops.video_on) { + /* Skip video_on calling if splash is enabled in bootloader. */ + if ((d_bridge->ops.video_on) && (!d_bridge->cont_splash_enabled)) { rc = d_bridge->ops.video_on(d_bridge->dba_ctx, true, &video_cfg, 0); if (rc) diff --git a/drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.c b/drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.c index 7a90c7be4e5c..b1cd666f8be4 100644 --- a/drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.c +++ b/drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.c @@ -1608,14 +1608,15 @@ int dsi_ctrl_host_init(struct dsi_ctrl *dsi_ctrl, bool cont_splash_enabled) } mutex_lock(&dsi_ctrl->ctrl_lock); - rc = dsi_ctrl_check_state(dsi_ctrl, DSI_CTRL_OP_HOST_INIT, 0x1); - if (rc) { - pr_err("[DSI_%d] Controller state check failed, rc=%d\n", - dsi_ctrl->index, rc); - goto error; - } - if (!cont_splash_enabled) { + rc = dsi_ctrl_check_state( + dsi_ctrl, DSI_CTRL_OP_HOST_INIT, 0x1); + if (rc) { + pr_err("[DSI_%d] Ctrl state check failed, rc=%d\n", + dsi_ctrl->index, rc); + goto error; + } + dsi_ctrl->hw.ops.setup_lane_map(&dsi_ctrl->hw, &dsi_ctrl->host_config.lane_map); @@ -1970,12 +1971,6 @@ error: return rc; } -void dsi_ctrl_update_power_state(struct dsi_ctrl *dsi_ctrl, - enum dsi_power_state state) -{ - dsi_ctrl_update_state(dsi_ctrl, DSI_CTRL_OP_POWER_STATE_CHANGE, state); -} - /** * dsi_ctrl_set_tpg_state() - enable/disable test pattern on the controller * @dsi_ctrl: DSI controller handle. diff --git a/drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.h b/drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.h index c0ba532011b5..c343c41eb8e1 100644 --- a/drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.h +++ b/drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.h @@ -405,16 +405,6 @@ int dsi_ctrl_set_power_state(struct dsi_ctrl *dsi_ctrl, enum dsi_power_state state); /** - * dsi_ctrl_update_power_state() - update power state for dsi controller - * @dsi_ctrl: DSI controller handle. - * @state: Power state. - * - * Update power state for DSI controller. - * - */ -void dsi_ctrl_update_power_state(struct dsi_ctrl *dsi_ctrl, - enum dsi_power_state state); -/** * dsi_ctrl_set_cmd_engine_state() - set command engine state * @dsi_ctrl: DSI Controller handle. * @state: Engine state. diff --git a/drivers/gpu/drm/msm/dsi-staging/dsi_display.c b/drivers/gpu/drm/msm/dsi-staging/dsi_display.c index c468a6f5caa2..1e5681a77a6e 100644 --- a/drivers/gpu/drm/msm/dsi-staging/dsi_display.c +++ b/drivers/gpu/drm/msm/dsi-staging/dsi_display.c @@ -236,6 +236,12 @@ static int dsi_display_phy_power_on(struct dsi_display *display) int i; struct dsi_display_ctrl *ctrl; + /* early return for splash enabled case */ + if (display->cont_splash_enabled) { + pr_debug("skip phy power on\n"); + return rc; + } + /* Sequence does not matter for split dsi usecases */ for (i = 0; i < display->ctrl_count; i++) { @@ -292,6 +298,12 @@ static int dsi_display_ctrl_core_clk_on(struct dsi_display *display) int i; struct dsi_display_ctrl *m_ctrl, *ctrl; + /* early return for splash enabled case */ + if (display->cont_splash_enabled) { + pr_debug("skip core clk on calling\n"); + return rc; + } + /* * In case of split DSI usecases, the clock for master controller should * be enabled before the other controller. Master controller in the @@ -334,6 +346,12 @@ static int dsi_display_ctrl_link_clk_on(struct dsi_display *display) int i; struct dsi_display_ctrl *m_ctrl, *ctrl; + /* early return for splash enabled case */ + if (display->cont_splash_enabled) { + pr_debug("skip ctrl link clk on calling\n"); + return rc; + } + /* * In case of split DSI usecases, the clock for master controller should * be enabled before the other controller. Master controller in the @@ -2827,28 +2845,12 @@ int dsi_dsiplay_setup_splash_resource(struct dsi_display *display) if (!ctrl) return -EINVAL; - dsi_pwr_enable_regulator(&ctrl->ctrl->pwr_info.host_pwr, true); - dsi_pwr_enable_regulator(&ctrl->ctrl->pwr_info.digital, true); - dsi_pwr_enable_regulator(&ctrl->phy->pwr_info.phy_pwr, true); - - ret = dsi_clk_enable_core_clks(&ctrl->ctrl->clk_info.core_clks, - true); - if (ret) { - SDE_ERROR("failed to set core clk for dsi, ret = %d\n", - ret); - return -EINVAL; - } - - ret = dsi_clk_enable_link_clks(&ctrl->ctrl->clk_info.link_clks, - true); + ret = dsi_ctrl_set_power_state(ctrl->ctrl, + DSI_CTRL_POWER_LINK_CLK_ON); if (ret) { - SDE_ERROR("failed to set link clk for dsi, ret = %d\n", - ret); - return -EINVAL; + SDE_ERROR("calling dsi_ctrl_set_power_state failed\n"); + return ret; } - - dsi_ctrl_update_power_state(ctrl->ctrl, - DSI_CTRL_POWER_LINK_CLK_ON); } return ret; |
