ACPI / PM: Consolidate device wakeup settings code
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 23 Jun 2017 23:54:39 +0000 (01:54 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 27 Jun 2017 23:52:32 +0000 (01:52 +0200)
Currently, there are two separate ways of handling device wakeup
settings in the ACPI core, depending on whether this is runtime
wakeup or system wakeup (from sleep states).  However, after the
previous commit eliminating the run_wake ACPI device wakeup flag,
there is no difference between the two any more at the ACPI level,
so they can be combined.

For this reason, introduce acpi_pm_set_device_wakeup() to replace both
acpi_pm_device_run_wake() and acpi_pm_device_sleep_wake() and make it
check the ACPI device object's wakeup.valid flag to determine whether
or not the device can be set up to generate wakeup signals.

Also notice that zpodd_enable/disable_run_wake() only call
device_set_run_wake() because acpi_pm_device_run_wake() called
device_run_wake(), which is not done by acpi_pm_set_device_wakeup(),
so drop the now redundant device_set_run_wake() calls from there.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Acked-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/acpi/device_pm.c
drivers/ata/libata-zpodd.c
drivers/pci/pci-acpi.c
drivers/pnp/pnpacpi/core.c
include/acpi/acpi_bus.h

index ca02102137734e3b37ab879d268dc58a934d0e24..d2e985a4bac24dee2e8e4ceaf1eea31b9b64649a 100644 (file)
@@ -717,55 +717,32 @@ static int acpi_device_wakeup(struct acpi_device *adev, u32 target_state,
 }
 
 /**
- * acpi_pm_device_run_wake - Enable/disable remote wakeup for given device.
- * @dev: Device to enable/disable the platform to wake up.
+ * acpi_pm_set_device_wakeup - Enable/disable remote wakeup for given device.
+ * @dev: Device to enable/disable to generate wakeup events.
  * @enable: Whether to enable or disable the wakeup functionality.
  */
-int acpi_pm_device_run_wake(struct device *phys_dev, bool enable)
-{
-       struct acpi_device *adev;
-
-       if (!device_run_wake(phys_dev))
-               return -EINVAL;
-
-       adev = ACPI_COMPANION(phys_dev);
-       if (!adev) {
-               dev_dbg(phys_dev, "ACPI companion missing in %s!\n", __func__);
-               return -ENODEV;
-       }
-
-       return acpi_device_wakeup(adev, ACPI_STATE_S0, enable);
-}
-EXPORT_SYMBOL(acpi_pm_device_run_wake);
-
-#ifdef CONFIG_PM_SLEEP
-/**
- * acpi_pm_device_sleep_wake - Enable or disable device to wake up the system.
- * @dev: Device to enable/desible to wake up the system from sleep states.
- * @enable: Whether to enable or disable @dev to wake up the system.
- */
-int acpi_pm_device_sleep_wake(struct device *dev, bool enable)
+int acpi_pm_set_device_wakeup(struct device *dev, bool enable)
 {
        struct acpi_device *adev;
        int error;
 
-       if (!device_can_wakeup(dev))
-               return -EINVAL;
-
        adev = ACPI_COMPANION(dev);
        if (!adev) {
                dev_dbg(dev, "ACPI companion missing in %s!\n", __func__);
                return -ENODEV;
        }
 
+       if (!acpi_device_can_wakeup(adev))
+               return -EINVAL;
+
        error = acpi_device_wakeup(adev, acpi_target_system_state(), enable);
        if (!error)
-               dev_dbg(dev, "System wakeup %s by ACPI\n",
+               dev_dbg(dev, "Wakeup %s by ACPI\n",
                        enable ? "enabled" : "disabled");
 
        return error;
 }
-#endif /* CONFIG_PM_SLEEP */
+EXPORT_SYMBOL(acpi_pm_set_device_wakeup);
 
 /**
  * acpi_dev_pm_low_power - Put ACPI device into a low-power state.
index f3a65a3140d3c7e51bef6dce19f676de768abfdf..8a01d09ac4db7f7d0f4437bbcd5e83a07b9ff21d 100644 (file)
@@ -174,8 +174,7 @@ void zpodd_enable_run_wake(struct ata_device *dev)
        sdev_disable_disk_events(dev->sdev);
 
        zpodd->powered_off = true;
-       device_set_run_wake(&dev->tdev, true);
-       acpi_pm_device_run_wake(&dev->tdev, true);
+       acpi_pm_set_device_wakeup(&dev->tdev, true);
 }
 
 /* Disable runtime wake capability if it is enabled */
@@ -183,10 +182,8 @@ void zpodd_disable_run_wake(struct ata_device *dev)
 {
        struct zpodd *zpodd = dev->zpodd;
 
-       if (zpodd->powered_off) {
-               acpi_pm_device_run_wake(&dev->tdev, false);
-               device_set_run_wake(&dev->tdev, false);
-       }
+       if (zpodd->powered_off)
+               acpi_pm_set_device_wakeup(&dev->tdev, false);
 }
 
 /*
index f084046e1feb71ac06a36d382bace082b243612b..eb014b8ab01aecd39ee3b388a60a1496f3961417 100644 (file)
@@ -578,20 +578,20 @@ static bool acpi_pci_can_wakeup(struct pci_dev *dev)
 static void acpi_pci_propagate_wakeup_enable(struct pci_bus *bus, bool enable)
 {
        while (bus->parent) {
-               if (!acpi_pm_device_sleep_wake(&bus->self->dev, enable))
+               if (!acpi_pm_set_device_wakeup(&bus->self->dev, enable))
                        return;
                bus = bus->parent;
        }
 
        /* We have reached the root bus. */
        if (bus->bridge)
-               acpi_pm_device_sleep_wake(bus->bridge, enable);
+               acpi_pm_set_device_wakeup(bus->bridge, enable);
 }
 
 static int acpi_pci_sleep_wake(struct pci_dev *dev, bool enable)
 {
        if (acpi_pci_can_wakeup(dev))
-               return acpi_pm_device_sleep_wake(&dev->dev, enable);
+               return acpi_pm_set_device_wakeup(&dev->dev, enable);
 
        acpi_pci_propagate_wakeup_enable(dev->bus, enable);
        return 0;
@@ -604,14 +604,14 @@ static void acpi_pci_propagate_run_wake(struct pci_bus *bus, bool enable)
 
                if (bridge->pme_interrupt)
                        return;
-               if (!acpi_pm_device_run_wake(&bridge->dev, enable))
+               if (!acpi_pm_set_device_wakeup(&bridge->dev, enable))
                        return;
                bus = bus->parent;
        }
 
        /* We have reached the root bus. */
        if (bus->bridge)
-               acpi_pm_device_run_wake(bus->bridge, enable);
+               acpi_pm_set_device_wakeup(bus->bridge, enable);
 }
 
 static int acpi_pci_run_wake(struct pci_dev *dev, bool enable)
@@ -625,7 +625,7 @@ static int acpi_pci_run_wake(struct pci_dev *dev, bool enable)
        if (dev->pme_interrupt && !dev->runtime_d3cold)
                return 0;
 
-       if (!acpi_pm_device_run_wake(&dev->dev, enable))
+       if (!acpi_pm_set_device_wakeup(&dev->dev, enable))
                return 0;
 
        acpi_pci_propagate_run_wake(dev->bus, enable);
index 9113876487edd43037038357726208dd828e9a2a..3a4c1aa0201e14e53178a22bc8e63ad216784ad0 100644 (file)
@@ -149,8 +149,8 @@ static int pnpacpi_suspend(struct pnp_dev *dev, pm_message_t state)
        }
 
        if (device_can_wakeup(&dev->dev)) {
-               error = acpi_pm_device_sleep_wake(&dev->dev,
-                               device_may_wakeup(&dev->dev));
+               error = acpi_pm_set_device_wakeup(&dev->dev,
+                                             device_may_wakeup(&dev->dev));
                if (error)
                        return error;
        }
@@ -185,7 +185,7 @@ static int pnpacpi_resume(struct pnp_dev *dev)
        }
 
        if (device_may_wakeup(&dev->dev))
-               acpi_pm_device_sleep_wake(&dev->dev, false);
+               acpi_pm_set_device_wakeup(&dev->dev, false);
 
        if (acpi_device_power_manageable(acpi_dev))
                error = acpi_device_set_power(acpi_dev, ACPI_STATE_D0);
index 72e32bd1e333d3240fd773531fca35f9ddfc438c..6bf0f843f7d78a172fde9003f279676994ac9993 100644 (file)
@@ -603,7 +603,7 @@ acpi_status acpi_add_pm_notifier(struct acpi_device *adev, struct device *dev,
                        void (*func)(struct acpi_device_wakeup_context *context));
 acpi_status acpi_remove_pm_notifier(struct acpi_device *adev);
 int acpi_pm_device_sleep_state(struct device *, int *, int);
-int acpi_pm_device_run_wake(struct device *, bool);
+int acpi_pm_set_device_wakeup(struct device *dev, bool enable);
 #else
 static inline void acpi_pm_wakeup_event(struct device *dev)
 {
@@ -626,16 +626,7 @@ static inline int acpi_pm_device_sleep_state(struct device *d, int *p, int m)
        return (m >= ACPI_STATE_D0 && m <= ACPI_STATE_D3_COLD) ?
                m : ACPI_STATE_D0;
 }
-static inline int acpi_pm_device_run_wake(struct device *dev, bool enable)
-{
-       return -ENODEV;
-}
-#endif
-
-#ifdef CONFIG_PM_SLEEP
-int acpi_pm_device_sleep_wake(struct device *, bool);
-#else
-static inline int acpi_pm_device_sleep_wake(struct device *dev, bool enable)
+static inline int acpi_pm_set_device_wakeup(struct device *dev, bool enable)
 {
        return -ENODEV;
 }