From b921db6608bb779d16dba6b8b73b6c033f143cbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Laigle?= Date: Fri, 23 May 2025 14:11:11 +0000 Subject: [PATCH] driver: sensor: as6212: fix sampling frequency MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit AS6212 supports 0.25Hz, 1Hz, 4Hz, and 8Hz sampling frequencies, but the current driver supports 0.25Hz, 1Hz, 4Hz, and 16Hz sampling frequencies. Signed-off-by: Clément Laigle --- drivers/sensor/ti/tmp108/tmp108.c | 33 +++++++++++++++++++++++-------- drivers/sensor/ti/tmp108/tmp108.h | 1 + 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/drivers/sensor/ti/tmp108/tmp108.c b/drivers/sensor/ti/tmp108/tmp108.c index e503a30090e..69e8fadbf55 100644 --- a/drivers/sensor/ti/tmp108/tmp108.c +++ b/drivers/sensor/ti/tmp108/tmp108.c @@ -201,6 +201,7 @@ static int tmp108_attr_set(const struct device *dev, const struct sensor_value *val) { struct tmp108_data *drv_data = dev->data; + const struct tmp108_config *config = dev->config; __maybe_unused uint16_t reg_value; __maybe_unused int32_t uval; uint16_t mode; @@ -273,20 +274,36 @@ static int tmp108_attr_set(const struct device *dev, break; #endif /* CONFIG_TMP108_ALERT_INTERRUPTS */ - case SENSOR_ATTR_SAMPLING_FREQUENCY: - if (val->val1 < 1) { - mode = TI_TMP108_FREQ_4_SECS(dev); - } else if (val->val1 < 4) { - mode = TI_TMP108_FREQ_1_HZ(dev); - } else if (val->val1 < 16) { - mode = TI_TMP108_FREQ_4_HZ(dev); + case SENSOR_ATTR_SAMPLING_FREQUENCY: { + struct tmp_108_reg_def ams_as6212_reg_def = AMS_AS6212_CONF; + + if (memcmp(&config->reg_def, &ams_as6212_reg_def, sizeof(struct tmp_108_reg_def)) == + 0) { + if (val->val1 < 1) { + mode = TI_TMP108_FREQ_4_SECS(dev); + } else if (val->val1 < 4) { + mode = TI_TMP108_FREQ_1_HZ(dev); + } else if (val->val1 < 8) { + mode = TI_TMP108_FREQ_4_HZ(dev); + } else { + mode = AMS_AS6212_FREQ_8_HZ(dev); + } } else { - mode = TI_TMP108_FREQ_16_HZ(dev); + if (val->val1 < 1) { + mode = TI_TMP108_FREQ_4_SECS(dev); + } else if (val->val1 < 4) { + mode = TI_TMP108_FREQ_1_HZ(dev); + } else if (val->val1 < 16) { + mode = TI_TMP108_FREQ_4_HZ(dev); + } else { + mode = TI_TMP108_FREQ_16_HZ(dev); + } } result = tmp108_write_config(dev, TI_TMP108_FREQ_MASK(dev), mode); break; + } case SENSOR_ATTR_TMP108_SHUTDOWN_MODE: result = tmp108_write_config(dev, diff --git a/drivers/sensor/ti/tmp108/tmp108.h b/drivers/sensor/ti/tmp108/tmp108.h index 14d8f92be2c..9ca65fc5d06 100644 --- a/drivers/sensor/ti/tmp108/tmp108.h +++ b/drivers/sensor/ti/tmp108/tmp108.h @@ -56,6 +56,7 @@ #define TI_TMP108_FREQ_4_HZ(x) TI_TMP108_GET_CONF(x, CONF_CR1) #define TI_TMP108_FREQ_16_HZ(x) (TI_TMP108_GET_CONF(x, CONF_CR1) | \ TI_TMP108_GET_CONF(x, CONF_CR0)) +#define AMS_AS6212_FREQ_8_HZ(x) (TI_TMP108_GET_CONF(x, CONF_CR1) | TI_TMP108_GET_CONF(x, CONF_CR0)) #define TI_TMP108_FREQ_MASK(x) ~(TI_TMP108_GET_CONF(x, CONF_CR1) | \ TI_TMP108_GET_CONF(x, CONF_CR0))