From 774bf6b50e09ca07f91159ab66034129d7de503c Mon Sep 17 00:00:00 2001 From: Antoniu Miclaus Date: Wed, 25 Oct 2023 16:46:42 +0300 Subject: [PATCH] drivers: sensor: adxl367: update self test delay The wait times in the self test procedure, according to the datasheet are 4 / ODR (current set value). Update the self test procedure by using the delay corresponding to the current ODR value that is set, instead of default ODR. Signed-off-by: Antoniu Miclaus --- drivers/sensor/adxl367/adxl367.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/drivers/sensor/adxl367/adxl367.c b/drivers/sensor/adxl367/adxl367.c index 020ee476b2b..f63b8f73a32 100644 --- a/drivers/sensor/adxl367/adxl367.c +++ b/drivers/sensor/adxl367/adxl367.c @@ -277,9 +277,30 @@ int adxl367_self_test(const struct device *dev) { int ret; struct adxl367_data *data = dev->data; + const struct adxl367_dev_config *cfg = dev->config; int16_t x_axis_1, x_axis_2, dif, min, max; uint8_t read_val[2]; + uint32_t st_delay_ms; + + /* 4 / ODR value in ms */ + switch (cfg->odr) { + case ADXL367_ODR_12P5HZ: + st_delay_ms = 320; + case ADXL367_ODR_25HZ: + st_delay_ms = 160; + case ADXL367_ODR_50HZ: + st_delay_ms = 80; + case ADXL367_ODR_100HZ: + st_delay_ms = 40; + case ADXL367_ODR_200HZ: + st_delay_ms = 20; + case ADXL367_ODR_400HZ: + st_delay_ms = 10; + default: + return -EINVAL; + } + ret = adxl367_set_op_mode(dev, ADXL367_MEASURE); if (ret != 0) { return ret; @@ -291,8 +312,8 @@ int adxl367_self_test(const struct device *dev) return ret; } - /* 4 / default ODR = 40ms */ - k_sleep(K_MSEC(40)); + /* 4 / ODR */ + k_sleep(K_MSEC(st_delay_ms)); ret = data->hw_tf->read_reg_multiple(dev, ADXL367_X_DATA_H, read_val, 2); if (ret != 0) { @@ -313,8 +334,8 @@ int adxl367_self_test(const struct device *dev) return ret; } - /* 4 / default ODR = 40ms */ - k_sleep(K_MSEC(40)); + /* 4 / ODR */ + k_sleep(K_MSEC(st_delay_ms)); ret = data->hw_tf->read_reg_multiple(dev, ADXL367_X_DATA_H, read_val, 2); if (ret != 0) {