aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/thermal/thermal_sys.c
diff options
context:
space:
mode:
authorZhang Rui <rui.zhang@intel.com>2012-06-26 04:26:40 -0400
committerZhang Rui <rui.zhang@intel.com>2012-09-24 02:44:36 -0400
commite3f25e6e5836c4790fbe395ff42e241f372d859d (patch)
tree9667ec2691e586a9b4a0ca4a8d4e14d51fa168ec /drivers/thermal/thermal_sys.c
parent0d7614f09c1ebdbaa1599a5aba7593f147bf96ee (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.c12
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: