[PATCH v2 06/14] iio: adc: stm32-adc: add vreg enable option to manage diversity
flat view
COOLING7d
From: Fabrice Gasnier <fabrice.gasnier@foss.st.com>
Date: 2026-09-23 15:39:56
Also in:
linux-devicetree, linux-iio, lkml
Subsystem:
iio subsystem and drivers, the rest · Maintainers:
Jonathan Cameron, Linus Torvalds
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 <redacted> Signed-off-by: Cheick Traore <redacted> Signed-off-by: Fabrice Gasnier <fabrice.gasnier@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