[BISECTED, -next] drm/i915: blurred HDMI output

Jesse Barnes jbarnes at virtuousgeek.org
Mon Oct 18 13:15:23 PDT 2010


On Mon, 18 Oct 2010 21:57:05 +0200
Arnd Bergmann <arnd at arndb.de> wrote:

> On Monday 18 October 2010 21:28:01 Jesse Barnes wrote:
> > 
> > On Mon, 18 Oct 2010 21:13:59 +0200
> > Arnd Bergmann <arnd at arndb.de> wrote:
> > 
> > > On Monday 18 October 2010 20:56:48 Jesse Barnes wrote:
> > > > Hm, the LVDS code should take care of panel fitting in
> > > > the !HAS_PCH_SPLIT case.  Does this patch achieve the same thing as
> > > > yours?  Maybe we were leaving a stale PFIT value in place...
> > > 
> > > No, your patch doesn't have any effect for me.
> > 
> > Oh right, you were complaining about HMDI. :)
> > 
> > Yes we still need to shut off panel fitting elsewhere.  Do you see the
> > blurriness at boot or just after turning on HDMI while leaving the
> > laptop panel enabled?
> 
> It's a G45 desktop machine, not a laptop.
> 
> i915 is a module with kms enabled, the blur seems to show up on the
> text console the moment that the module gets loaded during boot.
> Before that, the console is in VGA text mode, which is always
> slightly blurred because the screen has a different native resolution.

Arg why would the BIOS set the panel fitting bit at all in this
config?  Any attached outputs (VGA, HDMI) will have their own scalers...

Obviously we need to clear it somewhere, but we should be able to avoid
clearing it on every mode set.  We should probably shut down all panel
related bits in intel_lvds.c if we fail to detect an LVDS output; that
should save a little power and avoid problems like this.

Maybe the below patch which does that will help?

-- 
Jesse Barnes, Intel Open Source Technology Center

diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds
index f1a6499..da31963 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -1024,6 +1024,9 @@ out:
 
 failed:
        DRM_DEBUG_KMS("No LVDS modes found, disabling.\n");
+       intel_lvds_set_power(intel_lvds, false);
+       I915_WRITE(PFIT_CONTROL, 0);
+       I915_WRITE(LVDS, 0);
        drm_connector_cleanup(connector);
        drm_encoder_cleanup(encoder);
        kfree(intel_lvds);


More information about the dri-devel mailing list