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

Takashi Iwai tiwai at suse.de
Mon Jul 2 19:51:28 CEST 2012


At Mon, 2 Jul 2012 18:53:29 +0200,
Daniel Vetter wrote:
> 
> On Mon, Jul 02, 2012 at 06:14:54PM +0200, Takashi Iwai wrote:
> > 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>
> 
> As part of a larger rework effort for the modeset stuff I've stumbled over
> this, too - I see detiled garbage on some mode switches.
> 
> http://cgit.freedesktop.org/~danvet/drm/commit/?h=modeset-rework&id=bf8528171b2c2bb94aeca8316e26e017e42643d3
> 
> So my question: why so complicated, and what's the justification for the
> funky hdisplay/vdisplay condiditons?

It's just for avoiding the possible regressions by this change.
We definitely need a fix for HD+ panels ASAP, while other panels work
in the current code.  Introducing the extra disable code affecting all
laptops sounds too risky for 3.5 kernel, as we can't cover all cases.
But for HD+ panels, we did fairly good coverage, as there are still
little models.

If you find this limitation nonsense and we are brave enough, let's
do it without complication.


thanks,

Takashi

> 
> Cheers, Daniel
> 
> > ---
> >  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
> > 
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
> -- 
> Daniel Vetter
> Mail: daniel at ffwll.ch
> Mobile: +41 (0)79 365 57 48
> 



More information about the Intel-gfx mailing list