ntc-thermal: fix NTC reading comparison
Compare it to the previous check, not just the last reading. This will
prevent false positives for errors in cases where the temperature
actually jumped a lot.
Bug: 250564489
Change-Id: I19844854ad64d3d2f90701670731c9ef0d8e7caf
diff --git a/battery/ntc-thermal.c b/battery/ntc-thermal.c
index 60e3522..3f9df74 100644
--- a/battery/ntc-thermal.c
+++ b/battery/ntc-thermal.c
@@ -103,10 +103,17 @@
diff = *temp - ntc_sensor->prev_temp;
else
diff = ntc_sensor->prev_temp - *temp;
- if (ntc_sensor->prev_temp != -INT_MIN && diff > NTC_ERROR_DIFFERENCE) {
- dev_err(ntcdev->dev, "IIO channel returned unusual temperature %d, prev_temp %d\n", *temp, ntc_sensor->prev_temp);
- // Treat too different of a temperature as a NTC error
- return -EINVAL;
+ if (*temp == ntcdev->lookup_table[ntcdev->nlookup_table - 1].temp) {
+ // Always treat max NTC value as a NTC error
+ dev_err(ntcdev->dev, "IIO channel returned unusual temperature %d\n", *temp);
+ ret = -EINVAL;
+ } else {
+ if (ntc_sensor->prev_temp != -INT_MIN && diff > NTC_ERROR_DIFFERENCE) {
+ dev_err(ntcdev->dev, "IIO channel returned unusual temperature %d, prev_temp %d\n", *temp, ntc_sensor->prev_temp);
+ // Treat too different of a temperature as a NTC error
+ ret = -EINVAL;
+ }
+ ntc_sensor->prev_temp = *temp;
}
return ret;
@@ -125,7 +132,6 @@
msleep(10);
ret = ntc_thermal_try_temp(ntc_sensor, temp);
}
- ntc_sensor->prev_temp = *temp;
if (ret < 0) {
return ret;