aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/thermal.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/thermal.c')
-rw-r--r--drivers/acpi/thermal.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index d7ef69d835f2..bb95709a6be8 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -706,6 +706,38 @@ static int thermal_get_crit_temp(struct thermal_zone_device *thermal,
706 return -EINVAL; 706 return -EINVAL;
707} 707}
708 708
709static int thermal_get_trend(struct thermal_zone_device *thermal,
710 int trip, enum thermal_trend *trend)
711{
712 struct acpi_thermal *tz = thermal->devdata;
713 enum thermal_trip_type type;
714 int i;
715
716 if (thermal_get_trip_type(thermal, trip, &type))
717 return -EINVAL;
718
719 /* Only PASSIVE trip points need TREND */
720 if (type != THERMAL_TRIP_PASSIVE)
721 return -EINVAL;
722
723 /*
724 * tz->temperature has already been updated by generic thermal layer,
725 * before this callback being invoked
726 */
727 i = (tz->trips.passive.tc1 * (tz->temperature - tz->last_temperature))
728 + (tz->trips.passive.tc2
729 * (tz->temperature - tz->trips.passive.temperature));
730
731 if (i > 0)
732 *trend = THERMAL_TREND_RAISING;
733 else if (i < 0)
734 *trend = THERMAL_TREND_DROPPING;
735 else
736 *trend = THERMAL_TREND_STABLE;
737 return 0;
738}
739
740
709static int thermal_notify(struct thermal_zone_device *thermal, int trip, 741static int thermal_notify(struct thermal_zone_device *thermal, int trip,
710 enum thermal_trip_type trip_type) 742 enum thermal_trip_type trip_type)
711{ 743{
@@ -838,6 +870,7 @@ static const struct thermal_zone_device_ops acpi_thermal_zone_ops = {
838 .get_trip_type = thermal_get_trip_type, 870 .get_trip_type = thermal_get_trip_type,
839 .get_trip_temp = thermal_get_trip_temp, 871 .get_trip_temp = thermal_get_trip_temp,
840 .get_crit_temp = thermal_get_crit_temp, 872 .get_crit_temp = thermal_get_crit_temp,
873 .get_trend = thermal_get_trend,
841 .notify = thermal_notify, 874 .notify = thermal_notify,
842}; 875};
843 876