diff options
Diffstat (limited to 'drivers/acpi/bus.c')
-rw-r--r-- | drivers/acpi/bus.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index a52126e46307..37132dc2da03 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/device.h> | 32 | #include <linux/device.h> |
33 | #include <linux/proc_fs.h> | 33 | #include <linux/proc_fs.h> |
34 | #include <linux/acpi.h> | 34 | #include <linux/acpi.h> |
35 | #include <linux/slab.h> | ||
35 | #ifdef CONFIG_X86 | 36 | #ifdef CONFIG_X86 |
36 | #include <asm/mpspec.h> | 37 | #include <asm/mpspec.h> |
37 | #endif | 38 | #endif |
@@ -190,16 +191,16 @@ int acpi_bus_get_power(acpi_handle handle, int *state) | |||
190 | * Get the device's power state either directly (via _PSC) or | 191 | * Get the device's power state either directly (via _PSC) or |
191 | * indirectly (via power resources). | 192 | * indirectly (via power resources). |
192 | */ | 193 | */ |
193 | if (device->power.flags.explicit_get) { | 194 | if (device->power.flags.power_resources) { |
195 | result = acpi_power_get_inferred_state(device); | ||
196 | if (result) | ||
197 | return result; | ||
198 | } else if (device->power.flags.explicit_get) { | ||
194 | status = acpi_evaluate_integer(device->handle, "_PSC", | 199 | status = acpi_evaluate_integer(device->handle, "_PSC", |
195 | NULL, &psc); | 200 | NULL, &psc); |
196 | if (ACPI_FAILURE(status)) | 201 | if (ACPI_FAILURE(status)) |
197 | return -ENODEV; | 202 | return -ENODEV; |
198 | device->power.state = (int)psc; | 203 | device->power.state = (int)psc; |
199 | } else if (device->power.flags.power_resources) { | ||
200 | result = acpi_power_get_inferred_state(device); | ||
201 | if (result) | ||
202 | return result; | ||
203 | } | 204 | } |
204 | 205 | ||
205 | *state = device->power.state; | 206 | *state = device->power.state; |