Skip to content

Commit f711f28

Browse files
Fabrice Gasnierjic23
authored andcommitted
iio: adc: stm32: fix a current leak by resetting pcsel before disabling vdda
Some I/Os are connected to ADC input channels, when the corresponding bit in PCSEL register are set on STM32H7 and STM32MP15. This is done in the prepare routine of stm32-adc driver. There are constraints here, as PCSEL shouldn't be set when VDDA supply is disabled. Enabling/disabling of VDDA supply in done via stm32-adc-core runtime PM routines (before/after ADC is enabled/disabled). Currently, PCSEL remains set when disabling ADC. Later on, PM runtime can disable the VDDA supply. This creates some conditions on I/Os that can start to leak current. So PCSEL needs to be cleared when disabling the ADC. Fixes: 95e339b ("iio: adc: stm32: add support for STM32H7") Signed-off-by: Fabrice Gasnier <[email protected]> Reviewed-by: Olivier Moysan <[email protected]> Link: https://lore.kernel.org/r/[email protected] Cc: <[email protected]> Signed-off-by: Jonathan Cameron <[email protected]>
1 parent cd00822 commit f711f28

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

drivers/iio/adc/stm32-adc.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,6 +1117,7 @@ static void stm32h7_adc_unprepare(struct iio_dev *indio_dev)
11171117
{
11181118
struct stm32_adc *adc = iio_priv(indio_dev);
11191119

1120+
stm32_adc_writel(adc, STM32H7_ADC_PCSEL, 0);
11201121
stm32h7_adc_disable(indio_dev);
11211122
stm32_adc_int_ch_disable(adc);
11221123
stm32h7_adc_enter_pwr_down(adc);

0 commit comments

Comments
 (0)