summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAustin Hu <austin.hu@intel.com>2017-05-24 13:26:47 +0800
committerDaniel Cardenas <danielcar@google.com>2017-05-24 19:38:02 +0000
commit2bd16d39617971f7040350688882d581faa468be (patch)
tree2a78baa5d172073ad243652f71ee949c73f153b3
parentef64073ac4bbf9951950a779c6d14c9b77236d2a (diff)
downloadx86_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>
-rw-r--r--drivers/staging/imgtec/intel/display/tng/drv/mrfld_display.c3
-rw-r--r--drivers/staging/imgtec/intel/display/tng/drv/psb_intel_display.c6
-rw-r--r--drivers/staging/imgtec/intel/display/tng/drv/psb_intel_drv.h1
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) \