mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-20 14:13:16 +00:00
8144f9c665
the Aerohive HiveAP-330 and HiveAP-350 come equipped with an TI TMP125 temperature chip. This patch wires up the necessary support for this sensor and exposes it through hwmon / thermal sensor framework. Upstream support is coming, but it has to go through hwmon-next first. Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
72 lines
2.3 KiB
Diff
72 lines
2.3 KiB
Diff
From 31d8f414e1596ba54a4315418e4c0086fda9e428 Mon Sep 17 00:00:00 2001
|
|
From: Christian Lamparter <chunkeey@gmail.com>
|
|
Date: Fri, 18 Feb 2022 10:06:43 +0100
|
|
Subject: hwmon: (lm70) Add ti,tmp125 support
|
|
|
|
The TMP125 is a 2 degree Celsius accurate Digital
|
|
Temperature Sensor with a SPI interface.
|
|
|
|
The temperature register is a 16-bit, read-only register.
|
|
The MSB (Bit 15) is a leading zero and never set. Bits 14
|
|
to 5 are the 1+9 temperature data bits in a two's
|
|
complement format. Bits 4 to 0 are useless copies of
|
|
Bit 5 value and therefore ignored.
|
|
|
|
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
|
|
Link: https://lore.kernel.org/r/43b19cbd4e7f51e9509e561b02b5d8d0e7079fac.1645175187.git.chunkeey@gmail.com
|
|
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
|
|
---
|
|
--- a/drivers/hwmon/lm70.c
|
|
+++ b/drivers/hwmon/lm70.c
|
|
@@ -34,6 +34,7 @@
|
|
#define LM70_CHIP_LM71 2 /* NS LM71 */
|
|
#define LM70_CHIP_LM74 3 /* NS LM74 */
|
|
#define LM70_CHIP_TMP122 4 /* TI TMP122/TMP124 */
|
|
+#define LM70_CHIP_TMP125 5 /* TI TMP125 */
|
|
|
|
struct lm70 {
|
|
struct spi_device *spi;
|
|
@@ -87,6 +88,12 @@ static ssize_t temp1_input_show(struct d
|
|
* LM71:
|
|
* 14 bits of 2's complement data, discard LSB 2 bits,
|
|
* resolution 0.0312 degrees celsius.
|
|
+ *
|
|
+ * TMP125:
|
|
+ * MSB/D15 is a leading zero. D14 is the sign-bit. This is
|
|
+ * followed by 9 temperature bits (D13..D5) in 2's complement
|
|
+ * data format with a resolution of 0.25 degrees celsius per unit.
|
|
+ * LSB 5 bits (D4..D0) share the same value as D5 and get discarded.
|
|
*/
|
|
switch (p_lm70->chip) {
|
|
case LM70_CHIP_LM70:
|
|
@@ -102,6 +109,10 @@ static ssize_t temp1_input_show(struct d
|
|
case LM70_CHIP_LM71:
|
|
val = ((int)raw / 4) * 3125 / 100;
|
|
break;
|
|
+
|
|
+ case LM70_CHIP_TMP125:
|
|
+ val = (sign_extend32(raw, 14) / 32) * 250;
|
|
+ break;
|
|
}
|
|
|
|
status = sprintf(buf, "%d\n", val); /* millidegrees Celsius */
|
|
@@ -136,6 +147,10 @@ static const struct of_device_id lm70_of
|
|
.data = (void *) LM70_CHIP_TMP122,
|
|
},
|
|
{
|
|
+ .compatible = "ti,tmp125",
|
|
+ .data = (void *) LM70_CHIP_TMP125,
|
|
+ },
|
|
+ {
|
|
.compatible = "ti,lm71",
|
|
.data = (void *) LM70_CHIP_LM71,
|
|
},
|
|
@@ -184,6 +199,7 @@ static const struct spi_device_id lm70_i
|
|
{ "lm70", LM70_CHIP_LM70 },
|
|
{ "tmp121", LM70_CHIP_TMP121 },
|
|
{ "tmp122", LM70_CHIP_TMP122 },
|
|
+ { "tmp125", LM70_CHIP_TMP125 },
|
|
{ "lm71", LM70_CHIP_LM71 },
|
|
{ "lm74", LM70_CHIP_LM74 },
|
|
{ },
|