49 lines
1.9 KiB
Diff
49 lines
1.9 KiB
Diff
commit 0c99c5288eb9b1bbc9684b0ec0fd7efc578749b3
|
|
Author: Zhang Rui <rui.zhang@intel.com>
|
|
Date: Thu Dec 17 16:02:08 2009 +0800
|
|
|
|
ACPI: Disable explicit power state retrieval on fans
|
|
|
|
If the ACPI power state can be got both directly and indirectly,
|
|
we prefer to get it indirectly.
|
|
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=531916 describes a
|
|
system with a _PSC method for the fan that always returns "on".
|
|
There's no benefit in us always requesting the state of the fan
|
|
when performing transitions - we want to do everything we can
|
|
to ensure that the fan turns on when it should do, not risk
|
|
hardware damage by believing the hardware when it tells us the
|
|
fan is already on. Given that the Leading Other OS(tm) works fine
|
|
on this machine, it seems likely that it behaves in much this way.
|
|
|
|
inspired-by: Matthew Garrett <mjg@redhat.com>
|
|
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
|
|
Signed-off-by: Len Brown <len.brown@intel.com>
|
|
|
|
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
|
|
index cf761b9..ae9226d 100644
|
|
--- a/drivers/acpi/bus.c
|
|
+++ b/drivers/acpi/bus.c
|
|
@@ -190,16 +190,16 @@ int acpi_bus_get_power(acpi_handle handle, int *state)
|
|
* Get the device's power state either directly (via _PSC) or
|
|
* indirectly (via power resources).
|
|
*/
|
|
- if (device->power.flags.explicit_get) {
|
|
+ if (device->power.flags.power_resources) {
|
|
+ result = acpi_power_get_inferred_state(device);
|
|
+ if (result)
|
|
+ return result;
|
|
+ } else if (device->power.flags.explicit_get) {
|
|
status = acpi_evaluate_integer(device->handle, "_PSC",
|
|
NULL, &psc);
|
|
if (ACPI_FAILURE(status))
|
|
return -ENODEV;
|
|
device->power.state = (int)psc;
|
|
- } else if (device->power.flags.power_resources) {
|
|
- result = acpi_power_get_inferred_state(device);
|
|
- if (result)
|
|
- return result;
|
|
}
|
|
|
|
*state = device->power.state;
|