summaryrefslogtreecommitdiff
path: root/drivers/acpi/scan.c
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-02-01 23:43:02 +0100
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-02-01 23:43:02 +0100
commitb3785492268f9f3cdaa9722facb84b266dcf8bf6 (patch)
treee7af7871921307b90b520c526127d0e654ac6e96 /drivers/acpi/scan.c
parentdde3bb4159dfd872a755922b6a22e005e78389b6 (diff)
ACPI / PM: Do not power manage devices in unknown initial states
In general, for ACPI device power management to work, the initial power states of devices must be known (otherwise, we wouldn't be able to keep track of power resources, for example). Hence, if it is impossible to determine the initial ACPI power states of some devices, they can't be regarded as power-manageable using ACPI. For this reason, modify acpi_bus_get_power_flags() to clear the power_manageable flag if acpi_bus_init_power() fails and add some extra fallback code to acpi_bus_init_power() to cover broken BIOSes that provide _PS0/_PS3 without _PSC for some devices. Verified to work on my HP nx6325 that has this problem. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Tested-by: Peter Wu <lekensteyn@gmail.com>
Diffstat (limited to 'drivers/acpi/scan.c')
-rw-r--r--drivers/acpi/scan.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 9801837876b7..f75f25c2e455 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -1180,7 +1180,10 @@ static void acpi_bus_get_power_flags(struct acpi_device *device)
device->power.flags.power_resources)
device->power.states[ACPI_STATE_D3_COLD].flags.os_accessible = 1;
- acpi_bus_init_power(device);
+ if (acpi_bus_init_power(device)) {
+ acpi_free_power_resources_lists(device);
+ device->flags.power_manageable = 0;
+ }
}
static void acpi_bus_get_flags(struct acpi_device *device)