diff options
Diffstat (limited to 'drivers/acpi/bus.c')
-rw-r--r-- | drivers/acpi/bus.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index ccae305ee55d..91bdeb3b081e 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c | |||
@@ -223,7 +223,19 @@ int acpi_bus_set_power(acpi_handle handle, int state) | |||
223 | /* | 223 | /* |
224 | * Get device's current power state | 224 | * Get device's current power state |
225 | */ | 225 | */ |
226 | acpi_bus_get_power(device->handle, &device->power.state); | 226 | if (!acpi_power_nocheck) { |
227 | /* | ||
228 | * Maybe the incorrect power state is returned on the bogus | ||
229 | * bios, which is different with the real power state. | ||
230 | * For example: the bios returns D0 state and the real power | ||
231 | * state is D3. OS expects to set the device to D0 state. In | ||
232 | * such case if OS uses the power state returned by the BIOS, | ||
233 | * the device can't be transisted to the correct power state. | ||
234 | * So if the acpi_power_nocheck is set, it is unnecessary to | ||
235 | * get the power state by calling acpi_bus_get_power. | ||
236 | */ | ||
237 | acpi_bus_get_power(device->handle, &device->power.state); | ||
238 | } | ||
227 | if ((state == device->power.state) && !device->flags.force_power_state) { | 239 | if ((state == device->power.state) && !device->flags.force_power_state) { |
228 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n", | 240 | ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n", |
229 | state)); | 241 | state)); |