]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
acpi: bus: handle power manageable but no _PSC/_PRx case
authorAaron Lu <aaron.lu@intel.com>
Thu, 6 Sep 2012 20:58:27 +0000 (22:58 +0200)
committerRafael J. Wysocki <rjw@sisk.pl>
Thu, 6 Sep 2012 20:58:27 +0000 (22:58 +0200)
Currently, when we are trying to get the power state of an acpi device,
we will do the following:
If device is not power manageable, init its power state as its parent or
if it does not have a parent, init as D0;
If device is power manageable, evaluate _PSC and then refine with
acpi_power_get_inferred_state.

But there exist some devices with _PSx defined, but no _PSC or _PRx.
It is power manageable, but the above method to get power state does
not cover this case and its power state will be UNKNOWN(255).

So change the check of power manageable to whether _PSC and _PRx
defined.

Signed-off-by: Aaron Lu <aaron.lu@intel.com>
Cc: stable@vger.kernel.org
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
drivers/acpi/bus.c

index 9628652e080c590fb3f6e01dedc655584c12737b..b564e6db2f1a9d043aa8866b168a498d27623594 100644 (file)
@@ -207,7 +207,8 @@ static int __acpi_bus_get_power(struct acpi_device *device, int *state)
        if (!device || !state)
                return -EINVAL;
 
-       if (!device->flags.power_manageable) {
+       if (!device->power.flags.explicit_get &&
+                       !device->power.flags.power_resources) {
                /* TBD: Non-recursive algorithm for walking up hierarchy. */
                *state = device->parent ?
                        device->parent->power.state : ACPI_STATE_D0;