提交 b1028c54 编写于 作者: K Konstantin Karasyov 提交者: Len Brown
上级 724339d7
......@@ -199,15 +199,14 @@ int acpi_bus_set_power(acpi_handle handle, int state)
* Get device's current power state if it's unknown
* This means device power state isn't initialized or previous setting failed
*/
if (!device->flags.force_power_state) {
if (device->power.state == ACPI_STATE_UNKNOWN)
acpi_bus_get_power(device->handle, &device->power.state);
if (state == device->power.state) {
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n",
state));
return 0;
}
if ((device->power.state == ACPI_STATE_UNKNOWN) || device->flags.force_power_state)
acpi_bus_get_power(device->handle, &device->power.state);
if ((state == device->power.state) && !device->flags.force_power_state) {
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n",
state));
return 0;
}
if (!device->power.states[state].flags.valid) {
printk(KERN_WARNING PREFIX "Device does not support D%d\n", state);
return -ENODEV;
......
......@@ -412,6 +412,10 @@ int acpi_power_transition(struct acpi_device *device, int state)
goto end;
}
if (device->power.state == state) {
goto end;
}
/*
* Then we dereference all power resources used in the current list.
*/
......
......@@ -1357,28 +1357,32 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
static int acpi_thermal_resume(struct acpi_device *device)
{
struct acpi_thermal *tz = NULL;
int i;
int i, j, power_state, result;
if (!device || !acpi_driver_data(device))
return -EINVAL;
tz = acpi_driver_data(device);
acpi_thermal_get_temperature(tz);
for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++) {
if (tz->trips.active[i].flags.valid) {
tz->temperature = tz->trips.active[i].temperature;
tz->trips.active[i].flags.enabled = 0;
acpi_thermal_active(tz);
tz->state.active |= tz->trips.active[i].flags.enabled;
tz->state.active_index = i;
if (!(&tz->trips.active[i]))
break;
if (!tz->trips.active[i].flags.valid)
break;
tz->trips.active[i].flags.enabled = 1;
for (j = 0; j < tz->trips.active[i].devices.count; j++) {
result = acpi_bus_get_power(tz->trips.active[i].devices.
handles[j], &power_state);
if (result || (power_state != ACPI_STATE_D0)) {
tz->trips.active[i].flags.enabled = 0;
break;
}
}
tz->state.active |= tz->trips.active[i].flags.enabled;
}
acpi_thermal_check(tz);
acpi_thermal_check(tz);
return AE_OK;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册