Add driver logic and documentation for the oversampling feature of the AD469x parts from Analog Devices. For now, this only works with offload support, and takes advantage of that mode's higher performance to make oversampling possible on multiple channels with varying sampling frequencies. Some significant rework of the driver had to be done in order to conditionally support this feature, including use of iio_scan_types to help determine the appropriate spi message configurations depending on oversampling ratio. A dilemma that came up during development of this feature was whether or not the implementation of oversampling ratios against sampling frequency was actually correct. More specifically, it's unclear if the sampling frequency attribute is supposed to be the conversion rate or the data read rate (according to the IIO subsystem). If it's the former, then this implementation is probably incorrect. David Lechner pointed out during review that it would be easier if it were defined as the conversion rate and that it was userspace's responsibility to handle oversampling ratio, but that might also require more work in the IIO subsystem. Two other ADC drivers that were referenced for inspiration when working through this were the ad7380 and the rtq6056. The ad7380 has a global oversampling setting rather than per-channel, and the rtq6056 seems at least partially broken because it only takes oversampling ratio into account when getting the sampling frequency (but not when setting it). Instead of per-driver implementation, these three drivers might serve as inspiration for changes to how oversampling is handled in IIO? This series depends on David's recent SPI engine changes for adding offload support: https://lore.kernel.org/all/20241211-dlech-mainline-spi-engine-offload-2-v6-0-88ee574d5d03@xxxxxxxxxxxx/ Signed-off-by: Trevor Gamblin <tgamblin@xxxxxxxxxxxx> --- Trevor Gamblin (2): iio: adc: ad4695: add offload-based oversampling support doc: iio: ad4695: describe oversampling support Documentation/iio/ad4695.rst | 36 ++++- drivers/iio/adc/ad4695.c | 378 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 383 insertions(+), 31 deletions(-) --- base-commit: 0c6c3bf84f541fb4ec7097baf9eac10136f98c62 change-id: 20241217-ad4695-oversampling-2946fbe3aff3 Best regards, -- Trevor Gamblin <tgamblin@xxxxxxxxxxxx>