summaryrefslogtreecommitdiff
path: root/zephyr/shim/src/temp_sensors.c
diff options
context:
space:
mode:
authorAaron Massey <aaronmassey@google.com>2021-09-24 11:22:12 -0600
committerCommit Bot <commit-bot@chromium.org>2021-09-24 19:47:45 +0000
commit465c9dc87a353f48b969da0631c4fd2b6df32a4f (patch)
treeeae7fa5a0f92cb81af315eb7912267167ed078e1 /zephyr/shim/src/temp_sensors.c
parentfc2b67a878f6c57c02569253032fc5d09f6c581e (diff)
downloadchrome-ec-465c9dc87a353f48b969da0631c4fd2b6df32a4f.tar.gz
zephyr: drivers: thermistors are device tree nodes
Thermistor drivers now query the device tree for configuration. Thermistor tests have been updated to be parameterized on all thermistors enabled in the device tree. BRANCH=none BUG=b:184374937 TEST= 1) zmake testall 2) make runhosttests Cq-Depend: chromium:3161332 Signed-off-by: Aaron Massey <aaronmassey@chromium.org> Change-Id: Ic5330cd5c33e79e192428ca857651de9a225856e Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3133812 Reviewed-by: Jack Rosenthal <jrosenth@chromium.org> Tested-by: Aaron Massey <aaronmassey@google.com> Commit-Queue: Aaron Massey <aaronmassey@google.com>
Diffstat (limited to 'zephyr/shim/src/temp_sensors.c')
-rw-r--r--zephyr/shim/src/temp_sensors.c45
1 files changed, 37 insertions, 8 deletions
diff --git a/zephyr/shim/src/temp_sensors.c b/zephyr/shim/src/temp_sensors.c
index 2544169ba3..4d8be4fa42 100644
--- a/zephyr/shim/src/temp_sensors.c
+++ b/zephyr/shim/src/temp_sensors.c
@@ -8,16 +8,45 @@
#include "adc.h"
#include "temp_sensor/thermistor.h"
-#define TEMP_THERMISTOR(node_id) \
- [ZSHIM_TEMP_SENSOR_ID(node_id)] = { \
- .name = DT_LABEL(node_id), \
- .read = DT_STRING_TOKEN(node_id, get_temp_func), \
- .idx = ZSHIM_ADC_ID(DT_PHANDLE(node_id, adc)), \
- .type = TEMP_SENSOR_TYPE_BOARD, \
+#if DT_NODE_EXISTS(DT_PATH(named_temp_sensors))
+static int thermistor_get_temp(const struct temp_sensor_t *sensor,
+ int *temp_ptr)
+{
+ return thermistor_get_temperature(sensor->idx, temp_ptr,
+ sensor->thermistor);
+}
+
+#define GET_THERMISTOR_DATUM(node_sample_id) \
+ [DT_PROP(node_sample_id, \
+ sample_index)] = { .mv = DT_PROP(node_sample_id, milivolt), \
+ .temp = DT_PROP(node_sample_id, temp) },
+
+#define DEFINE_THERMISTOR_DATA(node_id) \
+ static const struct thermistor_data_pair DT_CAT( \
+ node_id, _thermistor_data)[] = { \
+ DT_FOREACH_CHILD(node_id, GET_THERMISTOR_DATUM) \
+ };
+
+#define GET_THERMISTOR_INFO(node_id) \
+ (&(struct thermistor_info){ \
+ .scaling_factor = DT_PROP(node_id, scaling_factor), \
+ .num_pairs = DT_PROP(node_id, num_pairs), \
+ .data = DT_CAT(node_id, _thermistor_data), \
+ })
+
+#define TEMP_THERMISTOR(node_id) \
+ [ZSHIM_TEMP_SENSOR_ID(node_id)] = { \
+ .name = DT_LABEL(node_id), \
+ .read = &thermistor_get_temp, \
+ .idx = ZSHIM_ADC_ID(DT_PHANDLE(node_id, adc)), \
+ .type = TEMP_SENSOR_TYPE_BOARD, \
+ .thermistor = \
+ GET_THERMISTOR_INFO(DT_PHANDLE(node_id, thermistor)), \
},
-#if DT_NODE_EXISTS(DT_PATH(named_temp_sensors))
+DT_FOREACH_STATUS_OKAY(cros_ec_thermistor, DEFINE_THERMISTOR_DATA)
+
const struct temp_sensor_t temp_sensors[] = {
- DT_FOREACH_CHILD(DT_PATH(named_temp_sensors), TEMP_THERMISTOR)
+ DT_FOREACH_STATUS_OKAY(cros_ec_temp_sensor, TEMP_THERMISTOR)
};
#endif /* named_temp_sensors */