diff --git a/drivers/video/fbdev/msm/dsi_status_6g.c b/drivers/video/fbdev/msm/dsi_status_6g.c index d2c894e86cf3..32807ccba58c 100644 --- a/drivers/video/fbdev/msm/dsi_status_6g.c +++ b/drivers/video/fbdev/msm/dsi_status_6g.c @@ -118,6 +118,14 @@ void mdss_check_dsi_ctrl_status(struct work_struct *work, uint32_t interval) return; } + if (!pdata->panel_info.esd_rdy) { + pr_warn("%s: unblank not complete, reschedule check status\n", + __func__); + schedule_delayed_work(&pstatus_data->check_status, + msecs_to_jiffies(interval)); + return; + } + mdp5_data = mfd_to_mdp5_data(pstatus_data->mfd); ctl = mfd_to_ctl(pstatus_data->mfd); @@ -126,13 +134,6 @@ void mdss_check_dsi_ctrl_status(struct work_struct *work, uint32_t interval) return; } - if (ctl->power_state == MDSS_PANEL_POWER_OFF) { - schedule_delayed_work(&pstatus_data->check_status, - msecs_to_jiffies(interval)); - pr_debug("%s: ctl not powered on\n", __func__); - return; - } - if (ctrl_pdata->status_mode == ESD_TE) { mdss_check_te_status(ctrl_pdata, pstatus_data, interval); return; diff --git a/drivers/video/fbdev/msm/mdss_dsi.c b/drivers/video/fbdev/msm/mdss_dsi.c index 805a3b6c6239..b73f5cced70b 100644 --- a/drivers/video/fbdev/msm/mdss_dsi.c +++ b/drivers/video/fbdev/msm/mdss_dsi.c @@ -1345,6 +1345,7 @@ static int mdss_dsi_event_handler(struct mdss_panel_data *pdata, ctrl_pdata->ctrl_state |= CTRL_STATE_MDP_ACTIVE; if (ctrl_pdata->on_cmds.link_state == DSI_HS_MODE) rc = mdss_dsi_unblank(pdata); + pdata->panel_info.esd_rdy = true; break; case MDSS_EVENT_BLANK: power_state = (int) (unsigned long) arg; @@ -1353,6 +1354,7 @@ static int mdss_dsi_event_handler(struct mdss_panel_data *pdata, break; case MDSS_EVENT_PANEL_OFF: power_state = (int) (unsigned long) arg; + pdata->panel_info.esd_rdy = false; ctrl_pdata->ctrl_state &= ~CTRL_STATE_MDP_ACTIVE; if (ctrl_pdata->off_cmds.link_state == DSI_LP_MODE) rc = mdss_dsi_blank(pdata, power_state); diff --git a/drivers/video/fbdev/msm/mdss_dsi_panel.c b/drivers/video/fbdev/msm/mdss_dsi_panel.c index aefd0177081a..526da6b38f0d 100644 --- a/drivers/video/fbdev/msm/mdss_dsi_panel.c +++ b/drivers/video/fbdev/msm/mdss_dsi_panel.c @@ -1789,6 +1789,7 @@ int mdss_dsi_panel_init(struct device_node *node, pinfo->dynamic_switch_pending = false; pinfo->is_lpm_mode = false; + pinfo->esd_rdy = false; ctrl_pdata->on = mdss_dsi_panel_on; ctrl_pdata->off = mdss_dsi_panel_off; diff --git a/drivers/video/fbdev/msm/mdss_panel.h b/drivers/video/fbdev/msm/mdss_panel.h index 746cdd3334f3..5a8cbded814f 100644 --- a/drivers/video/fbdev/msm/mdss_panel.h +++ b/drivers/video/fbdev/msm/mdss_panel.h @@ -407,6 +407,7 @@ struct mdss_panel_info { u32 max_fps; u32 cont_splash_enabled; + bool esd_rdy; u32 partial_update_enabled; u32 dcs_cmd_by_left; u32 partial_update_roi_merge;