From f283ba88e6bd3df3d9589da8c0cd4092c1b2b54a Mon Sep 17 00:00:00 2001 From: Jayant Shekhar Date: Fri, 9 Jan 2015 10:29:53 +0530 Subject: [PATCH] msm: mdss: Start ESD BTA status check after unblank done BTA status check currently is invoked as soon as ESD thread starts. In some cases, this BTA status check might fail as unblank is not yet performed and panel is not on. Hence delay BTA status check start till unblank is completed. Change-Id: Ic752866cc679438fb2ccffede660c29e9597d01e Signed-off-by: Jayant Shekhar --- drivers/video/fbdev/msm/dsi_status_6g.c | 15 ++++++++------- drivers/video/fbdev/msm/mdss_dsi.c | 2 ++ drivers/video/fbdev/msm/mdss_dsi_panel.c | 1 + drivers/video/fbdev/msm/mdss_panel.h | 1 + 4 files changed, 12 insertions(+), 7 deletions(-) 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;