4b9ee772ea
It is reported that on certain platforms there are power resources that are not associated with any devices physically present in the platform. Those power resources are expected to be turned off by the OS in accordance with the ACPI specification (section 7.3 of ACPI 6.4) which currently is not done by Linux and that may lead to obscure issues. For instance, leaving those power resources in the "on" state may prevent the platform from reaching the lowest power state in suspend-to-idle which leads to excessive power draw. For this reason, turn all of the unused ACPI power resources off at the end of the initial namespace scan for devices in analogy with resume from suspend-to-RAM. Link: https://uefi.org/specs/ACPI/6.4/07_Power_and_Performance_Mgmt/device-power-management-objects.html Reported-by: David Box <david.e.box@linux.intel.com> Tested-by: Wendy Wang <wendy.wang@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
33 lines
916 B
C
33 lines
916 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
|
|
extern void acpi_enable_wakeup_devices(u8 sleep_state);
|
|
extern void acpi_disable_wakeup_devices(u8 sleep_state);
|
|
extern bool acpi_check_wakeup_handlers(void);
|
|
|
|
extern struct list_head acpi_wakeup_device_list;
|
|
extern struct mutex acpi_device_lock;
|
|
|
|
extern void acpi_resume_power_resources(void);
|
|
|
|
static inline acpi_status acpi_set_waking_vector(u32 wakeup_address)
|
|
{
|
|
return acpi_set_firmware_waking_vector(
|
|
(acpi_physical_address)wakeup_address, 0);
|
|
}
|
|
|
|
extern int acpi_s2idle_begin(void);
|
|
extern int acpi_s2idle_prepare(void);
|
|
extern int acpi_s2idle_prepare_late(void);
|
|
extern bool acpi_s2idle_wake(void);
|
|
extern void acpi_s2idle_restore_early(void);
|
|
extern void acpi_s2idle_restore(void);
|
|
extern void acpi_s2idle_end(void);
|
|
|
|
extern void acpi_s2idle_setup(void);
|
|
|
|
#ifdef CONFIG_ACPI_SLEEP
|
|
extern bool acpi_sleep_default_s3;
|
|
#else
|
|
#define acpi_sleep_default_s3 (1)
|
|
#endif
|