diff options
Diffstat (limited to 'drivers/acpi/thermal.c')
-rw-r--r-- | drivers/acpi/thermal.c | 33 |
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 | ||
709 | static 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 | |||
709 | static int thermal_notify(struct thermal_zone_device *thermal, int trip, | 741 | static 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 | ||