[PATCH v2 06/14] iio: adc: stm32-adc: add vreg enable option to manage diversity
Fabrice Gasnier
fabrice.gasnier at foss.st.com
Wed Sep 23 08:39:09 PDT 2026
Add a boolean (has_vregen) in adc configuration structure to prevent
setting the reserved bit (CR_ADVREGEN bit 28) on STM32MP2 SoCs.
This bit is present on earlier stm32h7, stm32mp13 and stm32mp15.
No functional change intended.
Co-developed-by: Cheick Traore <cheick.traore-ext at st.com>
Signed-off-by: Cheick Traore <cheick.traore-ext at st.com>
Signed-off-by: Fabrice Gasnier <fabrice.gasnier at foss.st.com>
---
Changes in v2:
- new precursor patch, e.g. split as suggested by Andy and Jonathan, to
prepare the infrastructure for stm32mp23/25 support.
---
drivers/iio/adc/stm32-adc.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/iio/adc/stm32-adc.c b/drivers/iio/adc/stm32-adc.c
index ac60c31de7a5..eecdc4cce1b4 100644
--- a/drivers/iio/adc/stm32-adc.c
+++ b/drivers/iio/adc/stm32-adc.c
@@ -193,6 +193,7 @@ struct stm32_adc;
* @has_linearcal: linear calibration support flag
* @has_presel: channel preselection support flag
* @has_oversampling: oversampling support flag
+ * @has_vregen: voltage regulator enable/disable flag
* @prepare: optional prepare routine (power-up, enable)
* @start_conv: routine to start conversions
* @stop_conv: routine to stop conversions
@@ -213,6 +214,7 @@ struct stm32_adc_cfg {
bool has_linearcal;
bool has_presel;
bool has_oversampling;
+ bool has_vregen;
int (*prepare)(struct iio_dev *);
void (*start_conv)(struct iio_dev *, bool dma);
void (*stop_conv)(struct iio_dev *);
@@ -961,7 +963,8 @@ static int stm32h7_adc_exit_pwr_down(struct iio_dev *indio_dev)
/* Exit deep power down, then enable ADC voltage regulator */
stm32_adc_clr_bits(adc, STM32H7_ADC_CR, STM32H7_DEEPPWD);
- stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADVREGEN);
+ if (adc->cfg->has_vregen)
+ stm32_adc_set_bits(adc, STM32H7_ADC_CR, STM32H7_ADVREGEN);
if (adc->cfg->has_boostmode &&
adc->common->rate > STM32H7_BOOST_CLKRATE)
@@ -2719,6 +2722,7 @@ static const struct stm32_adc_cfg stm32h7_adc_cfg = {
.has_linearcal = true,
.has_presel = true,
.has_oversampling = true,
+ .has_vregen = true,
.start_conv = stm32h7_adc_start_conv,
.stop_conv = stm32h7_adc_stop_conv,
.prepare = stm32h7_adc_prepare,
@@ -2745,6 +2749,7 @@ static const struct stm32_adc_cfg stm32mp1_adc_cfg = {
.has_linearcal = true,
.has_presel = true,
.has_oversampling = true,
+ .has_vregen = true,
.start_conv = stm32h7_adc_start_conv,
.stop_conv = stm32h7_adc_stop_conv,
.prepare = stm32h7_adc_prepare,
@@ -2769,6 +2774,7 @@ static const struct stm32_adc_cfg stm32mp13_adc_cfg = {
.adc_info = &stm32mp13_adc_info,
.trigs = stm32h7_adc_trigs,
.has_oversampling = true,
+ .has_vregen = true,
.start_conv = stm32mp13_adc_start_conv,
.stop_conv = stm32h7_adc_stop_conv,
.prepare = stm32h7_adc_prepare,
--
2.43.0
More information about the linux-arm-kernel
mailing list