From fe5bfc9eb2386c1a0ca94ece32163417b6d898af Mon Sep 17 00:00:00 2001 From: Vladislav Pejic Date: Fri, 27 Sep 2024 12:12:42 +0200 Subject: [PATCH] driver: sensor: adxl372: Bug fix for status2 reg This is a bug fix for adxl372_get_status function. This function is used to get STATUS1, STATUS2, FIFO_ENTRIES2 and FIFO_ENTRIES1 registers (they are continuously present in the memory in this order). User can choose if it wants STATUS2 and/or FIFO registers by passing pointers where to store received values. Bug was when user doesn't want STATUS2 and want FIFO regs. In that case calculated length would be 3 which will result in reading of STATUS1, STATUS2 and FIFO_ENTRIES2 regs and not expected STATUS1, FIFO_ENTRIES2 and FIFO_ENTRIES1. Signed-off-by: Vladislav Pejic --- drivers/sensor/adi/adxl372/adxl372.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/drivers/sensor/adi/adxl372/adxl372.c b/drivers/sensor/adi/adxl372/adxl372.c index 032a7c6e8ae..8eef0160839 100644 --- a/drivers/sensor/adi/adxl372/adxl372.c +++ b/drivers/sensor/adi/adxl372/adxl372.c @@ -364,7 +364,16 @@ int adxl372_get_status(const struct device *dev, } if (fifo_entries) { - length += 2U; + if (status2) { + length += 2U; + } else { + /* Registers STATUS1, STATUS2, FIFO_ENTRIES2 and FIFO_ENTRIES1 + * are one after the other. If user wants fifo_entries and + * not status2, to get the correct values, STATUS2 register + * also must be read but read value will be ignored. + */ + length += 3U; + } } ret = data->hw_tf->read_reg_multiple(dev, ADXL372_STATUS_1, buf, length);