On Fri, 17 Feb 2023 15:34:04 +0000 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. > > Reviewed-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> > Reviewed-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> > Signed-off-by: Aidan MacDonald <aidanmacdonald.0x0@xxxxxxxxx> > --- > This is a resend of a preparatory patch from a larger series adding support > for the AXP192 PMIC[1]. Since I don't think there's much hope of getting it > merged in one development cycle, there's no point letting these cleanups sit > around unapplied -- apply them whenever convienient! > > [1] https://lore.kernel.org/all/20221016234335.904212-1-aidanmacdonald.0x0@xxxxxxxxx/ Both applied to the togreg branch of iio.git, however we are to late to hit this cycle, so these are queued up for next one and I'll only push them out as testing until I can rebase on rc1. Thanks, Jonathan > > --- > 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;