]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
thermal: Add support for TI LM74
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Tue, 2 Apr 2024 16:55:31 +0000 (18:55 +0200)
committerChristophe Leroy <christophe.leroy@csgroup.eu>
Thu, 18 Apr 2024 13:47:46 +0000 (15:47 +0200)
LM74 is a SPI temperature sensor.

Implement a driver to read temperature from it.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
drivers/thermal/Kconfig
drivers/thermal/Makefile
drivers/thermal/ti-lm74.c [new file with mode: 0644]

index 681b621760dcee70966eeb8f8fce71f296f8eddd..440eb64a5667d1e895f94e1636404ddc93c1b100 100644 (file)
@@ -41,4 +41,10 @@ config TI_DRA7_THERMAL
         Enable thermal support for for the Texas Instruments DRA752 SoC family.
         The driver supports reading CPU temperature.
 
+config TI_LM74_THERMAL
+        bool "Temperature sensor driver for TI LM74 chip"
+        help
+        Enable thermal support for the Texas Instruments LM74 chip.
+        The driver supports reading CPU temperature.
+
 endif # if DM_THERMAL
index 8acc7d20cb9f0fbb04405c0900d314359e46101a..b5ab0fc221fa65ab6f7714dfad91b804845c5f38 100644 (file)
@@ -9,3 +9,4 @@ obj-$(CONFIG_IMX_THERMAL) += imx_thermal.o
 obj-$(CONFIG_IMX_SCU_THERMAL) += imx_scu_thermal.o
 obj-$(CONFIG_TI_DRA7_THERMAL) += ti-bandgap.o
 obj-$(CONFIG_IMX_TMU) += imx_tmu.o
+obj-$(CONFIG_TI_LM74_THERMAL) += ti-lm74.o
diff --git a/drivers/thermal/ti-lm74.c b/drivers/thermal/ti-lm74.c
new file mode 100644 (file)
index 0000000..7d56f75
--- /dev/null
@@ -0,0 +1,52 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * TI LM74 temperature sensor driver
+ *
+ * Copyright (C) 2024 CS GROUP France
+ *
+ */
+
+#include <dm.h>
+#include <thermal.h>
+#include <spi.h>
+
+static int ti_lm74_get_temp(struct udevice *dev, int *temp)
+{
+       char buf[2];
+       s16 raw;
+       int ret;
+
+       ret = dm_spi_claim_bus(dev);
+       if (ret)
+               return ret;
+
+       ret = dm_spi_xfer(dev, 16, NULL, buf, SPI_XFER_BEGIN | SPI_XFER_END);
+
+       dm_spi_release_bus(dev);
+       if (ret)
+               return ret;
+
+       raw = ((buf[0] << 8) + buf[1]) >> 3;
+
+       *temp = (((int)raw * 125) + 1000) / 2000;
+
+       return 0;
+}
+
+static struct dm_thermal_ops ti_lm74_ops = {
+       .get_temp       = ti_lm74_get_temp,
+};
+
+static const struct udevice_id of_ti_lm74_match[] = {
+       {
+               .compatible = "ti,lm74",
+       },
+       {},
+};
+
+U_BOOT_DRIVER(ti_bandgap_thermal) = {
+       .name   = "ti_lm74_thermal",
+       .id     = UCLASS_THERMAL,
+       .ops    = &ti_lm74_ops,
+       .of_match = of_ti_lm74_match,
+};