From 6171ea831e948ee16bde462f4fd6f276a4e9ecb0 Mon Sep 17 00:00:00 2001 From: "Rafael J. Wysocki" Date: Tue, 22 Jan 2013 12:54:38 +0100 Subject: [PATCH] --- yaml --- r: 350931 b: refs/heads/master c: a2367807b8d2c0aca5afb92fead2537dcd3d10b0 h: refs/heads/master i: 350929: e87ef51f87e9affbdb474c687f2f13a4bca90d23 350927: 06f81bc0ea36c14a54470716ed9f3b36bf9c79f8 v: v3 --- [refs] | 2 +- trunk/drivers/acpi/device_pm.c | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index b69779383a1e..c8706d7ff944 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d79beb39922e41083e8bbbb3de084a6ca958e25f +refs/heads/master: a2367807b8d2c0aca5afb92fead2537dcd3d10b0 diff --git a/trunk/drivers/acpi/device_pm.c b/trunk/drivers/acpi/device_pm.c index 43116cdbabf9..c87853f583d8 100644 --- a/trunk/drivers/acpi/device_pm.c +++ b/trunk/drivers/acpi/device_pm.c @@ -330,13 +330,23 @@ int acpi_bus_init_power(struct acpi_device *device) if (result) return result; - if (device->power.flags.power_resources) + if (state < ACPI_STATE_D3_COLD && device->power.flags.power_resources) { result = acpi_power_on_resources(device, state); + if (result) + return result; - if (!result) - device->power.state = state; + if (device->power.states[state].flags.explicit_set) { + char method[5] = { '_', 'P', 'S', '0' + state, '\0' }; + acpi_status status; - return result; + status = acpi_evaluate_object(device->handle, method, + NULL, NULL); + if (ACPI_FAILURE(status)) + return -ENODEV; + } + } + device->power.state = state; + return 0; } int acpi_bus_update_power(acpi_handle handle, int *state_p)