ACPI / PM: Fix device power state value after transitions to D3cold
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 22 Jan 2013 11:56:35 +0000 (12:56 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 22 Jan 2013 11:56:35 +0000 (12:56 +0100)
When a transition to the D3cold power state is requested,
acpi_device_set_power() first carries out a transition to D3hot and
then turns off the device's power resources.  However, it fails to
update the device's power.state field appropriately and D3hot is
stored in it as a result.

Fix this, but make sure that the device's power state will be
D3hot if its power resources cannot be turned off in the final
step.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/device_pm.c

index 61ae99b09f1c20952f08f8381840cd176367242c..4cbc9505b365c354f230f0fe844bf259d8eb4484 100644 (file)
@@ -264,8 +264,11 @@ int acpi_device_set_power(struct acpi_device *device, int state)
        if (result)
                goto end;
 
-       if (cut_power)
-               result = acpi_power_transition(device, ACPI_STATE_D3_COLD);
+       if (cut_power) {
+               device->power.state = state;
+               state = ACPI_STATE_D3_COLD;
+               result = acpi_power_transition(device, state);
+       }
 
  end:
        if (result) {