ACPI / PM: Add check preventing transitioning to non-D0 state from D3.
authorLv Zheng <lv.zheng@intel.com>
Fri, 16 Nov 2012 01:46:28 +0000 (02:46 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 16 Nov 2012 01:46:28 +0000 (02:46 +0100)
No power transitioning from D3 state up to a non-D0 state is allowed
so make acpi_device_set_power() fail and complain if such a transition
is attempted.

Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/bus.c

index 07a20ee3e690b12d40855dc1c20dfaa5260bba85..1f0d457ecbcf851a1805916f01ea931672146420 100644 (file)
@@ -306,6 +306,12 @@ int acpi_device_set_power(struct acpi_device *device, int state)
         * a lower-powered state.
         */
        if (state < device->power.state) {
+               if (device->power.state >= ACPI_STATE_D3_HOT &&
+                   state != ACPI_STATE_D0) {
+                       printk(KERN_WARNING PREFIX
+                             "Cannot transition to non-D0 state from D3\n");
+                       return -ENODEV;
+               }
                if (device->power.flags.power_resources) {
                        result = acpi_power_transition(device, state);
                        if (result)