aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/thermal
diff options
context:
space:
mode:
authorZhang Rui <rui.zhang@intel.com>2012-06-26 21:54:33 -0400
committerZhang Rui <rui.zhang@intel.com>2012-09-24 02:44:36 -0400
commit601f3d4242be6ed6f72a2aadabc91e8255dad811 (patch)
tree497f09fcf665c066e4efc5d9542b33f021632ea9 /drivers/thermal
parent9d99842f99d847191ebd0c28469d2c70fcc5bf9e (diff)
Thermal: Introduce .get_trend() callback.
According to ACPI spec, tc1 and tc2 are used by OSPM to anticipate the temperature trends. We introduced the same concept to the generic thermal layer for passive cooling, but now it seems that these values are hard to be used on other platforms. So We introduce .get_trend() as a more general solution. For the platform thermal drivers that have their own way to anticipate the temperature trends, they should provide their own .get_trend() callback. Or else, we will calculate the temperature trends by simply comparing the current temperature and the cached previous temperature reading. 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')
-rw-r--r--drivers/thermal/thermal_sys.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/thermal/thermal_sys.c b/drivers/thermal/thermal_sys.c
index b04fe2c4b0d5..146aa043f15b 100644
--- a/drivers/thermal/thermal_sys.c
+++ b/drivers/thermal/thermal_sys.c
@@ -723,6 +723,20 @@ static void thermal_zone_device_passive(struct thermal_zone_device *tz,
723 struct thermal_cooling_device *cdev; 723 struct thermal_cooling_device *cdev;
724 long state, max_state; 724 long state, max_state;
725 725
726 if (!tz->ops->get_trend ||
727 tz->ops->get_trend(tz, trip, (enum thermal_trend *)&trend)) {
728 /*
729 * compare the current temperature and previous temperature
730 * to get the thermal trend, if no special requirement
731 */
732 if (tz->temperature > tz->last_temperature)
733 trend = THERMAL_TREND_RAISING;
734 else if (tz->temperature < tz->last_temperature)
735 trend = THERMAL_TREND_DROPPING;
736 else
737 trend = THERMAL_TREND_STABLE;
738 }
739
726 /* 740 /*
727 * Above Trip? 741 * Above Trip?
728 * ----------- 742 * -----------
@@ -1091,6 +1105,9 @@ void thermal_zone_device_update(struct thermal_zone_device *tz)
1091 goto leave; 1105 goto leave;
1092 } 1106 }
1093 1107
1108 tz->last_temperature = tz->temperature;
1109 tz->temperature = temp;
1110
1094 for (count = 0; count < tz->trips; count++) { 1111 for (count = 0; count < tz->trips; count++) {
1095 tz->ops->get_trip_type(tz, count, &trip_type); 1112 tz->ops->get_trip_type(tz, count, &trip_type);
1096 tz->ops->get_trip_temp(tz, count, &trip_temp); 1113 tz->ops->get_trip_temp(tz, count, &trip_temp);
@@ -1150,8 +1167,6 @@ void thermal_zone_device_update(struct thermal_zone_device *tz)
1150 thermal_zone_device_passive(tz, temp, tz->forced_passive, 1167 thermal_zone_device_passive(tz, temp, tz->forced_passive,
1151 THERMAL_TRIPS_NONE); 1168 THERMAL_TRIPS_NONE);
1152 1169
1153 tz->last_temperature = temp;
1154
1155leave: 1170leave:
1156 if (tz->passive) 1171 if (tz->passive)
1157 thermal_zone_device_set_polling(tz, tz->passive_delay); 1172 thermal_zone_device_set_polling(tz, tz->passive_delay);