Following up from this thread [1]... Unless I've overlooked something important, I think adding support for multiple scan types per channels should be rather trivial, at least in the kernel. Userspace tools will need to learn to re-read buffer _type attributes though. For example, it looks like libiio caches these values. I had to restart iiod to get a proper capture with the iio-oscilloscope after changing the scan type at runtime. Here is a bit of background for those not following along: Up to now, the IIO subsystem has only supported a single scan type per channel. This scan type determines the binary format of the data in the buffer when doing buffered reads. For simple devices, there is only one scan type and all is well. But for more complex devices, there may be multiple scan types. For example, ADCs with a resolution boost feature that adds more bits to the raw sample data. Traditionally, for slow devices, we've just always used the highest resolution mode, but for high performance ADCs, this may not be always practical. Manipulating data after every read can hurt performance and in the case of hardware buffers, it may not be possible to change the format of the data in the buffer at all. There are also ADCs where enabling the higher resolution can only be done if oversampling is also enabled which may not be desireable. To allow for more flexibility, we would like to add support for multiple scan types per channel. To avoid having to touch every driver, we implemented this in a way that preserves the existing scan_type field. See the "iio: add support for multiple scan types per channel" the details. The first couple of patches are just preparation for this. The last patch shows how to use this new feature in the ad7380 driver which is still under review at [2]. [1]: https://lore.kernel.org/linux-iio/CAMknhBHOXaff__QyU-wFSNNENvs23vDX5n_ddH-Dw3s6-sQ9sg@xxxxxxxxxxxxxx/ [2]: https://lore.kernel.org/linux-iio/20240501-adding-new-ad738x-driver-v6-0-3c0741154728@xxxxxxxxxxxx/T/#t --- David Lechner (4): iio: introduce struct iio_scan_type iio: buffer: use struct iio_scan_type to simplify code iio: add support for multiple scan types per channel iio: adc: ad7380: add support for multiple scan type drivers/iio/adc/ad7380.c | 185 ++++++++++++++++++-------------------- drivers/iio/industrialio-buffer.c | 77 +++++++++++----- include/linux/iio/iio.h | 74 +++++++++++---- 3 files changed, 194 insertions(+), 142 deletions(-) --- base-commit: 32cf3c865729172e67dced11c0b73e658444888a change-id: 20240507-iio-add-support-for-multiple-scan-types-f4dbcf4c2cb8