On Fri, 7 Feb 2025 16:09:16 +0200 Antoniu Miclaus <antoniu.miclaus@xxxxxxxxxx> wrote: > Add support for enabling/disabling oversampling. > > Signed-off-by: Antoniu Miclaus <antoniu.miclaus@xxxxxxxxxx> > --- > no changes in v12. > drivers/iio/adc/adi-axi-adc.c | 24 ++++++++++++++++++++++++ > 1 file changed, 24 insertions(+) > > diff --git a/drivers/iio/adc/adi-axi-adc.c b/drivers/iio/adc/adi-axi-adc.c > index 272d82c6e887..872ff51e08a7 100644 > --- a/drivers/iio/adc/adi-axi-adc.c > +++ b/drivers/iio/adc/adi-axi-adc.c > @@ -46,6 +46,7 @@ > #define ADI_AXI_ADC_CTRL_DDR_EDGESEL_MASK BIT(1) > > #define ADI_AXI_ADC_REG_CNTRL_3 0x004c > +#define AD485X_CNTRL_3_OS_EN_MSK BIT(2) > #define AD485X_CNTRL_3_PACKET_FORMAT_MSK GENMASK(1, 0) > #define AD485X_PACKET_FORMAT_20BIT 0x0 > #define AD485X_PACKET_FORMAT_24BIT 0x1 > @@ -363,6 +364,28 @@ static int axi_adc_data_size_set(struct iio_backend *back, unsigned int size) > FIELD_PREP(AD485X_CNTRL_3_PACKET_FORMAT_MSK, val)); > } > > +static int axi_adc_oversampling_ratio_set(struct iio_backend *back, Same thing David pointed out in previous patch applies here. axi_adc_ad4851_oversampling_ration_set() or something like that. > + unsigned int ratio) > +{ > + struct adi_axi_adc_state *st = iio_backend_get_priv(back); > + > + /* The current state of the function enables or disables the > + * oversampling in REG_CNTRL_3 register. A ratio equal to 1 implies no > + * oversampling, while a value greater than 1 implies oversampling being > + * enabled. > + */ > + switch (ratio) { > + case 0: > + return -EINVAL; > + case 1: > + return regmap_clear_bits(st->regmap, ADI_AXI_ADC_REG_CNTRL_3, > + AD485X_CNTRL_3_OS_EN_MSK); > + default: > + return regmap_set_bits(st->regmap, ADI_AXI_ADC_REG_CNTRL_3, > + AD485X_CNTRL_3_OS_EN_MSK); > + } > +} > + > static struct iio_buffer *axi_adc_request_buffer(struct iio_backend *back, > struct iio_dev *indio_dev) > { > @@ -428,6 +451,7 @@ static const struct iio_backend_ops adi_ad485x_ops = { > .chan_status = axi_adc_chan_status, > .interface_type_get = axi_adc_interface_type_get, > .data_size_set = axi_adc_data_size_set, > + .oversampling_ratio_set = axi_adc_oversampling_ratio_set, > .debugfs_reg_access = iio_backend_debugfs_ptr(axi_adc_reg_access), > .debugfs_print_chan_status = iio_backend_debugfs_ptr(axi_adc_debugfs_print_chan_status), > };