diff options
author | Austin Hu <austin.hu@intel.com> | 2017-05-24 13:26:47 +0800 |
---|---|---|
committer | Daniel Cardenas <danielcar@google.com> | 2017-05-24 19:38:02 +0000 |
commit | 2bd16d39617971f7040350688882d581faa468be (patch) | |
tree | 2a78baa5d172073ad243652f71ee949c73f153b3 | |
parent | ef64073ac4bbf9951950a779c6d14c9b77236d2a (diff) | |
download | x86_64-2bd16d39617971f7040350688882d581faa468be.tar.gz |
Fixed the HDMI signal lost regression after mode setting.
Bug: 38477852
Change-Id: I692cf6f879ce7abbf7fd6c9e81b6aab6095da4ee
Signed-off-by: Austin Hu <austin.hu@intel.com>
3 files changed, 9 insertions, 1 deletions
diff --git a/drivers/staging/imgtec/intel/display/tng/drv/mrfld_display.c b/drivers/staging/imgtec/intel/display/tng/drv/mrfld_display.c index 7e7d5ba24b25..f690741bef7b 100644 --- a/drivers/staging/imgtec/intel/display/tng/drv/mrfld_display.c +++ b/drivers/staging/imgtec/intel/display/tng/drv/mrfld_display.c @@ -312,7 +312,8 @@ static void mrfld_crtc_dpms(struct drm_crtc *crtc, int mode) return; #endif - if (pipe == 1 && dev_priv->psb_hotplug_state) { + if ((!psb_intel_crtc->in_mode_setting) && (pipe == 1) && + dev_priv->psb_hotplug_state) { if (mode == DRM_MODE_DPMS_OFF) { flush_workqueue(dev_priv->power_wq); diff --git a/drivers/staging/imgtec/intel/display/tng/drv/psb_intel_display.c b/drivers/staging/imgtec/intel/display/tng/drv/psb_intel_display.c index 265e62db9dcb..41506c53a16c 100644 --- a/drivers/staging/imgtec/intel/display/tng/drv/psb_intel_display.c +++ b/drivers/staging/imgtec/intel/display/tng/drv/psb_intel_display.c @@ -183,13 +183,19 @@ int psb_intel_pipe_set_base(struct drm_crtc *crtc, static void psb_intel_crtc_prepare(struct drm_crtc *crtc) { struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; + struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); + + psb_intel_crtc->in_mode_setting = true; crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF); } static void psb_intel_crtc_commit(struct drm_crtc *crtc) { struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; + struct psb_intel_crtc *psb_intel_crtc = to_psb_intel_crtc(crtc); + crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON); + psb_intel_crtc->in_mode_setting = false; } void psb_intel_encoder_prepare(struct drm_encoder *encoder) diff --git a/drivers/staging/imgtec/intel/display/tng/drv/psb_intel_drv.h b/drivers/staging/imgtec/intel/display/tng/drv/psb_intel_drv.h index 173d2f64f238..b42416679a0f 100644 --- a/drivers/staging/imgtec/intel/display/tng/drv/psb_intel_drv.h +++ b/drivers/staging/imgtec/intel/display/tng/drv/psb_intel_drv.h @@ -238,6 +238,7 @@ struct psb_intel_crtc { /* Saved Crtc HW states */ struct psb_intel_crtc_state *crtc_state; #endif + bool in_mode_setting; }; #define to_psb_intel_crtc(x) \ |