summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcelo Schmitt <marcelo.schmitt@analog.com>2025-04-15 09:21:10 -0300
committerJonathan Cameron <Jonathan.Cameron@huawei.com>2025-05-21 14:20:30 +0100
commitce45446e520c85db022f8bcd7f0334b042ff3571 (patch)
treec127a4b8cfd3fff34e0a7fab344322f4ae5743f4
parentf45a27b990a14c30e4edea7f3a427b03785b22c3 (diff)
iio: adc: ad4000: Avoid potential double data word read
Currently, SPI-Engine offload module always sends 32-bit data elements to DMA engine. Appropriately, when set for SPI offloading, the IIO driver uses 32 storagebits for IIO ADC channel buffer elements. However, setting SPI transfer length according to storagebits (32-bits in case of offload) can lead to unnecessarily long transfers for ADCs that are 16-bit or less precision. Adjust AD4000 single-shot read to run transfers of 2 bytes when that is enough to get all ADC data bits. Fixes: 59b51edf717b ("iio: adc: ad4000: Add support for SPI offload") Suggested-by: David Lechner <dlechner@baylibre.com> Signed-off-by: Marcelo Schmitt <marcelo.schmitt@analog.com> Reviewed-by: David Lechner <dlechner@baylibre.com> Link: https://patch.msgid.link/8f765cfd6e93fad4e755dd95d709b7bea2a388e2.1744718916.git.marcelo.schmitt@analog.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
-rw-r--r--drivers/iio/adc/ad4000.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/iio/adc/ad4000.c b/drivers/iio/adc/ad4000.c
index 93ecaf401f27..5609a7845b6f 100644
--- a/drivers/iio/adc/ad4000.c
+++ b/drivers/iio/adc/ad4000.c
@@ -942,7 +942,7 @@ static int ad4000_prepare_3wire_mode_message(struct ad4000_state *st,
xfers[0].cs_change_delay.unit = SPI_DELAY_UNIT_NSECS;
xfers[1].rx_buf = &st->scan.data;
- xfers[1].len = BITS_TO_BYTES(chan->scan_type.storagebits);
+ xfers[1].len = chan->scan_type.realbits > 16 ? 4 : 2;
/*
* If the device is set up for SPI offloading, IIO channel scan_type is