• Rafael J. Wysocki's avatar
    ACPI / PM: Infer parent power state from child if unknown, v2 · 8f7412a7
    Rafael J. Wysocki authored
    It turns out that there are ACPI BIOSes defining device objects with
    _PSx and without either _PSC or _PRx.  For devices corresponding to
    those ACPI objetcs __acpi_bus_get_power() returns ACPI_STATE_UNKNOWN
    and their initial power states are regarded as unknown as a result.
    If such a device is a parent of another power-manageable device, the
    child cannot be put into a low-power state through ACPI, because
    __acpi_bus_set_power() refuses to change power states of devices
    whose parents' power states are unknown.
    
    To work around this problem, observe that the ACPI power state of
    a device cannot be higher-power (lower-number) than the power state
    of its parent.  Thus, if the device's _PSC method or the
    configuration of its power resources indicates that the device is
    in D0, the device's parent has to be in D0 as well.  Consequently,
    if the parent's power state is unknown when we've just learned that
    its child's power state is D0, we can safely set the parent's
    power.state field to ACPI_STATE_D0.
    Tested-by: default avatarAaron Lu <aaron.lu@intel.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    8f7412a7
bus.c 26.3 KB