Hello, I have some questions inline before sending out a new patch. .... >> +struct ad7779_state { >> + struct spi_device *spi; >> + const struct ad7779_chip_info *chip_info; >> + struct clk *mclk; >> + struct iio_trigger *trig; >> + struct completion completion; >> + unsigned int sampling_freq; >> + enum ad7779_filter filter_enabled; >> + /* >> + * DMA (thus cache coherency maintenance) requires the >> + * transfer buffers to live in their own cache lines. >> + */ >> + struct { >> + u32 chans[8]; >> + s64 timestamp; > > aligned_s64 timestamp; > >while it makes no difference in this case, this makes code aligned inside the IIO subsystem. I might be missing something but I can't find the aligned_s64 data type, should I define it myself in the driver? > >> + } data __aligned(IIO_DMA_MINALIGN); > >Note, this is different alignment to the above. And isn't the buffer below should have it instead? > >> + u32 spidata_tx[8]; >> + u8 reg_rx_buf[3]; >> + u8 reg_tx_buf[3]; >> + u8 reset_buf[8]; >> +}; > >.... > >> +static int ad7779_write_raw(struct iio_dev *indio_dev, >> + struct iio_chan_spec const *chan, int val, int val2, >> + long mask) > >long? Not unsigned long? I copied the function header directly from iio.h, shouldn't it be left as such? > >> +{ >> + struct ad7779_state *st = iio_priv(indio_dev); >> + >> + iio_device_claim_direct_scoped(return -EBUSY, indio_dev) { >> + switch (mask) { >> + case IIO_CHAN_INFO_CALIBSCALE: >> + return ad7779_set_calibscale(st, chan->channel, val2); >> + case IIO_CHAN_INFO_CALIBBIAS: >> + return ad7779_set_calibbias(st, chan->channel, val); >> + case IIO_CHAN_INFO_SAMP_FREQ: >> + return ad7779_set_sampling_frequency(st, val); >> + default: >> + return -EINVAL; >> + } >> + } >> + unreachable(); >> +} > >... > >> +static irqreturn_t ad7779_trigger_handler(int irq, void *p) { >> + struct iio_poll_func *pf = p; >> + struct iio_dev *indio_dev = pf->indio_dev; >> + struct ad7779_state *st = iio_priv(indio_dev); >> + int ret; > >... > Thank you! Best Regards, Ramona