From a329a0c09f57e27e235c53a78d2c6fa15f4f4906 Mon Sep 17 00:00:00 2001 From: Ian Morris Date: Fri, 29 Sep 2023 13:20:48 -0700 Subject: [PATCH] drivers: sensor: tmp116: Add ability to set operating mode of TMP116/7 Adds support for setting the operating mode of the TMP116/7 sensor to either shutdown, continuous conversion or one-shot mode. Signed-off-by: Ian Morris --- drivers/sensor/ti/tmp116/tmp116.c | 10 +++++++++- drivers/sensor/ti/tmp116/tmp116.h | 4 ++++ include/zephyr/drivers/sensor/tmp116.h | 10 ++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/drivers/sensor/ti/tmp116/tmp116.c b/drivers/sensor/ti/tmp116/tmp116.c index d1064a0d103..d52c9d52399 100644 --- a/drivers/sensor/ti/tmp116/tmp116.c +++ b/drivers/sensor/ti/tmp116/tmp116.c @@ -255,7 +255,7 @@ static int tmp116_attr_set(const struct device *dev, return -ENOTSUP; } - switch (attr) { + switch ((int)attr) { case SENSOR_ATTR_OFFSET: if (drv_data->id != TMP117_DEVICE_ID) { LOG_ERR("%s: Offset is only supported by TMP117", @@ -293,6 +293,14 @@ static int tmp116_attr_set(const struct device *dev, return -EINVAL; } return tmp116_write_config(dev, TMP116_CFGR_AVG, avg); + case SENSOR_ATTR_TMP116_SHUTDOWN_MODE: + return tmp116_write_config(dev, TMP116_CFGR_MODE, TMP116_MODE_SHUTDOWN); + + case SENSOR_ATTR_TMP116_CONTINUOUS_CONVERSION_MODE: + return tmp116_write_config(dev, TMP116_CFGR_MODE, TMP116_MODE_CONTINUOUS); + + case SENSOR_ATTR_TMP116_ONE_SHOT_MODE: + return tmp116_write_config(dev, TMP116_CFGR_MODE, TMP116_MODE_ONE_SHOT); default: return -ENOTSUP; diff --git a/drivers/sensor/ti/tmp116/tmp116.h b/drivers/sensor/ti/tmp116/tmp116.h index 153dcb1a3ee..e8b5c0a3534 100644 --- a/drivers/sensor/ti/tmp116/tmp116.h +++ b/drivers/sensor/ti/tmp116/tmp116.h @@ -26,6 +26,7 @@ #define TMP117_DEVICE_ID 0x0117 #define TMP116_CFGR_AVG (BIT(5) | BIT(6)) +#define TMP116_CFGR_MODE (BIT(10) | BIT(11)) #define TMP116_CFGR_DATA_READY BIT(13) #define TMP116_EEPROM_UL_UNLOCK BIT(15) #define TMP116_EEPROM_UL_BUSY BIT(14) @@ -34,6 +35,9 @@ #define TMP116_AVG_8_SAMPLES BIT(5) #define TMP116_AVG_32_SAMPLES BIT(6) #define TMP116_AVG_64_SAMPLES (BIT(5) | BIT(6)) +#define TMP116_MODE_CONTINUOUS 0 +#define TMP116_MODE_SHUTDOWN BIT(10) +#define TMP116_MODE_ONE_SHOT (BIT(10) | BIT(11)) struct tmp116_data { uint16_t sample; diff --git a/include/zephyr/drivers/sensor/tmp116.h b/include/zephyr/drivers/sensor/tmp116.h index 6b11426ab09..5efb4ad252a 100644 --- a/include/zephyr/drivers/sensor/tmp116.h +++ b/include/zephyr/drivers/sensor/tmp116.h @@ -8,8 +8,18 @@ #define ZEPHYR_INCLUDE_DRIVERS_SENSOR_TMP116_H_ #include +#include #include +enum sensor_attribute_tmp_116 { + /** Turn on power saving/one shot mode */ + SENSOR_ATTR_TMP116_ONE_SHOT_MODE = SENSOR_ATTR_PRIV_START, + /** Shutdown the sensor */ + SENSOR_ATTR_TMP116_SHUTDOWN_MODE, + /** Turn on continuous conversion */ + SENSOR_ATTR_TMP116_CONTINUOUS_CONVERSION_MODE, +}; + #define EEPROM_TMP116_SIZE (4 * sizeof(uint16_t)) int tmp116_eeprom_read(const struct device *dev, off_t offset, void *data,