Re: [PATCH v2 4/4] iio: adc: ad7768-1: add support for SPI offload
From: Jonathan Cameron
Date: Sat Feb 28 2026 - 16:39:21 EST
On Mon, 23 Feb 2026 15:46:24 +0200
Andy Shevchenko <andriy.shevchenko@xxxxxxxxx> wrote:
> On Mon, Feb 23, 2026 at 08:59:53AM -0300, Jonathan Santos wrote:
> > The AD7768-1 family supports sampling rates up to 1 MSPS, which exceeds
> > the capabilities of conventional triggered buffer operations due to SPI
> > transaction overhead and interrupt latency.
> >
> > Add SPI offload support to enable hardware-accelerated data acquisition
> > that bypasses software SPI transactions using continuous data streaming.
>
> ...
>
> > +static int ad7768_spi_offload_probe(struct iio_dev *indio_dev,
> > + struct ad7768_state *st)
> > +{
> > + struct device *dev = &st->spi->dev;
> > + struct spi_offload_trigger_info trigger_info = {
> > + .fwnode = dev_fwnode(dev),
> > + .ops = &ad7768_offload_trigger_ops,
> > + .priv = st,
> > + };
> > + struct dma_chan *rx_dma;
> > + int ret;
> > +
> > + ret = devm_spi_offload_trigger_register(dev, &trigger_info);
> > + if (ret)
> > + return dev_err_probe(dev, ret, "failed to register offload trigger\n");
>
> Double space...
> (do not resend just for addressing this)
Tidied up.
Series applied to the togreg branch of iio.git and for now pushed out as testing
Thanks!
Jonathan
>
> > + st->offload_trigger = devm_spi_offload_trigger_get(dev, st->offload,
> > + SPI_OFFLOAD_TRIGGER_DATA_READY);
> > + if (IS_ERR(st->offload_trigger))
> > + return dev_err_probe(dev, PTR_ERR(st->offload_trigger),
> > + "failed to get offload trigger\n");
> > +
> > + rx_dma = devm_spi_offload_rx_stream_request_dma_chan(dev, st->offload);
> > + if (IS_ERR(rx_dma))
> > + return dev_err_probe(dev, PTR_ERR(rx_dma), "failed to get offload RX DMA\n");
> > +
> > + ret = devm_iio_dmaengine_buffer_setup_with_handle(dev, indio_dev, rx_dma,
> > + IIO_BUFFER_DIRECTION_IN);
> > + if (ret)
> > + return dev_err_probe(dev, ret, "failed to setup offload RX DMA\n");
> > +
> > + indio_dev->setup_ops = &ad7768_offload_buffer_ops;
> > +
> > + return 0;
> > +}
>