summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2018-06-08 18:42:15 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2018-06-08 18:42:14 -0700
commitcfefd5602587f4b6fc520fa1cafd7dbc4a1a3678 (patch)
tree0d84b3a3dd8b2d66ed80deaeaf46abd5db7f11de /drivers/gpu
parent45ac2680dd2a2ecf1a3abb6085ef7dcee26c65a9 (diff)
parentc523959445aa0b87868b42c102eb6202b7fa4379 (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.c7
-rw-r--r--drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.c21
-rw-r--r--drivers/gpu/drm/msm/dsi-staging/dsi_ctrl.h10
-rw-r--r--drivers/gpu/drm/msm/dsi-staging/dsi_display.c42
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;