summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrice Chotard <[email protected]>2026-04-14 11:06:50 +0200
committerPatrice Chotard <[email protected]>2026-04-30 08:01:11 +0200
commitecde6614bc6a08fca7582aa6d0674f75da946521 (patch)
tree7b7825e8594711c4fa070a68fc25d6d8c055d1d3
parent4433253ecf2041f9362a763bb6cb79960921ac7e (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.c7
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;