]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
sunxi: Properly check for SATAPWR and MACPWR
authorAndre Przywara <andre.przywara@arm.com>
Mon, 18 Jan 2021 23:23:59 +0000 (23:23 +0000)
committerAndre Przywara <andre.przywara@arm.com>
Mon, 25 Jan 2021 21:52:00 +0000 (21:52 +0000)
The #ifdef CONFIG_xxxPWR conditionals were not working as expected, as
string Kconfig symbols are always "defined" from the preprocessor's
perspective. This lead to unnecessary calls to the GPIO routines, but
also always added a half a second delay to wait for a SATA disk to power
up. Many thanks to Peter for pointing this out!

Fix this by properly comparing the Kconfig symbols against the empty
string. strcmp() would be nicer for this, but GCC does not optimise this
away, probably due to our standalone compiler switches.

Reported-by: Peter Robinson <pbrobinson@gmail.com>
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Tested-by: Samuel Holland <samuel@sholland.org> # Orange Pi WinPlus
Tested-by: Peter Robinson <pbrobinson@gmail.com>
Reviewed-by: Jernej Skrabec <jernej.skrabec@siol.net>
board/sunxi/board.c

index 4f058952b5b09afdb1b52a985f83dd813c2e0830..a0b5778b3bc5943543e97cdbee149b9dee37fb1f 100644 (file)
@@ -265,18 +265,28 @@ int board_init(void)
        if (ret)
                return ret;
 
-#ifdef CONFIG_SATAPWR
-       satapwr_pin = sunxi_name_to_gpio(CONFIG_SATAPWR);
-       gpio_request(satapwr_pin, "satapwr");
-       gpio_direction_output(satapwr_pin, 1);
-       /* Give attached sata device time to power-up to avoid link timeouts */
-       mdelay(500);
-#endif
-#ifdef CONFIG_MACPWR
-       macpwr_pin = sunxi_name_to_gpio(CONFIG_MACPWR);
-       gpio_request(macpwr_pin, "macpwr");
-       gpio_direction_output(macpwr_pin, 1);
-#endif
+       /* strcmp() would look better, but doesn't get optimised away. */
+       if (CONFIG_SATAPWR[0]) {
+               satapwr_pin = sunxi_name_to_gpio(CONFIG_SATAPWR);
+               if (satapwr_pin >= 0) {
+                       gpio_request(satapwr_pin, "satapwr");
+                       gpio_direction_output(satapwr_pin, 1);
+
+                       /*
+                        * Give the attached SATA device time to power-up
+                        * to avoid link timeouts
+                        */
+                       mdelay(500);
+               }
+       }
+
+       if (CONFIG_MACPWR[0]) {
+               macpwr_pin = sunxi_name_to_gpio(CONFIG_MACPWR);
+               if (macpwr_pin >= 0) {
+                       gpio_request(macpwr_pin, "macpwr");
+                       gpio_direction_output(macpwr_pin, 1);
+               }
+       }
 
 #ifdef CONFIG_DM_I2C
        /*