Skip to content

Commit

Permalink
Pull bugzilla-7570 into release branch
Browse files Browse the repository at this point in the history
  • Loading branch information
Len Brown committed Feb 17, 2007
2 parents 4559b43 + b1028c5 commit 08e4a10
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 20 deletions.
15 changes: 7 additions & 8 deletions drivers/acpi/bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 4 additions & 0 deletions drivers/acpi/power.c
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,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.
*/
Expand Down
28 changes: 16 additions & 12 deletions drivers/acpi/thermal.c
Original file line number Diff line number Diff line change
Expand Up @@ -1356,28 +1356,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;
}
Expand Down

0 comments on commit 08e4a10

Please sign in to comment.