Skip to content

Commit 8604a04

Browse files
committed
drivers: sensor: temperature: Add i.MX RT die temperature sensor
Added driver for i.MX RT118X die temperature sensor Signed-off-by: Anders Bjørn Nedergaard <abn@polytech.com>
1 parent bc7a2d9 commit 8604a04

File tree

7 files changed

+104
-0
lines changed

7 files changed

+104
-0
lines changed

drivers/sensor/nxp/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ add_subdirectory_ifdef(CONFIG_FXLS8974 fxls8974)
77
add_subdirectory_ifdef(CONFIG_FXOS8700 fxos8700)
88
add_subdirectory_ifdef(CONFIG_MCUX_LPCMP mcux_lpcmp)
99
add_subdirectory_ifdef(CONFIG_NXP_TEMPMON nxp_tempmon)
10+
add_subdirectory_ifdef(CONFIG_NXP_TMPSNS nxp_tmpsns)
1011
add_subdirectory_ifdef(CONFIG_P3T1755 p3t1755)
1112
add_subdirectory_ifdef(CONFIG_QDEC_MCUX qdec_mcux)
1213
add_subdirectory_ifdef(CONFIG_QDEC_NXP_S32 qdec_nxp_s32)

drivers/sensor/nxp/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ source "drivers/sensor/nxp/mcux_acmp/Kconfig"
99
source "drivers/sensor/nxp/mcux_lpcmp/Kconfig"
1010
source "drivers/sensor/nxp/nxp_kinetis_temp/Kconfig"
1111
source "drivers/sensor/nxp/nxp_tempmon/Kconfig"
12+
source "drivers/sensor/nxp/nxp_tmpsns/Kconfig"
1213
source "drivers/sensor/nxp/p3t1755/Kconfig"
1314
source "drivers/sensor/nxp/qdec_mcux/Kconfig"
1415
source "drivers/sensor/nxp/qdec_nxp_s32/Kconfig"
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Copyright (c) 2025 Polytech A/S
2+
# SPDX-License-Identifier: Apache-2.0
3+
4+
zephyr_library()
5+
6+
zephyr_library_sources(nxp_tmpsns.c)

drivers/sensor/nxp/nxp_tmpsns/Kconfig

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# NXP i.MX RT temperature sensor configuration options
2+
3+
# Copyright (c) 2025 Polytech A/S
4+
# SPDX-License-Identifier: Apache-2.0
5+
6+
config NXP_TMPSNS
7+
bool "NXP TMPSNS sensor"
8+
depends on SENSOR
9+
depends on DT_HAS_NXP_TMPSNS_ENABLED
10+
select FPU
11+
default y
12+
help
13+
Enable temperature measurement for NXP TMPSNS sensor
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
/*
2+
* Copyright (c) 2025 Polytech A/S
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
#define DT_DRV_COMPAT nxp_tmpsns
8+
9+
#include <fsl_tempsensor.h>
10+
#include <zephyr/drivers/sensor.h>
11+
12+
struct nxp_tmpsns_config {
13+
TMPSNS_Type *base;
14+
};
15+
16+
struct nxp_tmpsns_data {
17+
float die_temp;
18+
};
19+
20+
static int nxp_tmpsns_channel_get(const struct device *dev, enum sensor_channel chan,
21+
struct sensor_value *val)
22+
{
23+
const struct nxp_tmpsns_data *data = dev->data;
24+
25+
if (chan == SENSOR_CHAN_DIE_TEMP) {
26+
return sensor_value_from_float(val, data->die_temp);
27+
}
28+
29+
return -ENOTSUP;
30+
}
31+
32+
static int nxp_tmpsns_channel_fetch(const struct device *dev, enum sensor_channel chan)
33+
{
34+
const struct nxp_tmpsns_config *cfg = dev->config;
35+
struct nxp_tmpsns_data *data = dev->data;
36+
37+
switch (chan) {
38+
case SENSOR_CHAN_ALL:
39+
case SENSOR_CHAN_DIE_TEMP:
40+
data->die_temp = TMPSNS_GetCurrentTemperature(cfg->base);
41+
return 0;
42+
default:
43+
return -ENOTSUP;
44+
}
45+
}
46+
47+
static DEVICE_API(sensor, tmpsns_driver_api) = {
48+
.channel_get = nxp_tmpsns_channel_get,
49+
.sample_fetch = nxp_tmpsns_channel_fetch,
50+
};
51+
52+
static int nxp_tmpsns_init(const struct device *dev)
53+
{
54+
tmpsns_config_t config;
55+
56+
const struct nxp_tmpsns_config *cfg = dev->config;
57+
58+
TMPSNS_GetDefaultConfig(&config);
59+
config.measureMode = kTEMPSENSOR_ContinuousMode;
60+
config.frequency = 0x03U;
61+
TMPSNS_Init(cfg->base, &config);
62+
TMPSNS_StartMeasure(cfg->base);
63+
64+
return 0;
65+
}
66+
67+
#define NXP_TMPSNS_DEFINE(inst) \
68+
static struct nxp_tmpsns_config nxp_tmpsns_config_##inst = { \
69+
.base = (TMPSNS_Type *)DT_INST_REG_ADDR(inst)}; \
70+
struct nxp_tmpsns_data nxp_tmpsns_data_##inst; \
71+
SENSOR_DEVICE_DT_INST_DEFINE(inst, nxp_tmpsns_init, NULL, &nxp_tmpsns_data_##inst, \
72+
&nxp_tmpsns_config_##inst, POST_KERNEL, \
73+
CONFIG_SENSOR_INIT_PRIORITY, &tmpsns_driver_api);
74+
75+
DT_INST_FOREACH_STATUS_OKAY(NXP_TMPSNS_DEFINE)

dts/arm/nxp/nxp_rt118x.dtsi

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1241,6 +1241,13 @@
12411241
reg = <0x2cb0000 0x1000>;
12421242
status = "disabled";
12431243
};
1244+
1245+
temp: temp@4484580 {
1246+
reg = <0x4484580 0x24>;
1247+
interrupts = <83 0>;
1248+
compatible = "nxp,tmpsns";
1249+
status = "disabled";
1250+
};
12441251
};
12451252

12461253
&flexspi {

modules/hal_nxp/mcux/mcux-sdk-ng/drivers/drivers.cmake

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ set_variable_ifdef(CONFIG_MIPI_DBI_NXP_FLEXIO_LCDIF CONFIG_MCUX_COMPONENT_driver
144144
set_variable_ifdef(CONFIG_VIDEO_MCUX_MIPI_CSI2RX CONFIG_MCUX_COMPONENT_driver.mipi_csi2rx)
145145
set_variable_ifdef(CONFIG_ETH_NXP_IMX_NETC CONFIG_MCUX_COMPONENT_driver.netc)
146146
set_variable_ifdef(CONFIG_ETH_NXP_IMX_NETC CONFIG_MCUX_COMPONENT_driver.netc_switch)
147+
set_variable_ifdef(CONFIG_NXP_TMPSNS CONFIG_MCUX_COMPONENT_driver.tempsensor)
147148

148149
set_variable_ifdef(CONFIG_SOC_SERIES_IMXRT10XX CONFIG_MCUX_COMPONENT_driver.ocotp)
149150
set_variable_ifdef(CONFIG_SOC_SERIES_IMXRT11XX CONFIG_MCUX_COMPONENT_driver.ocotp)

0 commit comments

Comments
 (0)