• Jeff Wu's avatar
    ACPI: add _STA evaluation at do_acpi_find_child() · c7d9ca90
    Jeff Wu authored
    Once do_acpi_find_child() has found the first matching handle, it
    makes the acpi_get_child() loop stop and return that handle.  On some
    platforms, though, there are multiple devices with the same value of
    "_ADR" in the same namespace scope, and if one of them is enabled,
    the others will be disabled.  For example:
    
     Address : 0x1FFFF ; path : SB_PCI0.SATA.DEV0
     Address : 0x1FFFF ; path : SB_PCI0.SATA.DEV1
     Address : 0x1FFFF ; path : SB_PCI0.SATA.DEV2
    
    If DEV0 and DEV1 are disabled and DEV2 is enabled, the handle of DEV2
    should be returned, but actually the function always returns the
    handle of DEV0.
    
    To address that issue, make do_acpi_find_child() evaluate _STA to
    check the device status.  If a matching device object exists, but is
    disabled, acpi_get_child() will continue to walk the namespace in the
    hope of finding an enabled one.  If one is found, its handle will be
    returned, but otherwise the function will return the handle of the
    disabled object found before (in case it is enabled going forward).
    
    [rjw: Changelog]
    Signed-off-by: default avatarJeff Wu <zlinuxkernel@gmail.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    c7d9ca90
glue.c 6.96 KB