From 99a3a8e72bf5ddd3f0c64ab3874e362f52d94618 Mon Sep 17 00:00:00 2001 From: Mayank Narang Date: Tue, 21 Jan 2025 23:51:32 +0530 Subject: [PATCH] drivers: sensor: lis2de12: fix read accel via spi The lis2de12 sensor driver spi interface was calling spi read api. This leads to a single byte operation on reading acceleration data which is a multi byte operation. Fix it by adding a call to spi read incr api instead. Added a length check to handle both single and multi byte read properly. Signed-off-by: Mayank Narang (cherry picked from commit 7b062f5b0916ebc32e9ec64147a07198d5246223) --- drivers/sensor/st/lis2de12/lis2de12.c | 2 +- drivers/sensor/st/stmemsc/stmemsc_spi.c | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/sensor/st/lis2de12/lis2de12.c b/drivers/sensor/st/lis2de12/lis2de12.c index 9cceccdeb206..b417bccda393 100644 --- a/drivers/sensor/st/lis2de12/lis2de12.c +++ b/drivers/sensor/st/lis2de12/lis2de12.c @@ -435,7 +435,7 @@ static int lis2de12_init(const struct device *dev) #define LIS2DE12_CONFIG_SPI(inst) \ { \ - STMEMSC_CTX_SPI(&lis2de12_config_##inst.stmemsc_cfg), \ + STMEMSC_CTX_SPI_INCR(&lis2de12_config_##inst.stmemsc_cfg), \ .stmemsc_cfg = { \ .spi = SPI_DT_SPEC_INST_GET(inst, LIS2DE12_SPI_OP, 0), \ }, \ diff --git a/drivers/sensor/st/stmemsc/stmemsc_spi.c b/drivers/sensor/st/stmemsc/stmemsc_spi.c index 3d728c78d8b1..568c3a84aae5 100644 --- a/drivers/sensor/st/stmemsc/stmemsc_spi.c +++ b/drivers/sensor/st/stmemsc/stmemsc_spi.c @@ -63,7 +63,10 @@ int stmemsc_spi_write(const struct spi_dt_spec *stmemsc, int stmemsc_spi_read_incr(const struct spi_dt_spec *stmemsc, uint8_t reg_addr, uint8_t *value, uint8_t len) { - reg_addr |= STMEMSC_SPI_ADDR_AUTO_INCR; + if (len > 1) { + reg_addr |= STMEMSC_SPI_ADDR_AUTO_INCR; + } + return stmemsc_spi_read(stmemsc, reg_addr, value, len); }