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 <wangjianyu3@xiaomi.com>
This commit is contained in:
wangjianyu3 2024-12-25 17:58:45 +08:00 committed by Xiang Xiao
parent 9899acf20b
commit c6c89ac262

View file

@ -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)