Message ID | 20220629143046.213584-10-aidanmacdonald.0x0@gmail.com (mailing list archive) |
---|---|
State | Handled Elsewhere |
Headers | show |
Series | Add support for AXP192 PMIC | expand |
On Wed, Jun 29, 2022 at 4:30 PM Aidan MacDonald <aidanmacdonald.0x0@gmail.com> 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@gmail.com> > Signed-off-by: Aidan MacDonald <aidanmacdonald.0x0@gmail.com> > --- > 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; > -- > 2.35.1 >
On Wed, 29 Jun 2022 15:30:40 +0100 Aidan MacDonald <aidanmacdonald.0x0@gmail.com> 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@gmail.com> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- > 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;
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;
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@gmail.com> --- drivers/iio/adc/axp20x_adc.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-)