From a7c889ecd52ea354ec585a1b8c473c30dc830081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Stasiak?= Date: Thu, 11 Jul 2024 07:54:12 +0200 Subject: [PATCH] drivers: sensor: qdec: fix QDEC overflow handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QDEC sensor driver fails to inform user of the overflow in the ACC register, which makes the most recently fetched data invalid. An error code return has been added to nrfx_qdec_sample_fetch(), that indicates that an overflow has occured, based on oveflow flag. Also, raw_acc field was added in the qdec_nrfx_data structure, to adjust QDEC to sensor API rules - two subsequent sensor_channel_get() calls should will yield the same values. Signed-off-by: MichaƂ Stasiak --- drivers/sensor/nordic/qdec_nrfx/qdec_nrfx.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/drivers/sensor/nordic/qdec_nrfx/qdec_nrfx.c b/drivers/sensor/nordic/qdec_nrfx/qdec_nrfx.c index 7c7b913d41e7346..4878925f390a7af 100644 --- a/drivers/sensor/nordic/qdec_nrfx/qdec_nrfx.c +++ b/drivers/sensor/nordic/qdec_nrfx/qdec_nrfx.c @@ -24,9 +24,6 @@ LOG_MODULE_REGISTER(qdec_nrfx, CONFIG_SENSOR_LOG_LEVEL); #define ACC_MAX (INT_MAX / FULL_ANGLE) #define ACC_MIN (INT_MIN / FULL_ANGLE) -#define ACC_REG_MAX 1023 -#define ACC_REG_MIN -1024 - struct qdec_nrfx_data { int32_t raw_acc; @@ -60,7 +57,7 @@ static void accumulate(struct qdec_nrfx_data *data, int32_t acc) } static int qdec_nrfx_sample_fetch(const struct device *dev, - enum sensor_channel chan) + enum sensor_channel chan) { const struct qdec_nrfx_config *config = dev->config; struct qdec_nrfx_data *data = dev->data; @@ -73,6 +70,7 @@ static int qdec_nrfx_sample_fetch(const struct device *dev, if (data->overflow) { data->overflow = 0; + data->raw_acc = 0; return -EOVERFLOW; } @@ -101,7 +99,6 @@ static int qdec_nrfx_channel_get(const struct device *dev, key = irq_lock(); acc = data->acc; - //data->acc = 0; irq_unlock(key); val->val1 = (acc * FULL_ANGLE) / config->steps;