[PATCH] drm/i915: Disable LVDS while modesetting for HD+ panels

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Some SNB/IVY Laptops with 1600x900 HD+ panel (e.g. Dell Latitude E6420
and HP ProBook 65xx) are known to show the whole black/white garbage
or flickering screens while starting up or changing the mode.
This can be worked around by disabling LVDS off while changing the
mode.

Since this doesn't give any visible drawback on machines I've tested,
enable it generically for HD+ panels for SCH-split case.

Tested-by: Giacomo Comes <comes at naic.edu>
Cc: <stable at vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai at suse.de>
---
 drivers/gpu/drm/i915/intel_lvds.c |   25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 08eb04c..cf1c150 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -407,13 +407,26 @@ out:
 static void intel_lvds_prepare(struct drm_encoder *encoder)
 {
 	struct intel_lvds *intel_lvds = to_intel_lvds(encoder);
+	bool do_disable = false;
 
-	/*
-	 * Prior to Ironlake, we must disable the pipe if we want to adjust
-	 * the panel fitter. However at all other times we can just reset
-	 * the registers regardless.
-	 */
-	if (!HAS_PCH_SPLIT(encoder->dev) && intel_lvds->pfit_dirty)
+	if (HAS_PCH_SPLIT(encoder->dev)) {
+		/* Some HD+ panels require the pipe-off while mode changing;
+		 * otherwise you'll get B/W garbage or sustaining flickering
+		 * screen
+		 */
+		if (intel_lvds->fixed_mode->hdisplay >= 1600 &&
+		    intel_lvds->fixed_mode->vdisplay >= 900)
+			do_disable = true;
+	} else {
+		/*
+		 * Prior to Ironlake, we must disable the pipe if we want to
+		 * adjust the panel fitter. However at all other times we can
+		 * just reset the registers regardless.
+		 */
+		do_disable = intel_lvds->pfit_dirty;
+	}
+
+	if (do_disable)
 		intel_lvds_disable(intel_lvds);
 }
 
-- 
1.7.10.4



[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux