stm32mp1: add pull-up for gpio button PA13 and PA14
authorPatrick Delaunay <patrick.delaunay@foss.st.com>
Fri, 9 Jul 2021 07:53:37 +0000 (09:53 +0200)
committerPatrick Delaunay <patrick.delaunay@foss.st.com>
Tue, 27 Jul 2021 07:47:40 +0000 (09:47 +0200)
When a push-button is released and PA13/PA14 are defined as input (high-Z)
the LED should not be active as the circuit is open but a small current
leak through PCB or push-button close the circuit and allows a small LED
bias giving erroneous level voltage.

So it is recommended to activate an internal pull-up in order to clearly
fix the voltage at PA13/PA14 when button is released and to wait
a short delay before to read the GPIO value only when the pull-up is
correctly configured.

Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
arch/arm/dts/stm32mp157a-dk1-u-boot.dtsi
arch/arm/dts/stm32mp157c-ed1-u-boot.dtsi
board/st/stm32mp1/stm32mp1.c

index 7dcc96c..4b37797 100644 (file)
@@ -17,8 +17,8 @@
                u-boot,error-led = "error";
                u-boot,mmc-env-partition = "ssbl";
                st,adc_usb_pd = <&adc1 18>, <&adc1 19>;
-               st,fastboot-gpios = <&gpioa 13 GPIO_ACTIVE_LOW>;
-               st,stm32prog-gpios = <&gpioa 14 GPIO_ACTIVE_LOW>;
+               st,fastboot-gpios = <&gpioa 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
+               st,stm32prog-gpios = <&gpioa 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
        };
 
        firmware {
index 46a4337..fc6066a 100644 (file)
@@ -16,8 +16,8 @@
                u-boot,boot-led = "heartbeat";
                u-boot,error-led = "error";
                u-boot,mmc-env-partition = "ssbl";
-               st,fastboot-gpios = <&gpioa 13 GPIO_ACTIVE_LOW>;
-               st,stm32prog-gpios = <&gpioa 14 GPIO_ACTIVE_LOW>;
+               st,fastboot-gpios = <&gpioa 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
+               st,stm32prog-gpios = <&gpioa 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
        };
 
        firmware {
index 2faf5c8..59fb6e5 100644 (file)
@@ -155,6 +155,7 @@ static void board_key_check(void)
                                               &gpio, GPIOD_IS_IN)) {
                        log_debug("could not find a /config/st,fastboot-gpios\n");
                } else {
+                       udelay(20);
                        if (dm_gpio_get_value(&gpio)) {
                                log_notice("Fastboot key pressed, ");
                                boot_mode = BOOT_FASTBOOT;
@@ -168,6 +169,7 @@ static void board_key_check(void)
                                               &gpio, GPIOD_IS_IN)) {
                        log_debug("could not find a /config/st,stm32prog-gpios\n");
                } else {
+                       udelay(20);
                        if (dm_gpio_get_value(&gpio)) {
                                log_notice("STM32Programmer key pressed, ");
                                boot_mode = BOOT_STM32PROG;