mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 06:02:05 +00:00
thermal: trip: Make thermal_zone_set_trips() use trip thresholds
Modify thermal_zone_set_trips() to use trip thresholds instead of computing the low temperature for each trip to avoid deriving both the high and low temperature levels from the same trip (which may happen if the zone temperature falls into the hysteresis range of one trip). Accordingly, make __thermal_zone_device_update() call thermal_zone_set_trips() later, when threshold values have been updated for all trips. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
This commit is contained in:
parent
28d5cc1267
commit
893bae9223
@ -513,13 +513,13 @@ void __thermal_zone_device_update(struct thermal_zone_device *tz,
|
|||||||
if (tz->temperature == THERMAL_TEMP_INVALID)
|
if (tz->temperature == THERMAL_TEMP_INVALID)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
thermal_zone_set_trips(tz);
|
|
||||||
|
|
||||||
tz->notify_event = event;
|
tz->notify_event = event;
|
||||||
|
|
||||||
for_each_trip_desc(tz, td)
|
for_each_trip_desc(tz, td)
|
||||||
handle_thermal_trip(tz, td, &way_up_list, &way_down_list);
|
handle_thermal_trip(tz, td, &way_up_list, &way_down_list);
|
||||||
|
|
||||||
|
thermal_zone_set_trips(tz);
|
||||||
|
|
||||||
list_sort(&way_up_list, &way_up_list, thermal_trip_notify_cmp);
|
list_sort(&way_up_list, &way_up_list, thermal_trip_notify_cmp);
|
||||||
list_for_each_entry(td, &way_up_list, notify_list_node)
|
list_for_each_entry(td, &way_up_list, notify_list_node)
|
||||||
thermal_trip_crossed(tz, &td->trip, governor, true);
|
thermal_trip_crossed(tz, &td->trip, governor, true);
|
||||||
|
@ -88,17 +88,11 @@ void thermal_zone_set_trips(struct thermal_zone_device *tz)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
for_each_trip_desc(tz, td) {
|
for_each_trip_desc(tz, td) {
|
||||||
const struct thermal_trip *trip = &td->trip;
|
if (td->threshold < tz->temperature && td->threshold > low)
|
||||||
int trip_low;
|
low = td->threshold;
|
||||||
|
|
||||||
trip_low = trip->temperature - trip->hysteresis;
|
if (td->threshold > tz->temperature && td->threshold < high)
|
||||||
|
high = td->threshold;
|
||||||
if (trip_low < tz->temperature && trip_low > low)
|
|
||||||
low = trip_low;
|
|
||||||
|
|
||||||
if (trip->temperature > tz->temperature &&
|
|
||||||
trip->temperature < high)
|
|
||||||
high = trip->temperature;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* No need to change trip points */
|
/* No need to change trip points */
|
||||||
|
Loading…
Reference in New Issue
Block a user