Commit 488a76c5 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki Committed by Len Brown

ACPI / Fan: Rework the handling of power resources

Use the new function acpi_bus_update_power() for manipulating power
resources used by ACPI fan devices, which allows them to be put into
the right state during initialization and resume.  Consequently,
remove the flags.force_power_state field from struct acpi_device,
which is not necessary any more.
Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent bf325f95
...@@ -266,7 +266,7 @@ static int __acpi_bus_set_power(struct acpi_device *device, int state) ...@@ -266,7 +266,7 @@ static int __acpi_bus_set_power(struct acpi_device *device, int state)
/* Make sure this is a valid target state */ /* Make sure this is a valid target state */
if ((state == device->power.state) && !device->flags.force_power_state) { if (state == device->power.state) {
ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n", ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device is already at D%d\n",
state)); state));
return 0; return 0;
......
...@@ -86,7 +86,7 @@ static int fan_get_cur_state(struct thermal_cooling_device *cdev, unsigned long ...@@ -86,7 +86,7 @@ static int fan_get_cur_state(struct thermal_cooling_device *cdev, unsigned long
if (!device) if (!device)
return -EINVAL; return -EINVAL;
result = acpi_bus_get_power(device->handle, &acpi_state); result = acpi_bus_update_power(device->handle, &acpi_state);
if (result) if (result)
return result; return result;
...@@ -123,7 +123,6 @@ static struct thermal_cooling_device_ops fan_cooling_ops = { ...@@ -123,7 +123,6 @@ static struct thermal_cooling_device_ops fan_cooling_ops = {
static int acpi_fan_add(struct acpi_device *device) static int acpi_fan_add(struct acpi_device *device)
{ {
int result = 0; int result = 0;
int state = 0;
struct thermal_cooling_device *cdev; struct thermal_cooling_device *cdev;
if (!device) if (!device)
...@@ -132,16 +131,12 @@ static int acpi_fan_add(struct acpi_device *device) ...@@ -132,16 +131,12 @@ static int acpi_fan_add(struct acpi_device *device)
strcpy(acpi_device_name(device), "Fan"); strcpy(acpi_device_name(device), "Fan");
strcpy(acpi_device_class(device), ACPI_FAN_CLASS); strcpy(acpi_device_class(device), ACPI_FAN_CLASS);
result = acpi_bus_get_power(device->handle, &state); result = acpi_bus_update_power(device->handle, NULL);
if (result) { if (result) {
printk(KERN_ERR PREFIX "Reading power state\n"); printk(KERN_ERR PREFIX "Setting initial power state\n");
goto end; goto end;
} }
device->flags.force_power_state = 1;
acpi_bus_set_power(device->handle, state);
device->flags.force_power_state = 0;
cdev = thermal_cooling_device_register("Fan", device, cdev = thermal_cooling_device_register("Fan", device,
&fan_cooling_ops); &fan_cooling_ops);
if (IS_ERR(cdev)) { if (IS_ERR(cdev)) {
...@@ -200,22 +195,14 @@ static int acpi_fan_suspend(struct acpi_device *device, pm_message_t state) ...@@ -200,22 +195,14 @@ static int acpi_fan_suspend(struct acpi_device *device, pm_message_t state)
static int acpi_fan_resume(struct acpi_device *device) static int acpi_fan_resume(struct acpi_device *device)
{ {
int result = 0; int result;
int power_state = 0;
if (!device) if (!device)
return -EINVAL; return -EINVAL;
result = acpi_bus_get_power(device->handle, &power_state); result = acpi_bus_update_power(device->handle, NULL);
if (result) { if (result)
printk(KERN_ERR PREFIX printk(KERN_ERR PREFIX "Error updating fan power state\n");
"Error reading fan power state\n");
return result;
}
device->flags.force_power_state = 1;
acpi_bus_set_power(device->handle, power_state);
device->flags.force_power_state = 0;
return result; return result;
} }
......
...@@ -1059,8 +1059,9 @@ static int acpi_thermal_resume(struct acpi_device *device) ...@@ -1059,8 +1059,9 @@ static int acpi_thermal_resume(struct acpi_device *device)
break; break;
tz->trips.active[i].flags.enabled = 1; tz->trips.active[i].flags.enabled = 1;
for (j = 0; j < tz->trips.active[i].devices.count; j++) { for (j = 0; j < tz->trips.active[i].devices.count; j++) {
result = acpi_bus_get_power(tz->trips.active[i].devices. result = acpi_bus_update_power(
handles[j], &power_state); tz->trips.active[i].devices.handles[j],
&power_state);
if (result || (power_state != ACPI_STATE_D0)) { if (result || (power_state != ACPI_STATE_D0)) {
tz->trips.active[i].flags.enabled = 0; tz->trips.active[i].flags.enabled = 0;
break; break;
......
...@@ -149,8 +149,7 @@ struct acpi_device_flags { ...@@ -149,8 +149,7 @@ struct acpi_device_flags {
u32 power_manageable:1; u32 power_manageable:1;
u32 performance_manageable:1; u32 performance_manageable:1;
u32 wake_capable:1; /* Wakeup(_PRW) supported? */ u32 wake_capable:1; /* Wakeup(_PRW) supported? */
u32 force_power_state:1; u32 reserved:23;
u32 reserved:22;
}; };
/* File System */ /* File System */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment