mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
ACPI, PCI: Move acpi_dev_run_wake() to ACPI core
acpi_dev_run_wake() is a generic function which can be used by other subsystem too. Rename it to acpi_pm_device_run_wake, to be consistent with acpi_pm_device_sleep_wake. Then move it to ACPI core. Acked-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: Lin Ming <ming.m.lin@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
0090def6c3
commit
b24e509885
3 changed files with 43 additions and 37 deletions
|
@ -17,6 +17,7 @@
|
||||||
#include <linux/suspend.h>
|
#include <linux/suspend.h>
|
||||||
#include <linux/reboot.h>
|
#include <linux/reboot.h>
|
||||||
#include <linux/acpi.h>
|
#include <linux/acpi.h>
|
||||||
|
#include <linux/pm_runtime.h>
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
|
@ -729,6 +730,40 @@ int acpi_pm_device_sleep_state(struct device *dev, int *d_min_p)
|
||||||
#endif /* CONFIG_PM */
|
#endif /* CONFIG_PM */
|
||||||
|
|
||||||
#ifdef CONFIG_PM_SLEEP
|
#ifdef CONFIG_PM_SLEEP
|
||||||
|
/**
|
||||||
|
* acpi_pm_device_run_wake - Enable/disable wake-up for given device.
|
||||||
|
* @phys_dev: Device to enable/disable the platform to wake-up the system for.
|
||||||
|
* @enable: Whether enable or disable the wake-up functionality.
|
||||||
|
*
|
||||||
|
* Find the ACPI device object corresponding to @pci_dev and try to
|
||||||
|
* enable/disable the GPE associated with it.
|
||||||
|
*/
|
||||||
|
int acpi_pm_device_run_wake(struct device *phys_dev, bool enable)
|
||||||
|
{
|
||||||
|
struct acpi_device *dev;
|
||||||
|
acpi_handle handle;
|
||||||
|
|
||||||
|
if (!device_run_wake(phys_dev))
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
handle = DEVICE_ACPI_HANDLE(phys_dev);
|
||||||
|
if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &dev))) {
|
||||||
|
dev_dbg(phys_dev, "ACPI handle has no context in %s!\n",
|
||||||
|
__func__);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enable) {
|
||||||
|
acpi_enable_wakeup_device_power(dev, ACPI_STATE_S0);
|
||||||
|
acpi_enable_gpe(dev->wakeup.gpe_device, dev->wakeup.gpe_number);
|
||||||
|
} else {
|
||||||
|
acpi_disable_gpe(dev->wakeup.gpe_device, dev->wakeup.gpe_number);
|
||||||
|
acpi_disable_wakeup_device_power(dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* acpi_pm_device_sleep_wake - enable or disable the system wake-up
|
* acpi_pm_device_sleep_wake - enable or disable the system wake-up
|
||||||
* capability of given device
|
* capability of given device
|
||||||
|
|
|
@ -277,40 +277,6 @@ static int acpi_pci_sleep_wake(struct pci_dev *dev, bool enable)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* acpi_dev_run_wake - Enable/disable wake-up for given device.
|
|
||||||
* @phys_dev: Device to enable/disable the platform to wake-up the system for.
|
|
||||||
* @enable: Whether enable or disable the wake-up functionality.
|
|
||||||
*
|
|
||||||
* Find the ACPI device object corresponding to @pci_dev and try to
|
|
||||||
* enable/disable the GPE associated with it.
|
|
||||||
*/
|
|
||||||
static int acpi_dev_run_wake(struct device *phys_dev, bool enable)
|
|
||||||
{
|
|
||||||
struct acpi_device *dev;
|
|
||||||
acpi_handle handle;
|
|
||||||
|
|
||||||
if (!device_run_wake(phys_dev))
|
|
||||||
return -EINVAL;
|
|
||||||
|
|
||||||
handle = DEVICE_ACPI_HANDLE(phys_dev);
|
|
||||||
if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &dev))) {
|
|
||||||
dev_dbg(phys_dev, "ACPI handle has no context in %s!\n",
|
|
||||||
__func__);
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (enable) {
|
|
||||||
acpi_enable_wakeup_device_power(dev, ACPI_STATE_S0);
|
|
||||||
acpi_enable_gpe(dev->wakeup.gpe_device, dev->wakeup.gpe_number);
|
|
||||||
} else {
|
|
||||||
acpi_disable_gpe(dev->wakeup.gpe_device, dev->wakeup.gpe_number);
|
|
||||||
acpi_disable_wakeup_device_power(dev);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void acpi_pci_propagate_run_wake(struct pci_bus *bus, bool enable)
|
static void acpi_pci_propagate_run_wake(struct pci_bus *bus, bool enable)
|
||||||
{
|
{
|
||||||
while (bus->parent) {
|
while (bus->parent) {
|
||||||
|
@ -318,14 +284,14 @@ static void acpi_pci_propagate_run_wake(struct pci_bus *bus, bool enable)
|
||||||
|
|
||||||
if (bridge->pme_interrupt)
|
if (bridge->pme_interrupt)
|
||||||
return;
|
return;
|
||||||
if (!acpi_dev_run_wake(&bridge->dev, enable))
|
if (!acpi_pm_device_run_wake(&bridge->dev, enable))
|
||||||
return;
|
return;
|
||||||
bus = bus->parent;
|
bus = bus->parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We have reached the root bus. */
|
/* We have reached the root bus. */
|
||||||
if (bus->bridge)
|
if (bus->bridge)
|
||||||
acpi_dev_run_wake(bus->bridge, enable);
|
acpi_pm_device_run_wake(bus->bridge, enable);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int acpi_pci_run_wake(struct pci_dev *dev, bool enable)
|
static int acpi_pci_run_wake(struct pci_dev *dev, bool enable)
|
||||||
|
@ -333,7 +299,7 @@ static int acpi_pci_run_wake(struct pci_dev *dev, bool enable)
|
||||||
if (dev->pme_interrupt)
|
if (dev->pme_interrupt)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!acpi_dev_run_wake(&dev->dev, enable))
|
if (!acpi_pm_device_run_wake(&dev->dev, enable))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
acpi_pci_propagate_run_wake(dev->bus, enable);
|
acpi_pci_propagate_run_wake(dev->bus, enable);
|
||||||
|
|
|
@ -394,8 +394,13 @@ static inline int acpi_pm_device_sleep_state(struct device *d, int *p)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_PM_SLEEP
|
#ifdef CONFIG_PM_SLEEP
|
||||||
|
int acpi_pm_device_run_wake(struct device *, bool);
|
||||||
int acpi_pm_device_sleep_wake(struct device *, bool);
|
int acpi_pm_device_sleep_wake(struct device *, bool);
|
||||||
#else
|
#else
|
||||||
|
static inline int acpi_pm_device_run_wake(struct device *dev, bool enable)
|
||||||
|
{
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
static inline int acpi_pm_device_sleep_wake(struct device *dev, bool enable)
|
static inline int acpi_pm_device_sleep_wake(struct device *dev, bool enable)
|
||||||
{
|
{
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
Loading…
Reference in a new issue