From b2fc3b2d7f882399c07cb3786f8cb26216e41f0d Mon Sep 17 00:00:00 2001 From: wangjianyu3 Date: Wed, 25 Dec 2024 17:58:45 +0800 Subject: [PATCH] Thermal/step_wise: Fix that hysteresis takes no effect Test command nsh> cat /proc/thermal/cpu-thermal Trips /* Copy from drivers/thermal/thermal_dummy.c */ {.name = "cpu_crit", .temp = 90, .hyst = 5, .type = THERMAL_CRITICAL}, {.name = "cpu_alert1", .temp = 70, .hyst = 5, .type = THERMAL_HOT}, {.name = "cpu_alert0", .temp = 60, .hyst = 5, .type = THERMAL_NORMAL}, Without this patch # Error occured when temperature jump to 69. z:cpu-thermal t:67 t:1 h:16 l:0 c:fan0 s:0|(invalid) z:cpu-thermal t:72 t:1 h:16 l:0 c:fan0 s:1|1 z:cpu-thermal t:69 t:1 h:16 l:0 c:fan0 s:0|0 z:cpu-thermal t:74 t:1 h:16 l:0 c:fan0 s:1|1 With this patch z:cpu-thermal t:67 t:1 h:16 l:0 c:fan0 s:0|(invalid) z:cpu-thermal t:72 t:1 h:16 l:0 c:fan0 s:1|1 z:cpu-thermal t:69 t:1 h:16 l:0 c:fan0 s:1|1 z:cpu-thermal t:74 t:1 h:16 l:0 c:fan0 s:2|2 Signed-off-by: wangjianyu3 --- drivers/thermal/thermal_step_wise.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/thermal/thermal_step_wise.c b/drivers/thermal/thermal_step_wise.c index 53959583d2a..979e0dc4e4e 100644 --- a/drivers/thermal/thermal_step_wise.c +++ b/drivers/thermal/thermal_step_wise.c @@ -152,8 +152,10 @@ static int step_wise_throttle(FAR struct thermal_zone_device_s *zdev, enum thermal_trend_e trend; unsigned int next_state; bool throttle = false; + int hyst_temp; int trip_temp; + thermal_zone_get_trip_hyst(zdev, trip, &hyst_temp); thermal_zone_get_trip_temp(zdev, trip, &trip_temp); trend = thermal_zone_get_trend(zdev); @@ -162,6 +164,10 @@ static int step_wise_throttle(FAR struct thermal_zone_device_s *zdev, { throttle = true; } + else if (zdev->temperature > trip_temp - hyst_temp) + { + return OK; + } list_for_every_entry(&zdev->instance_list, instance, struct thermal_instance_s, zdev_node)