thermal: Add support for TI LM74

LM74 is a SPI temperature sensor.

Implement a driver to read temperature from it.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
This commit is contained in:
Christophe Leroy 2024-04-02 18:55:31 +02:00
parent ea208201a1
commit c578728d2e
3 changed files with 59 additions and 0 deletions

View file

@ -41,4 +41,10 @@ config TI_DRA7_THERMAL
Enable thermal support for for the Texas Instruments DRA752 SoC family. Enable thermal support for for the Texas Instruments DRA752 SoC family.
The driver supports reading CPU temperature. 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 endif # if DM_THERMAL

View file

@ -9,3 +9,4 @@ obj-$(CONFIG_IMX_THERMAL) += imx_thermal.o
obj-$(CONFIG_IMX_SCU_THERMAL) += imx_scu_thermal.o obj-$(CONFIG_IMX_SCU_THERMAL) += imx_scu_thermal.o
obj-$(CONFIG_TI_DRA7_THERMAL) += ti-bandgap.o obj-$(CONFIG_TI_DRA7_THERMAL) += ti-bandgap.o
obj-$(CONFIG_IMX_TMU) += imx_tmu.o obj-$(CONFIG_IMX_TMU) += imx_tmu.o
obj-$(CONFIG_TI_LM74_THERMAL) += ti-lm74.o

52
drivers/thermal/ti-lm74.c Normal file
View file

@ -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,
};