61 lines
1.9 KiB
Diff
61 lines
1.9 KiB
Diff
From 80ab63aad57c0100e5277218c03ce79f4256d8c4 Mon Sep 17 00:00:00 2001
|
|
From: "charles.park" <charles.park@hardkernel.com>
|
|
Date: Fri, 1 Jun 2018 18:12:01 +0900
|
|
Subject: [PATCH 32/75] ODROID-XU4: Update hack avoiding the invalid
|
|
temperature by TMU broken
|
|
|
|
Change-Id: I6092834427950a50746535458e99bf7089212044
|
|
---
|
|
drivers/thermal/thermal_helpers.c | 28 ++++++++++++++++++++++++++++
|
|
1 file changed, 28 insertions(+)
|
|
|
|
diff --git a/drivers/thermal/thermal_helpers.c b/drivers/thermal/thermal_helpers.c
|
|
index 3edd047e144f..1cfbe7c0ef6c 100644
|
|
--- a/drivers/thermal/thermal_helpers.c
|
|
+++ b/drivers/thermal/thermal_helpers.c
|
|
@@ -75,6 +75,10 @@ EXPORT_SYMBOL(get_thermal_instance);
|
|
*
|
|
* Return: On success returns 0, an error code otherwise
|
|
*/
|
|
+
|
|
+#define CRITICAL_TEMP 120000
|
|
+int thermal_zone_data[4] = { 0, };
|
|
+
|
|
int thermal_zone_get_temp(struct thermal_zone_device *tz, int *temp)
|
|
{
|
|
int ret = -EINVAL;
|
|
@@ -108,6 +112,30 @@ int thermal_zone_get_temp(struct thermal_zone_device *tz, int *temp)
|
|
*temp = tz->emul_temperature;
|
|
}
|
|
|
|
+ /* save thermal_zone data */
|
|
+ if (!ret)
|
|
+ thermal_zone_data[tz->id] = *temp;
|
|
+ /*
|
|
+ * This case is that the thermal sensor is broken.
|
|
+ * That's not real temperature. Set the fake temperature value in order to
|
|
+ * avoid reaching the ciritical temperature.
|
|
+ */
|
|
+ if ((thermal_zone_data[tz->id] > CRITICAL_TEMP) && (tz->id != 4)) {
|
|
+ int i, broken_sensor = 0, correct_temp = 0;
|
|
+ for (i = 0; i < 4; i++) {
|
|
+ if ((thermal_zone_data[i] <= CRITICAL_TEMP) &&
|
|
+ (correct_temp <= thermal_zone_data[i]))
|
|
+ correct_temp = thermal_zone_data[i];
|
|
+ if (thermal_zone_data[i] > CRITICAL_TEMP)
|
|
+ broken_sensor++;
|
|
+ }
|
|
+ /*
|
|
+ * if all thermal sensor broken then critical temperature data send
|
|
+ * for system poweroff.
|
|
+ */
|
|
+ *temp = (broken_sensor == 4) ? CRITICAL_TEMP : correct_temp;
|
|
+ }
|
|
+
|
|
mutex_unlock(&tz->lock);
|
|
exit:
|
|
return ret;
|
|
--
|
|
2.25.1
|
|
|