• Rafael J. Wysocki's avatar
    ACPI / video / i915: No ACPI backlight if firmware expects Windows 8 · 8c5bd7ad
    Rafael J. Wysocki authored
    According to Matthew Garrett, "Windows 8 leaves backlight control up
    to individual graphics drivers rather than making ACPI calls itself.
    There's plenty of evidence to suggest that the Intel driver for
    Windows [8] doesn't use the ACPI interface, including the fact that
    it's broken on a bunch of machines when the OS claims to support
    Windows 8.  The simplest thing to do appears to be to disable the
    ACPI backlight interface on these systems".
    
    There's a problem with that approach, however, because simply
    avoiding to register the ACPI backlight interface if the firmware
    calls _OSI for Windows 8 may not work in the following situations:
     (1) The ACPI backlight interface actually works on the given system
         and the i915 driver is not loaded (e.g. another graphics driver
         is used).
     (2) The ACPI backlight interface doesn't work on the given system,
         but there is a vendor platform driver that will register its
         own, equally broken, backlight interface if not prevented from
         doing so by the ACPI subsystem.
    Therefore we need to allow the ACPI backlight interface to be
    registered until the i915 driver is loaded which then will unregister
    it if the firmware has called _OSI for Windows 8 (or will register
    the ACPI video driver without backlight support if not already
    present).
    
    For this reason, introduce an alternative function for registering
    ACPI video, acpi_video_register_with_quirks(), that will check
    whether or not the ACPI video driver has already been registered
    and whether or not the backlight Windows 8 quirk has to be applied.
    If the quirk has to be applied, it will block the ACPI backlight
    support and either unregister the backlight interface if the ACPI
    video driver has already been registered, or register the ACPI
    video driver without the backlight interface otherwise.  Make
    the i915 driver use acpi_video_register_with_quirks() instead of
    acpi_video_register() in i915_driver_load().
    
    This change is based on earlier patches from Matthew Garrett,
    Chun-Yi Lee and Seth Forshee and includes a fix from Aaron Lu's.
    
    References: https://bugzilla.kernel.org/show_bug.cgi?id=51231Tested-by: default avatarAaron Lu <aaron.lu@intel.com>
    Tested-by: default avatarIgor Gnatenko <i.gnatenko.brain@gmail.com>
    Tested-by: default avatarYves-Alexis Perez <corsac@debian.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Reviewed-by: default avatarAaron Lu <aaron.lu@intel.com>
    Acked-by: default avatarMatthew Garrett <matthew.garrett@nebula.com>
    8c5bd7ad
video_detect.c 9.76 KB