diff options
Diffstat (limited to 'drivers/acpi/scan.c')
-rw-r--r-- | drivers/acpi/scan.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c index 16914cc30882..dc4d8960684a 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c | |||
@@ -1001,7 +1001,7 @@ static void acpi_free_power_resources_lists(struct acpi_device *device) | |||
1001 | if (device->wakeup.flags.valid) | 1001 | if (device->wakeup.flags.valid) |
1002 | acpi_power_resources_list_free(&device->wakeup.resources); | 1002 | acpi_power_resources_list_free(&device->wakeup.resources); |
1003 | 1003 | ||
1004 | if (!device->flags.power_manageable) | 1004 | if (!device->power.flags.power_resources) |
1005 | return; | 1005 | return; |
1006 | 1006 | ||
1007 | for (i = ACPI_STATE_D0; i <= ACPI_STATE_D3_HOT; i++) { | 1007 | for (i = ACPI_STATE_D0; i <= ACPI_STATE_D3_HOT; i++) { |
@@ -1744,10 +1744,8 @@ static void acpi_bus_get_power_flags(struct acpi_device *device) | |||
1744 | device->power.flags.power_resources) | 1744 | device->power.flags.power_resources) |
1745 | device->power.states[ACPI_STATE_D3_COLD].flags.os_accessible = 1; | 1745 | device->power.states[ACPI_STATE_D3_COLD].flags.os_accessible = 1; |
1746 | 1746 | ||
1747 | if (acpi_bus_init_power(device)) { | 1747 | if (acpi_bus_init_power(device)) |
1748 | acpi_free_power_resources_lists(device); | ||
1749 | device->flags.power_manageable = 0; | 1748 | device->flags.power_manageable = 0; |
1750 | } | ||
1751 | } | 1749 | } |
1752 | 1750 | ||
1753 | static void acpi_bus_get_flags(struct acpi_device *device) | 1751 | static void acpi_bus_get_flags(struct acpi_device *device) |
@@ -2371,13 +2369,18 @@ static void acpi_bus_attach(struct acpi_device *device) | |||
2371 | /* Skip devices that are not present. */ | 2369 | /* Skip devices that are not present. */ |
2372 | if (!acpi_device_is_present(device)) { | 2370 | if (!acpi_device_is_present(device)) { |
2373 | device->flags.visited = false; | 2371 | device->flags.visited = false; |
2372 | device->flags.power_manageable = 0; | ||
2374 | return; | 2373 | return; |
2375 | } | 2374 | } |
2376 | if (device->handler) | 2375 | if (device->handler) |
2377 | goto ok; | 2376 | goto ok; |
2378 | 2377 | ||
2379 | if (!device->flags.initialized) { | 2378 | if (!device->flags.initialized) { |
2380 | acpi_bus_update_power(device, NULL); | 2379 | device->flags.power_manageable = |
2380 | device->power.states[ACPI_STATE_D0].flags.valid; | ||
2381 | if (acpi_bus_init_power(device)) | ||
2382 | device->flags.power_manageable = 0; | ||
2383 | |||
2381 | device->flags.initialized = true; | 2384 | device->flags.initialized = true; |
2382 | } | 2385 | } |
2383 | device->flags.visited = false; | 2386 | device->flags.visited = false; |