On Wed, 29 Jun 2022 15:30:40 +0100 Aidan MacDonald <aidanmacdonald.0x0@xxxxxxxxx> wrote: > The adc_en2 flag is essentially specific to axp20x-compatible devices > because it hardcodes register values. Replace it with a mask field > so the register value can be specified in device match data. > > Signed-off-by: Aidan MacDonald <aidanmacdonald.0x0@xxxxxxxxx> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> > --- > drivers/iio/adc/axp20x_adc.c | 16 +++++++--------- > 1 file changed, 7 insertions(+), 9 deletions(-) > > diff --git a/drivers/iio/adc/axp20x_adc.c b/drivers/iio/adc/axp20x_adc.c > index ab25e6e1ff65..75bda94dbce1 100644 > --- a/drivers/iio/adc/axp20x_adc.c > +++ b/drivers/iio/adc/axp20x_adc.c > @@ -623,9 +623,9 @@ struct axp_data { > int num_channels; > struct iio_chan_spec const *channels; > unsigned long adc_en1_mask; > + unsigned long adc_en2_mask; > int (*adc_rate)(struct axp20x_adc_iio *info, > int rate); > - bool adc_en2; > struct iio_map *maps; > }; > > @@ -634,8 +634,8 @@ static const struct axp_data axp20x_data = { > .num_channels = ARRAY_SIZE(axp20x_adc_channels), > .channels = axp20x_adc_channels, > .adc_en1_mask = AXP20X_ADC_EN1_MASK, > + .adc_en2_mask = AXP20X_ADC_EN2_MASK, > .adc_rate = axp20x_adc_rate, > - .adc_en2 = true, > .maps = axp20x_maps, > }; > > @@ -645,7 +645,6 @@ static const struct axp_data axp22x_data = { > .channels = axp22x_adc_channels, > .adc_en1_mask = AXP22X_ADC_EN1_MASK, > .adc_rate = axp22x_adc_rate, > - .adc_en2 = false, > .maps = axp22x_maps, > }; > > @@ -655,7 +654,6 @@ static const struct axp_data axp813_data = { > .channels = axp813_adc_channels, > .adc_en1_mask = AXP22X_ADC_EN1_MASK, > .adc_rate = axp813_adc_rate, > - .adc_en2 = false, > .maps = axp22x_maps, > }; > > @@ -713,10 +711,10 @@ static int axp20x_probe(struct platform_device *pdev) > /* Enable the ADCs on IP */ > regmap_write(info->regmap, AXP20X_ADC_EN1, info->data->adc_en1_mask); > > - if (info->data->adc_en2) > - /* Enable GPIO0/1 and internal temperature ADCs */ > + if (info->data->adc_en2_mask) > regmap_update_bits(info->regmap, AXP20X_ADC_EN2, > - AXP20X_ADC_EN2_MASK, AXP20X_ADC_EN2_MASK); > + info->data->adc_en2_mask, > + info->data->adc_en2_mask); > > /* Configure ADCs rate */ > info->data->adc_rate(info, 100); > @@ -741,7 +739,7 @@ static int axp20x_probe(struct platform_device *pdev) > fail_map: > regmap_write(info->regmap, AXP20X_ADC_EN1, 0); > > - if (info->data->adc_en2) > + if (info->data->adc_en2_mask) > regmap_write(info->regmap, AXP20X_ADC_EN2, 0); > > return ret; > @@ -757,7 +755,7 @@ static int axp20x_remove(struct platform_device *pdev) > > regmap_write(info->regmap, AXP20X_ADC_EN1, 0); > > - if (info->data->adc_en2) > + if (info->data->adc_en2_mask) > regmap_write(info->regmap, AXP20X_ADC_EN2, 0); > > return 0;