diff options
author | Zhang Rui <rui.zhang@intel.com> | 2012-06-26 04:26:40 -0400 |
---|---|---|
committer | Zhang Rui <rui.zhang@intel.com> | 2012-09-24 02:44:36 -0400 |
commit | e3f25e6e5836c4790fbe395ff42e241f372d859d (patch) | |
tree | 9667ec2691e586a9b4a0ca4a8d4e14d51fa168ec /drivers/thermal/thermal_sys.c | |
parent | 0d7614f09c1ebdbaa1599a5aba7593f147bf96ee (diff) |
Thermal: Introduce multiple cooling states support
This is because general active cooling devices, like fans,
may have multiple speeds, which can be mapped to different cooling states.
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
Reviewed-by: Rafael J. Wysocki <rjw@sisk.pl>
Reviewed-by: Valentin, Eduardo <eduardo.valentin@ti.com>
Diffstat (limited to 'drivers/thermal/thermal_sys.c')
-rw-r--r-- | drivers/thermal/thermal_sys.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/thermal/thermal_sys.c b/drivers/thermal/thermal_sys.c index 2ab31e4f02cc..dc4044b682a1 100644 --- a/drivers/thermal/thermal_sys.c +++ b/drivers/thermal/thermal_sys.c | |||
@@ -1059,6 +1059,7 @@ void thermal_zone_device_update(struct thermal_zone_device *tz) | |||
1059 | enum thermal_trip_type trip_type; | 1059 | enum thermal_trip_type trip_type; |
1060 | struct thermal_cooling_device_instance *instance; | 1060 | struct thermal_cooling_device_instance *instance; |
1061 | struct thermal_cooling_device *cdev; | 1061 | struct thermal_cooling_device *cdev; |
1062 | unsigned long cur_state, max_state; | ||
1062 | 1063 | ||
1063 | mutex_lock(&tz->lock); | 1064 | mutex_lock(&tz->lock); |
1064 | 1065 | ||
@@ -1098,10 +1099,17 @@ void thermal_zone_device_update(struct thermal_zone_device *tz) | |||
1098 | 1099 | ||
1099 | cdev = instance->cdev; | 1100 | cdev = instance->cdev; |
1100 | 1101 | ||
1102 | cdev->ops->get_cur_state(cdev, &cur_state); | ||
1103 | cdev->ops->get_max_state(cdev, &max_state); | ||
1104 | |||
1101 | if (temp >= trip_temp) | 1105 | if (temp >= trip_temp) |
1102 | cdev->ops->set_cur_state(cdev, 1); | 1106 | cur_state = cur_state < max_state ? |
1107 | (cur_state + 1) : max_state; | ||
1103 | else | 1108 | else |
1104 | cdev->ops->set_cur_state(cdev, 0); | 1109 | cur_state = cur_state > 0 ? |
1110 | (cur_state - 1) : 0; | ||
1111 | |||
1112 | cdev->ops->set_cur_state(cdev, cur_state); | ||
1105 | } | 1113 | } |
1106 | break; | 1114 | break; |
1107 | case THERMAL_TRIP_PASSIVE: | 1115 | case THERMAL_TRIP_PASSIVE: |