diff options
| author | Kuogee Hsieh <khsieh@codeaurora.org> | 2014-10-10 08:42:43 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:35:00 -0700 |
| commit | 92d9bcd42eb957c8e14ceeb7b09156146c2bef97 (patch) | |
| tree | 6057965db314de8d9895a9c51e1e444716eaf4df | |
| parent | f6da3384e39a9db6018ffc6aa407c37fca8a0527 (diff) | |
msm: mdss: add MDSS_EVENT_LINK READY
At split display case, DSI panel initialization dcs
commands need to be sent to panel when both dsi links
are in LP-11 state. Add MDSS_EVENT_LINK_READY to have
both dsi controller's phy/pll initialized which brings
link to LP-11 state first so that panel initialization
dcs commands be received by panel successfully to bring
panel to display_on state.
Change-Id: I4b33fafd2673be1f068819bee25fc1a335eb0fe8
Signed-off-by: Kuogee Hsieh <khsieh@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_dsi.c | 6 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c | 3 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_intf_video.c | 7 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_panel.h | 2 |
4 files changed, 14 insertions, 4 deletions
diff --git a/drivers/video/fbdev/msm/mdss_dsi.c b/drivers/video/fbdev/msm/mdss_dsi.c index 21acfe8dca25..9c041b074072 100644 --- a/drivers/video/fbdev/msm/mdss_dsi.c +++ b/drivers/video/fbdev/msm/mdss_dsi.c @@ -1193,15 +1193,17 @@ static int mdss_dsi_event_handler(struct mdss_panel_data *pdata, } ctrl_pdata = container_of(pdata, struct mdss_dsi_ctrl_pdata, panel_data); - pr_debug("%s+:event=%d\n", __func__, event); + pr_debug("%s+: ctrl=%d event=%d\n", __func__, ctrl_pdata->ndx, event); MDSS_XLOG(event, arg, ctrl_pdata->ndx, 0x3333); switch (event) { - case MDSS_EVENT_UNBLANK: + case MDSS_EVENT_LINK_READY: rc = mdss_dsi_on(pdata); mdss_dsi_op_mode_config(pdata->panel_info.mipi.mode, pdata); + break; + case MDSS_EVENT_UNBLANK: if (ctrl_pdata->on_cmds.link_state == DSI_LP_MODE) rc = mdss_dsi_unblank(pdata); break; diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c index 2761f485ae25..6c2359279004 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c +++ b/drivers/video/fbdev/msm/mdss_mdp_intf_cmd.c @@ -734,6 +734,9 @@ int mdss_mdp_cmd_kickoff(struct mdss_mdp_ctl *ctl, void *arg) } if (__mdss_mdp_cmd_panel_power_off(ctx)) { + rc = mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_LINK_READY, NULL); + WARN(rc, "intf %d link ready error (%d)\n", ctl->intf_num, rc); + rc = mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_UNBLANK, NULL); WARN(rc, "intf %d unblank error (%d)\n", ctl->intf_num, rc); diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_video.c b/drivers/video/fbdev/msm/mdss_mdp_intf_video.c index 6ec5ec495d2a..3fc9fdfd416b 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_intf_video.c +++ b/drivers/video/fbdev/msm/mdss_mdp_intf_video.c @@ -926,15 +926,18 @@ static int mdss_mdp_video_display(struct mdss_mdp_ctl *ctl, void *arg) MDSS_XLOG(ctl->num, ctl->underrun_cnt); if (!ctx->timegen_en) { - rc = mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_UNBLANK, NULL); + rc = mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_LINK_READY, NULL); if (rc) { - pr_warn("intf #%d unblank error (%d)\n", + pr_warn("intf #%d link ready error (%d)\n", ctl->intf_num, rc); video_vsync_irq_disable(ctl); ctx->wait_pending = 0; return rc; } + rc = mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_UNBLANK, NULL); + WARN(rc, "intf %d unblank error (%d)\n", ctl->intf_num, rc); + pr_debug("enabling timing gen for intf=%d\n", ctl->intf_num); if (pdata->panel_info.cont_splash_enabled && diff --git a/drivers/video/fbdev/msm/mdss_panel.h b/drivers/video/fbdev/msm/mdss_panel.h index 1c9da0cc7829..39b53308d582 100644 --- a/drivers/video/fbdev/msm/mdss_panel.h +++ b/drivers/video/fbdev/msm/mdss_panel.h @@ -137,6 +137,7 @@ struct mdss_intf_recovery { * enum mdss_intf_events - Different events generated by MDP core * * @MDSS_EVENT_RESET: MDP control path is being (re)initialized. + * @MDSS_EVENT_LINK_READY Interface data path inited to ready state. * @MDSS_EVENT_UNBLANK: Sent before first frame update from MDP is * sent to panel. * @MDSS_EVENT_PANEL_ON: After first frame update from MDP. @@ -182,6 +183,7 @@ struct mdss_intf_recovery { */ enum mdss_intf_events { MDSS_EVENT_RESET = 1, + MDSS_EVENT_LINK_READY, MDSS_EVENT_UNBLANK, MDSS_EVENT_PANEL_ON, MDSS_EVENT_BLANK, |
