]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
iio: adc: ad7380: fix SPI offload trigger rate
authorDavid Lechner <dlechner@baylibre.com>
Fri, 19 Sep 2025 20:50:34 +0000 (15:50 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 6 Dec 2025 21:27:35 +0000 (06:27 +0900)
commit 632757312d7eb320b66ca60e0cfe098ec53cee08 upstream.

Add a special case to double the SPI offload trigger rate when all
channels of a single-ended chip are enabled in a buffered read.

The single-ended chips in the AD738x family can only do simultaneous
sampling of half their channels and have a multiplexer to allow reading
the other half. To comply with the IIO definition of sampling_frequency,
we need to trigger twice as often when the sequencer is enabled to so
that both banks can be read in a single sample period.

Fixes: bbeaec81a03e ("iio: ad7380: add support for SPI offload")
Signed-off-by: David Lechner <dlechner@baylibre.com>
Cc: <Stable@vger.kernel.org>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/iio/adc/ad7380.c

index fa251dc1aae6ab0a0d36792fa37b2cc22b99dfe6..bfd908deefc0f40b42bd8a44bfce7a2510b2fdf1 100644 (file)
@@ -1227,6 +1227,14 @@ static int ad7380_offload_buffer_postenable(struct iio_dev *indio_dev)
        if (ret)
                return ret;
 
+       /*
+        * When the sequencer is required to read all channels, we need to
+        * trigger twice per sample period in order to read one complete set
+        * of samples.
+        */
+       if (st->seq)
+               config.periodic.frequency_hz *= 2;
+
        ret = spi_offload_trigger_enable(st->offload, st->offload_trigger, &config);
        if (ret)
                spi_unoptimize_message(&st->offload_msg);