[Intel-gfx] [PATCH] drm/i915: Ignore LVDS presence in VBT flag if the LVDS is enabled by BIOS
Damien Lespiau
damien.lespiau at intel.com
Mon Jun 22 06:17:16 PDT 2015
On Fri, Jun 19, 2015 at 01:57:43PM +0100, Chris Wilson wrote:
> On older gen, pre-Ironlake, parts there is no hardwired pin to report
> the presence of an LVDS panel. Instead, we have to rely on the VBT to
> declare whether the machine has a panel or not. Though notoriously
> unreliable, so far we have erred on the side of false-positives and have
> required a list of machines which end up falsely reporting a panel as
> present. However, we now have reports of false-negatives, machines with
> an LVDS that are being ignored due to the VBT not declaring the panel.
> This patch ignores the VBT setting if the BIOS has already enabled the
> LVDS panel (and on Ironlake+ we also have the hardware presence pin).
>
> It fixes the Samsung NP680Z5E-X01FR in the bug report, but is likely to
> result in more false-positives, and since we rely on the BIOS to enable
> the panel, there are likely different circumstances where the BIOS will
> not enable that panel (and so we may see the same machine with and
> without a panel all on the whim of the BIOS).
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=90979
> Reported-and-tested-by: lysxia at gmail.com
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Reviewed-by: Damien Lespiau <damien.lespiau at intel.com>
> ---
> drivers/gpu/drm/i915/intel_lvds.c | 16 ++++++++++------
> 1 file changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
> index 161ab26f81fb..bf1702a6e33d 100644
> --- a/drivers/gpu/drm/i915/intel_lvds.c
> +++ b/drivers/gpu/drm/i915/intel_lvds.c
> @@ -942,12 +942,6 @@ void intel_lvds_init(struct drm_device *dev)
> if (dmi_check_system(intel_no_lvds))
> return;
>
> - pin = GMBUS_PIN_PANEL;
> - if (!lvds_is_present_in_vbt(dev, &pin)) {
> - DRM_DEBUG_KMS("LVDS is not present in VBT\n");
> - return;
> - }
> -
> if (HAS_PCH_SPLIT(dev)) {
> if ((I915_READ(PCH_LVDS) & LVDS_DETECTED) == 0)
> return;
> @@ -957,6 +951,16 @@ void intel_lvds_init(struct drm_device *dev)
> }
> }
>
> + pin = GMBUS_PIN_PANEL;
> + if (!lvds_is_present_in_vbt(dev, &pin)) {
> + u32 reg = HAS_PCH_SPLIT(dev) ? PCH_LVDS : LVDS;
> + if ((I915_READ(reg) & LVDS_PORT_EN) == 0) {
> + DRM_DEBUG_KMS("LVDS is not present in VBT\n");
> + return;
> + }
> + DRM_DEBUG_KMS("LVDS is not present in VBT, but enabled anyway\n");
> + }
> +
> lvds_encoder = kzalloc(sizeof(*lvds_encoder), GFP_KERNEL);
> if (!lvds_encoder)
> return;
> --
> 2.1.4
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
More information about the Intel-gfx
mailing list