summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatenda Chipeperekwa <tatendac@codeaurora.org>2015-11-06 14:53:45 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:48:06 -0700
commit224a53ac447a1ff595ba20ce5532e512154e2d2b (patch)
treef6d3536099f9d1996020b6bf1725fa49581871f8
parenta1aedeeb038a8d09c5a2a50b83454fad79f17b29 (diff)
msm: mdss: hdmi: fix handling of panel suspend event
Unset the HPD state on receiving a suspend event, and ignore any HPD interrupts that are signalled while panel is in a suspended state. Change-Id: I21955079522e0688cd4cee17dae32f5e6d8496ab Signed-off-by: Tatenda Chipeperekwa <tatendac@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss_hdmi_tx.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/video/fbdev/msm/mdss_hdmi_tx.c b/drivers/video/fbdev/msm/mdss_hdmi_tx.c
index 36dcaec5ba2d..7d8925fc6267 100644
--- a/drivers/video/fbdev/msm/mdss_hdmi_tx.c
+++ b/drivers/video/fbdev/msm/mdss_hdmi_tx.c
@@ -3840,7 +3840,9 @@ static irqreturn_t hdmi_tx_isr(int irq, void *data)
* waits for hpd interrupt to finish. Suspend thread will
* eventually reset the HPD module.
*/
- if (!hdmi_ctrl->panel_suspend)
+ if (hdmi_ctrl->panel_suspend)
+ hdmi_ctrl->hpd_state = 0;
+ else
queue_work(hdmi_ctrl->workq, &hdmi_ctrl->hpd_int_work);
}
@@ -4139,13 +4141,14 @@ static int hdmi_tx_panel_event_handler(struct mdss_panel_data *panel_data,
case MDSS_EVENT_SUSPEND:
mutex_lock(&hdmi_ctrl->power_mutex);
if (!hdmi_ctrl->panel_power_on &&
- !hdmi_ctrl->hpd_off_pending) {
+ !hdmi_ctrl->hpd_off_pending && !hdmi_ctrl->hpd_state) {
mutex_unlock(&hdmi_ctrl->power_mutex);
if (hdmi_ctrl->hpd_feature_on)
hdmi_tx_hpd_off(hdmi_ctrl);
hdmi_ctrl->panel_suspend = false;
} else {
+ hdmi_ctrl->hpd_state = 0;
mutex_unlock(&hdmi_ctrl->power_mutex);
hdmi_ctrl->hpd_off_pending = true;
hdmi_ctrl->panel_suspend = true;