Thinkpad T420 and single/dual channel lvds

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

 



Hi everyone,

Booting a Thinkpad T420 with the lid closed results and opening it subsequently results in an 
unusable picture on the panel (and no amount of resetting makes it usable): The even pixels show 
the nominal content of the framebuffer (with the right half missing) whlie the odd pixels show a 
red-/blueish flicker.

A little bit of investigation revealed that with the lid closed on boot, the panel ends up driven in 
lvds single channel mode, which the panel probably does not like. It appears that the i915 driver 
relies on the BIOS setting up the PCH_LVDS register for dual channel and will otherwise not ever 
consider switching.

While the following hack makes my display work, it is quite obviously not the right thing to do -- 
could you investigate if there is a "proper" way to determine whether the panel is supposed to be 
driven dual channel?

Best regards
Helge

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index f851db7..2e51dc3 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -364,8 +364,8 @@ static const intel_limit_t *intel_ironlake_limit(struct drm_crtc *crtc,
 	const intel_limit_t *limit;
 
 	if (intel_pipe_has_type(crtc, INTEL_OUTPUT_LVDS)) {
-		if ((I915_READ(PCH_LVDS) & LVDS_CLKB_POWER_MASK) ==
-		    LVDS_CLKB_POWER_UP) {
+		if (1 || ((I915_READ(PCH_LVDS) & LVDS_CLKB_POWER_MASK) ==
+		    LVDS_CLKB_POWER_UP)) {
 			/* LVDS dual channel */
 			if (refclk == 100000)
 				limit = &intel_limits_ironlake_dual_lvds_100m;


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