• Hans de Goede's avatar
    ACPI: Fix selecting wrong ACPI fwnode for the iGPU on some Dell laptops · f64e4275
    Hans de Goede authored
    The Dell Latitude E6430 both with and without the optional NVidia dGPU
    has a bug in its ACPI tables which is causing Linux to assign the wrong
    ACPI fwnode / companion to the pci_device for the i915 iGPU.
    
    Specifically under the PCI root bridge there are these 2 ACPI Device()s :
    
     Scope (_SB.PCI0)
     {
         Device (GFX0)
         {
             Name (_ADR, 0x00020000)  // _ADR: Address
         }
    
         ...
    
         Device (VID)
         {
             Name (_ADR, 0x00020000)  // _ADR: Address
             ...
    
             Method (_DOS, 1, NotSerialized)  // _DOS: Disable Output Switching
             {
                 VDP8 = Arg0
                 VDP1 (One, VDP8)
             }
    
             Method (_DOD, 0, NotSerialized)  // _DOD: Display Output Devices
             {
                 ...
             }
             ...
         }
     }
    
    The non-functional GFX0 ACPI device is a problem, because this gets
    returned as ACPI companion-device by acpi_find_child_device() for the iGPU.
    
    This is a long standing problem and the i915 driver does use the ACPI
    companion for some things, but works fine without it.
    
    However since commit 63f534b8 ("ACPI: PCI: Rework acpi_get_pci_dev()")
    acpi_get_pci_dev() relies on the physical-node pointer in the acpi_device
    and that is set on the wrong acpi_device because of the wrong
    acpi_find_child_device() return. This breaks the ACPI video code,
    leading to non working backlight control in some cases.
    
    Add a type.backlight flag, mark ACPI video bus devices with this and make
    find_child_checks() return a higher score for children with this flag set,
    so that it picks the right companion-device.
    
    Fixes: 63f534b8 ("ACPI: PCI: Rework acpi_get_pci_dev()")
    Co-developed-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    Cc: 6.1+ <stable@vger.kernel.org> # 6.1+
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    f64e4275
acpi_bus.h 22.6 KB