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@xxxxxxxxx> --- drivers/acpi/bus.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c index 9628652..b564e6d 100644 --- a/drivers/acpi/bus.c +++ b/drivers/acpi/bus.c @@ -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; -- 1.7.12.21.g871e293 -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html