diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2023-02-22 13:47:26 -0600 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2023-02-22 13:47:26 -0600 |
commit | 08a67024a0b4a18b2fad8d5b3670f02e9b24ebfb (patch) | |
tree | 06c47e0a9cc9ca433c2e6af778659219e28dd4ec /drivers/acpi/device_pm.c | |
parent | 7260675a52a67f3c44036306bf25f6947c294a02 (diff) | |
parent | 8133844a8f2434be9576850c6978179d7cca5c81 (diff) |
Merge branch 'pci/pm'
- Account for _S0W when deciding whether to put bridges in D3 to avoid
missing hotplug events (Rafael J. Wysocki)
* pci/pm:
PCI/ACPI: Account for _S0W of the target bridge in acpi_pci_bridge_d3()
Diffstat (limited to 'drivers/acpi/device_pm.c')
-rw-r--r-- | drivers/acpi/device_pm.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/acpi/device_pm.c b/drivers/acpi/device_pm.c index 97450f4003cc..f007116a8427 100644 --- a/drivers/acpi/device_pm.c +++ b/drivers/acpi/device_pm.c @@ -484,6 +484,25 @@ void acpi_dev_power_up_children_with_adr(struct acpi_device *adev) acpi_dev_for_each_child(adev, acpi_power_up_if_adr_present, NULL); } +/** + * acpi_dev_power_state_for_wake - Deepest power state for wakeup signaling + * @adev: ACPI companion of the target device. + * + * Evaluate _S0W for @adev and return the value produced by it or return + * ACPI_STATE_UNKNOWN on errors (including _S0W not present). + */ +u8 acpi_dev_power_state_for_wake(struct acpi_device *adev) +{ + unsigned long long state; + acpi_status status; + + status = acpi_evaluate_integer(adev->handle, "_S0W", NULL, &state); + if (ACPI_FAILURE(status)) + return ACPI_STATE_UNKNOWN; + + return state; +} + #ifdef CONFIG_PM static DEFINE_MUTEX(acpi_pm_notifier_lock); static DEFINE_MUTEX(acpi_pm_notifier_install_lock); |