PCI ACPI: Rework PCI handling of wake-up
* Introduce function acpi_pm_device_sleep_wake() for enabling and disabling the system wake-up capability of devices that are power manageable by ACPI. * Introduce function acpi_bus_can_wakeup() allowing other (dependent) subsystems to check if ACPI is able to enable the system wake-up capability of given device. * Introduce callback .sleep_wake() in struct pci_platform_pm_ops and for the ACPI PCI 'driver' make it use acpi_pm_device_sleep_wake(). * Introduce callback .can_wakeup() in struct pci_platform_pm_ops and for the ACPI 'driver' make it use acpi_bus_can_wakeup(). * Move the PME# handlig code out of pci_enable_wake() and split it into two functions, pci_pme_capable() and pci_pme_active(), allowing the caller to check if given device is capable of generating PME# from given power state and to enable/disable the device's PME# functionality, respectively. * Modify pci_enable_wake() to use the new ACPI callbacks and the new PME#-related functions. * Drop the generic .platform_enable_wakeup() callback that is not used any more. * Introduce device_set_wakeup_capable() that will set the power.can_wakeup flag of given device. * Rework PCI device PM initialization so that, if given device is capable of generating wake-up events, either natively through the PME# mechanism, or with the help of the platform, its power.can_wakeup flag is set and its power.should_wakeup flag is unset as appropriate. * Make ACPI set the power.can_wakeup flag for devices found to be wake-up capable by it. * Make the ACPI wake-up code enable/disable GPEs for devices that have the wakeup.flags.prepared flag set (which means that their wake-up power has been enabled). Signed-off-by:Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by:
Jesse Barnes <jbarnes@virtuousgeek.org>
Showing
- drivers/acpi/bus.c 11 additions, 0 deletionsdrivers/acpi/bus.c
- drivers/acpi/glue.c 2 additions, 0 deletionsdrivers/acpi/glue.c
- drivers/acpi/sleep/main.c 25 additions, 0 deletionsdrivers/acpi/sleep/main.c
- drivers/acpi/sleep/wakeup.c 7 additions, 4 deletionsdrivers/acpi/sleep/wakeup.c
- drivers/base/power/sysfs.c 0 additions, 3 deletionsdrivers/base/power/sysfs.c
- drivers/pci/pci-acpi.c 20 additions, 0 deletionsdrivers/pci/pci-acpi.c
- drivers/pci/pci.c 124 additions, 45 deletionsdrivers/pci/pci.c
- drivers/pci/pci.h 8 additions, 0 deletionsdrivers/pci/pci.h
- drivers/pci/probe.c 3 additions, 44 deletionsdrivers/pci/probe.c
- include/acpi/acpi_bus.h 2 additions, 0 deletionsinclude/acpi/acpi_bus.h
- include/linux/pm_wakeup.h 6 additions, 20 deletionsinclude/linux/pm_wakeup.h
Loading
Please register or sign in to comment