Re: [PATCH] drm/i915: Ignore OpRegion panel type except on select machines

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

 



On 13 September 2016 at 10:22,  <ville.syrjala@xxxxxxxxxxxxxxx> wrote:
> From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
>
> Turns out
> commit a05628195a0d ("drm/i915: Get panel_type from OpRegion panel
> details") has regressed quite a few machines. So it looks like we
> can't use the panel type from OpRegion on all systems, and yet we
> absolutely must use it on some specific systems.
>
> Despite trying, I was unable to find any automagic way to determine
> if the OpRegion panel type is respectable or not. The only glimmer
> of hope I had was bit 8 in the SCIC response, but that turned out to
> not work either (it was always 0 on both types of systems).
>
> So, to fix the regressions without breaking the machine we know to need
> the OpRegion panel type, let's just add a quirk for this. Only specific
> machines known to require the OpRegion panel type will therefore use
> it. Everyone else will fall bck to the VBT panel type.
>
> The only known machine so far is a "Conrac GmbH IX45GM2". The PCI
> subsystem ID on this machine is just a generic 8086:2a42, so of no use.
> Instead we'll go with a DMI match.
>
> I suspect we can now also revert
> commit aeddda06c1a7 ("drm/i915: Ignore panel type from OpRegion on SKL")
> but let's leave that to a separate patch.
>
> v2: Do the DMI match in the opregion code directly, as dev_priv->quirks
>     gets populated too late
>
> Cc: Rob Kramer <rob@xxxxxxxxxxxxxxxxxx>
> Cc: Martin van Es <martin@xxxxxxxxxxx>
> Cc: Andrea Arcangeli <aarcange@xxxxxxxxxx>
> Cc: Dave Airlie <airlied@xxxxxxxx>
> Cc: Marco Krüger <krgsch@xxxxxxxxx>
> Cc: Sean Greenslade <sean@xxxxxxxxxxxxxxxxxx>
> Cc: Trudy Tective <bertslany@xxxxxxxxx>
> Cc: Robin Müller <rm1990@xxxxxx>
> Cc: Alexander Kobel <a-kobel@xxxxxxxxxx>
> Cc: Alexey Shumitsky <alexey.shumitsky@xxxxxxxxx>
> Cc: Emil Andersen Lauridsen <mine809@xxxxxxxxx>
> Cc: oceans112@xxxxxxxxx
> Cc: James Hogan <james@xxxxxxxxxxxxx>
> Cc: James Bottomley <James.Bottomley@xxxxxxxxxxxxxxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> References: https://lists.freedesktop.org/archives/intel-gfx/2016-August/105545.html
> References: https://lists.freedesktop.org/archives/dri-devel/2016-August/116888.html
> References: https://lists.freedesktop.org/archives/intel-gfx/2016-June/098826.html
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94825
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97060
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97443
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97363
> Fixes: a05628195a0d ("drm/i915: Get panel_type from OpRegion panel details")
> Tested-by: Marco Krüger <krgsch@xxxxxxxxx>
> Tested-by: Alexey Shumitsky <alexey.shumitsky@xxxxxxxxx>
> Tested-by: Sean Greenslade <sean@xxxxxxxxxxxxxxxxxx>
> Tested-by: Emil Andersen Lauridsen <mine809@xxxxxxxxx>
> Tested-by: Robin Müller <rm1990@xxxxxx>
> Tested-by: oceans112@xxxxxxxxx
> Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>

That works for me too on XPS13. Flickering screen brightness gone, and
using acpi backlight rather than intel backlight, like before
a05628195a0d ("drm/i915: Get panel_type from OpRegion panel details").

Tested-by: James Hogan <james@xxxxxxxxxxxxx>

Thanks!
James

> ---
>  drivers/gpu/drm/i915/intel_opregion.c | 27 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_opregion.c b/drivers/gpu/drm/i915/intel_opregion.c
> index adca262d591a..7acbbbf97833 100644
> --- a/drivers/gpu/drm/i915/intel_opregion.c
> +++ b/drivers/gpu/drm/i915/intel_opregion.c
> @@ -1047,6 +1047,23 @@ err_out:
>         return err;
>  }
>
> +static int intel_use_opregion_panel_type_callback(const struct dmi_system_id *id)
> +{
> +       DRM_INFO("Using panel type from OpRegion on %s\n", id->ident);
> +       return 1;
> +}
> +
> +static const struct dmi_system_id intel_use_opregion_panel_type[] = {
> +       {
> +               .callback = intel_use_opregion_panel_type_callback,
> +               .ident = "Conrac GmbH IX45GM2",
> +               .matches = {DMI_MATCH(DMI_SYS_VENDOR, "Conrac GmbH"),
> +                           DMI_MATCH(DMI_PRODUCT_NAME, "IX45GM2"),
> +               },
> +       },
> +       { }
> +};
> +
>  int
>  intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
>  {
> @@ -1073,6 +1090,16 @@ intel_opregion_get_panel_type(struct drm_i915_private *dev_priv)
>         }
>
>         /*
> +        * So far we know that some machined must use it, others must not use it.
> +        * There doesn't seem to be any way to determine which way to go, except
> +        * via a quirk list :(
> +        */
> +       if (!dmi_check_system(intel_use_opregion_panel_type)) {
> +               DRM_DEBUG_KMS("Ignoring OpRegion panel type (%d)\n", ret - 1);
> +               return -ENODEV;
> +       }
> +
> +       /*
>          * FIXME On Dell XPS 13 9350 the OpRegion panel type (0) gives us
>          * low vswing for eDP, whereas the VBT panel type (2) gives us normal
>          * vswing instead. Low vswing results in some display flickers, so
> --
> 2.7.4
>



-- 
James Hogan
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]