[Intel-gfx] of the LVDS panel registers, and it just inherits the values. If the

Bryan Freed bfreed at chromium.org
Tue Dec 14 20:25:10 CET 2010


Sorry, bad patch email.

Working on it...

bryan.

On Tue, Dec 14, 2010 at 11:23 AM, <bfreed at chromium.org> wrote:

> intel_display.c: ensures the sync polarity to the panel is correct
> and issues a message if the driver changes it.
>
> If these are not correct then although the panel looks ok, output from an
> HDMI
> encoder (eg, Chrontel CH7036) will be incorrect.
>
> Signed-off-by: Mark Hayter <mdhayter at chromium.org>
>
> Index: drivers/gpu/drm/i915/i915_reg.h
> diff --git a/drivers/gpu/drm/i915/i915_reg.h
> b/drivers/gpu/drm/i915/i915_reg.h
> index
> b463a0baa924ff1dee74ca8473b458927cfa0901..e325eaea4bfb289c76a093c5cada026eab6c3983
> 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -1056,6 +1056,10 @@
>  #define   LVDS_PIPEB_SELECT            (1 << 30)
>  /* LVDS dithering flag on 965/g4x platform */
>  #define   LVDS_ENABLE_DITHER           (1 << 25)
> +/* LVDS sync polarity flags. Set to invert (i.e. negative) */
> +#define   LVDS_VSYNC_POLARITY          (1 << 21)
> +#define   LVDS_HSYNC_POLARITY          (1 << 20)
> +
>  /* Enable border for unscaled (or aspect-scaled) display */
>  #define   LVDS_BORDER_ENABLE           (1 << 15)
>  /*
> Index: drivers/gpu/drm/i915/intel_display.c
> diff --git a/drivers/gpu/drm/i915/intel_display.c
> b/drivers/gpu/drm/i915/intel_display.c
> index
> 787e6da01984a2c2296295359250cd436e0cf5fe..9893e53e394cc9140167b9884c05efd62c4f139c
> 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -3334,6 +3334,29 @@ static int intel_crtc_mode_set(struct drm_crtc
> *crtc,
>                                        lvds &= ~LVDS_ENABLE_DITHER;
>                        }
>                }
> +               /* Only tested on pineview, should work on IS_9XX */
> +               if (IS_PINEVIEW(dev)) {
> +                       /* Set sync polarity for case when vbios did not */
> +                       char curhs, curvs, newhs, newvs;
> +                       curhs = (lvds & LVDS_HSYNC_POLARITY) ? '-' : '+';
> +                       curvs = (lvds & LVDS_VSYNC_POLARITY) ? '-' : '+';
> +                       newhs = (adjusted_mode->flags &
> DRM_MODE_FLAG_NHSYNC) ?
> +                               '-' : '+';
> +                       newvs = (adjusted_mode->flags &
> DRM_MODE_FLAG_NVSYNC) ?
> +                               '-' : '+';
> +                       if ((newhs != curhs) || (newvs != curvs)) {
> +                               DRM_INFO("Change lvds panel from %chsync "
> +                                        "%cvsync to %chsync %cvsync\n",
> +                                        curhs, curvs, newhs, newvs);
> +                               /* Clear to both + polarity */
> +                               lvds &= ~(LVDS_HSYNC_POLARITY |
> +                                         LVDS_VSYNC_POLARITY);
> +                               if (newhs == '-')
> +                                       lvds |= LVDS_HSYNC_POLARITY;
> +                               if (newvs == '-')
> +                                       lvds |= LVDS_VSYNC_POLARITY;
> +                       }
> +               }
>                I915_WRITE(lvds_reg, lvds);
>                I915_READ(lvds_reg);
>        }
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/intel-gfx/attachments/20101214/1805de8c/attachment.html>


More information about the Intel-gfx mailing list