diff options
| author | Patrice Chotard <[email protected]> | 2026-04-14 11:06:50 +0200 |
|---|---|---|
| committer | Patrice Chotard <[email protected]> | 2026-04-30 08:01:11 +0200 |
| commit | ecde6614bc6a08fca7582aa6d0674f75da946521 (patch) | |
| tree | 7b7825e8594711c4fa070a68fc25d6d8c055d1d3 | |
| parent | 4433253ecf2041f9362a763bb6cb79960921ac7e (diff) | |
board: stm32pm1: Fix board_check_usb_power()
Depending of plugged power source (computer, wall charger, ...) it can
happen that we got the following message:
"****************************************************"
"* USB TYPE-C charger not compliant with *"
"* specification *"
"****************************************************"
" "
"### ERROR ### Please RESET the board ### "
This issue has been detected on STM32MP135f-DK board.
It's due to max_uV and min_uV value are initialized at beginning of
board_check_usb_power() and can then be used for the 2 iteration of
adc_measurement().
max_uV/min_uV values issued of the first adc_measurement() iteration
are used as input of the second adc_measurement() iteration, which
can lead to incoherent pair of min_uV/max_uV values.
To ensure that adc_measurement() returns coherent value for max_uV and
min_uV, initialize max_uV and min_uV at each loop start.
Signed-off-by: Patrice Chotard <[email protected]>
Reviewed-by: Kory Maincent <[email protected]>
| -rw-r--r-- | board/st/stm32mp1/stm32mp1.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/board/st/stm32mp1/stm32mp1.c b/board/st/stm32mp1/stm32mp1.c index 5f7c6822116..88ede4e3910 100644 --- a/board/st/stm32mp1/stm32mp1.c +++ b/board/st/stm32mp1/stm32mp1.c @@ -326,8 +326,8 @@ static int adc_measurement(ofnode node, int adc_count, int *min_uV, int *max_uV) static int board_check_usb_power(void) { ofnode node; - int max_uV = 0; - int min_uV = USB_START_HIGH_THRESHOLD_UV; + int max_uV; + int min_uV; int adc_count, ret; u32 nb_blink; u8 i; @@ -358,6 +358,9 @@ static int board_check_usb_power(void) /* perform maximum of 2 ADC measurements to detect power supply current */ for (i = 0; i < 2; i++) { + max_uV = 0; + min_uV = USB_START_HIGH_THRESHOLD_UV; + ret = adc_measurement(node, adc_count, &min_uV, &max_uV); if (ret) return ret; |
