From f43afc90338bb2d8bc3ebd99b6485877a93b5e02 Mon Sep 17 00:00:00 2001 From: "Rafael J. Wysocki" Date: Tue, 22 Jan 2013 12:56:04 +0100 Subject: [PATCH] --- yaml --- r: 350933 b: refs/heads/master c: e78adb7595a9d585c60a7497345cb6eaeaaacefb h: refs/heads/master i: 350931: 6171ea831e948ee16bde462f4fd6f276a4e9ecb0 v: v3 --- [refs] | 2 +- trunk/drivers/acpi/device_pm.c | 46 +++++++++++++--------------------- 2 files changed, 18 insertions(+), 30 deletions(-) diff --git a/[refs] b/[refs] index 442b3b2ecdca..647668f1eef5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9c0f45e388fb9f9003ea22f98b84ffbab65ba554 +refs/heads/master: e78adb7595a9d585c60a7497345cb6eaeaaacefb diff --git a/trunk/drivers/acpi/device_pm.c b/trunk/drivers/acpi/device_pm.c index d7f3908c2e88..2ce07cee0434 100644 --- a/trunk/drivers/acpi/device_pm.c +++ b/trunk/drivers/acpi/device_pm.c @@ -242,50 +242,38 @@ int acpi_device_set_power(struct acpi_device *device, int state) cut_power = true; } + if (state < device->power.state && state != ACPI_STATE_D0 + && device->power.state >= ACPI_STATE_D3_HOT) { + printk(KERN_WARNING PREFIX + "Cannot transition to non-D0 state from D3\n"); + return -ENODEV; + } + /* * Transition Power * ---------------- - * On transitions to a high-powered state we first apply power (via - * power resources) then evalute _PSx. Conversly for transitions to - * a lower-powered state. + * In accordance with the ACPI specification first apply power (via + * power resources) and then evalute _PSx. */ - 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) - goto end; - } - result = acpi_dev_pm_explicit_set(device, state); + if (device->power.flags.power_resources) { + result = acpi_power_transition(device, state); if (result) goto end; - } else { - result = acpi_dev_pm_explicit_set(device, state); - if (result) - goto end; - - if (device->power.flags.power_resources) { - result = acpi_power_transition(device, state); - if (result) - goto end; - } } + result = acpi_dev_pm_explicit_set(device, state); + if (result) + goto end; if (cut_power) result = acpi_power_transition(device, ACPI_STATE_D3_COLD); - end: - if (result) + end: + if (result) { printk(KERN_WARNING PREFIX "Device [%s] failed to transition to %s\n", device->pnp.bus_id, acpi_power_state_string(state)); - else { + } else { device->power.state = state; ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] transitioned to %s\n",