• Rafael J. Wysocki's avatar
    ACPI / PM: Take SMART_SUSPEND driver flag into account · 05087360
    Rafael J. Wysocki authored
    Make the ACPI PM domain take DPM_FLAG_SMART_SUSPEND into account in
    its system suspend callbacks.
    
    [Note that the pm_runtime_suspended() check in acpi_dev_needs_resume()
    is an optimization, because if is not passed, all of the subsequent
    checks may be skipped and some of them are much more overhead in
    general.]
    
    Also use the observation that if the device is in runtime suspend
    at the beginning of the "late" phase of a system-wide suspend-like
    transition, its state cannot change going forward (runtime PM is
    disabled for it at that time) until the transition is over and the
    subsequent system-wide PM callbacks should be skipped for it (as
    they generally assume the device to not be suspended), so add
    checks for that in acpi_subsys_suspend_late/noirq() and
    acpi_subsys_freeze_late/noirq().
    
    Moreover, if acpi_subsys_resume_noirq() is called during the
    subsequent system-wide resume transition and if the device was left
    in runtime suspend previously, its runtime PM status needs to be
    changed to "active" as it is going to be put into the full-power
    state going forward, so add a check for that too in there.
    
    In turn, if acpi_subsys_thaw_noirq() runs after the device has been
    left in runtime suspend, the subsequent "thaw" callbacks need
    to be skipped for it (as they may not work correctly with a
    suspended device), so set the power.direct_complete flag for the
    device then to make the PM core skip those callbacks.
    
    On top of the above, make the analogous changes in the acpi_lpss
    driver that uses the ACPI PM domain callbacks.
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    05087360
device_pm.c 34.5 KB