26 Jul, 2013

1 commit

  • We attempted to address a regression introduced by commit a57f7f9
    (ACPICA: Add Windows8/Server2012 string for _OSI method.) after which
    ACPI video backlight support doesn't work on a number of systems,
    because the relevant AML methods in the ACPI tables in their BIOSes
    become useless after the BIOS has been told that the OS is compatible
    with Windows 8. That problem is tracked by the bug entry at:

    https://bugzilla.kernel.org/show_bug.cgi?id=51231

    Commit 8c5bd7a (ACPI / video / i915: No ACPI backlight if firmware
    expects Windows 8) introduced for this purpose essentially prevented
    the ACPI backlight support from being used if the BIOS had been told
    that the OS was compatible with Windows 8 and the i915 driver was
    loaded, in which case the backlight would always be handled by i915.
    Unfortunately, however, that turned out to cause problems with
    backlight to appear on multiple systems with symptoms indicating that
    i915 was unable to control the backlight on those systems as
    expected.

    For this reason, revert commit 8c5bd7a, but leave the function
    acpi_video_backlight_quirks() introduced by it, because another
    commit on top of it uses that function.

    References: https://lkml.org/lkml/2013/7/21/119
    References: https://lkml.org/lkml/2013/7/22/261
    References: https://lkml.org/lkml/2013/7/23/429
    References: https://lkml.org/lkml/2013/7/23/459
    References: https://lkml.org/lkml/2013/7/23/81
    References: https://lkml.org/lkml/2013/7/24/27
    Reported-and-tested-by: James Hogan
    Reported-and-tested-by: Kamal Mostafa
    Reported-and-tested-by: Jörg Otte
    Reported-and-tested-by: Steven Newbury
    Reported-by: Martin Steigerwald
    Reported-by: Kalle Valo
    Tested-by: Joerg Platte
    Signed-off-by: Rafael J. Wysocki

    Rafael J. Wysocki
     

18 Jul, 2013

1 commit

  • 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=51231
    Tested-by: Aaron Lu
    Tested-by: Igor Gnatenko
    Tested-by: Yves-Alexis Perez
    Signed-off-by: Rafael J. Wysocki
    Reviewed-by: Aaron Lu
    Acked-by: Matthew Garrett

    Rafael J. Wysocki
     

14 Jul, 2011

1 commit

  • opregion-based platforms will send ACPI video event 0x80 for a range of
    notification types for legacy compatibility. This is interpreted as a
    display switch event, which may not be appropriate in the circumstances.
    When we receive such an event we should make sure that the platform is
    genuinely requesting a display switch before passing that event through
    to userspace.

    Signed-off-by: Matthew Garrett
    Tested-by: Adam Jackson
    Signed-off-by: Keith Packard

    Matthew Garrett
     

11 Dec, 2010

1 commit

  • In file included from drivers/gpu/drm/i915/intel_opregion.c:30:
    include/acpi/video.h:22: warning: ‘struct acpi_device’ declared inside parameter list
    ...
    include/acpi/video.h:24: error: ‘ENODEV’ undeclared (first use in this function)

    Signed-off-by: Chris Wilson
    Signed-off-by: Len Brown

    Chris Wilson
     

20 Apr, 2010

1 commit

  • The ACPI spec includes a provision for hardware to provide EDID via the
    ACPI video extension. In the KMS world it's necessary for a way to obtain
    this from within the kernel. Add a function that either returns the EDID
    for the provided ACPI display ID or the first display of the provided type.
    Also add support for ensuring that devices with legacy IDs are supported.

    Signed-off-by: Matthew Garrett
    Acked-by: Zhang Rui
    Signed-off-by: Len Brown

    Matthew Garrett
     

24 Jun, 2009

1 commit

  • Sometimes both acpi video and i915 driver are compiled as modules.
    And there exists the strict dependency between the two drivers.
    The acpi video bus will be unloaded in course of unloading the i915 driver.
    If we unload the acpi video driver, then the kernel oops will be triggered.

    Add the reference count to avoid unloading the ACPI video bus twice.
    The reference count should be checked before unregistering the acpi video bus.
    If the reference count is already zero, it won't unregister it again.
    And after the acpi video bus is already unregistered, the reference count
    will be set to zero.

    http://bugzilla.kernel.org/show_bug.cgi?id=13396

    Signed-off-by: Zhao Yakui
    Acked-by: Zhang Rui
    Signed-off-by: Len Brown

    Zhao Yakui
     

18 Apr, 2009

1 commit


28 Mar, 2009

1 commit

  • Intel graphics hardware that implements the ACPI IGD OpRegion spec
    requires that the list of display devices be populated before any ACPI
    video methods are called. Detect when this is the case and defer
    registration until the opregion code calls it. Fixes crashes on HP
    laptops.

    http://bugzilla.kernel.org/show_bug.cgi?id=11259

    Signed-off-by: Matthew Garrett
    Acked-by: Eric Anholt
    Signed-off-by: Len Brown

    Matthew Garrett