]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
board: sam9x60-curiosity: Let LED subsystem init leds if enabled
authorAlexander Dahl <ada@thorsis.com>
Wed, 23 Aug 2023 13:58:55 +0000 (15:58 +0200)
committerEugen Hristev <eugen.hristev@collabora.com>
Tue, 29 Aug 2023 14:39:01 +0000 (17:39 +0300)
If CONFIG_LED and CONFIG_LED_GPIO are enabled, it is not necessary to
initialize the RGB LED on the board by manually setting hardcoded GPIOs
anymore.  Everything is well defined in dts and can be used like on
boards of other vendors.

Keep the old behaviour as fallback, though.

With all this in place enabling CONFIG_CMD_LED gives us a working 'led'
command on the U-Boot shell.

Signed-off-by: Alexander Dahl <ada@thorsis.com>
arch/arm/dts/at91-sam9x60_curiosity-u-boot.dtsi
board/atmel/sam9x60_curiosity/sam9x60_curiosity.c

index a1b76e94d11fad2897904042a6772ca004453365..dd4623311c9df6004c1715d406d3873bbcc254b5 100644 (file)
        chosen {
                bootph-all;
        };
+
+       config {
+               u-boot,boot-led = "blue";
+       };
+
+       leds {
+               led-red {
+                       default-state = "off";
+               };
+
+               led-green {
+                       default-state = "off";
+               };
+
+               led-blue {
+                       default-state = "off";
+               };
+       };
 };
 
 &clk32 {
index 0fe0de9fde93bce02205523f5394d06205bbeff7..f53d359404ef2763d1d51a1a7da8e987a3399268 100644 (file)
@@ -9,6 +9,7 @@
 #include <debug_uart.h>
 #include <fdtdec.h>
 #include <init.h>
+#include <led.h>
 #include <asm/arch/at91_common.h>
 #include <asm/arch/at91_rstc.h>
 #include <asm/arch/at91_sfr.h>
@@ -18,6 +19,7 @@
 #include <asm/global_data.h>
 #include <asm/io.h>
 #include <asm/mach-types.h>
+#include <dm/ofnode.h>
 
 extern void at91_pda_detect(void);
 
@@ -27,9 +29,25 @@ void at91_prepare_cpu_var(void);
 
 static void board_leds_init(void)
 {
+#if CONFIG_IS_ENABLED(LED)
+       const char *led_name;
+       struct udevice *dev;
+       int ret;
+
+       led_name = ofnode_conf_read_str("u-boot,boot-led");
+       if (!led_name)
+               return;
+
+       ret = led_get_by_label(led_name, &dev);
+       if (ret)
+               return;
+
+       led_set_state(dev, LEDST_ON);
+#else
        at91_set_pio_output(AT91_PIO_PORTD, 17, 0);     /* LED RED */
        at91_set_pio_output(AT91_PIO_PORTD, 19, 0);     /* LED GREEN */
        at91_set_pio_output(AT91_PIO_PORTD, 21, 1);     /* LED BLUE */
+#endif
 }
 
 int board_late_init(void)