]> git.ipfire.org Git - people/ms/u-boot.git/commitdiff
allow LED initialization without STATUS_LED_BOOT
authorBernhard Nortmann <bernhard.nortmann@web.de>
Fri, 21 Aug 2015 13:13:21 +0000 (15:13 +0200)
committerTom Rini <trini@konsulko.com>
Sat, 24 Oct 2015 17:50:02 +0000 (13:50 -0400)
For current U-Boot to initialize status LEDs via status_led_init(), it
is required to have both CONFIG_STATUS_LED and STATUS_LED_BOOT defined.
This may be a particular concern with GPIO LEDs, where __led_init() is
required to correctly set up the GPIO (gpio_request and
gpio_direction_output). Without STATUS_LED_BOOT the initialization isn't
called, which could leave the user with a non-functional "led" command -
due to the fact that the LED routines in gpio_led.c use gpio_set_value()
just fine, but the GPIO never got set up properly in the first place.

I think having CONFIG_STATUS_LED is sufficient to justify a
corresponding call to status_led_init(), even with no STATUS_LED_BOOT
defined. To do so, common/board_r.c needs call that routine, so it now
is exposed via status_led.h.

Signed-off-by: Bernhard Nortmann <bernhard.nortmann@web.de>
[trini: Add dummy __led_init to pca9551_led.c]
Signed-off-by: Tom Rini <trini@konsulko.com>
common/board_r.c
drivers/misc/pca9551_led.c
drivers/misc/status_led.c
include/status_led.h

index a4facf8845d1deebfc63b58a4c17a254c20cdb11..a412bb7554de6e0ff3170e1040dbb4ddc659c391 100644 (file)
@@ -544,11 +544,14 @@ static int initr_kgdb(void)
 }
 #endif
 
-#if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT)
+#if defined(CONFIG_STATUS_LED)
 static int initr_status_led(void)
 {
+#if defined(STATUS_LED_BOOT)
        status_led_set(STATUS_LED_BOOT, STATUS_LED_BLINKING);
-
+#else
+       status_led_init();
+#endif
        return 0;
 }
 #endif
@@ -835,7 +838,7 @@ init_fnc_t init_sequence_r[] = {
        || defined(CONFIG_M68K)
        timer_init,             /* initialize timer */
 #endif
-#if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT)
+#if defined(CONFIG_STATUS_LED)
        initr_status_led,
 #endif
        /* PPC has a udelay(20) here dating from 2002. Why? */
index d4034f6735b93d1c098e0b4765158d17cad282ac..4da031985f732ecb4b55f12ff1f44af5c1ffb334 100644 (file)
@@ -116,8 +116,12 @@ static int pca9551_led_set_blink_rate(int idx, struct pca9551_blink_rate rate)
 }
 
 /*
- * Functions referenced by cmd_led.c
+ * Functions referenced by cmd_led.c or status_led.c
  */
+void __led_init(led_id_t id, int state)
+{
+}
+
 void __led_set(led_id_t mask, int state)
 {
        if (state == STATUS_LED_OFF)
index 9869d98c10c073f51238bd21c8fc35683e969609..31e88319d1515ceb9de50e9e7e749215265a5f7f 100644 (file)
@@ -73,7 +73,7 @@ led_dev_t led_dev[] = {
 
 static int status_led_init_done = 0;
 
-static void status_led_init (void)
+void status_led_init(void)
 {
        led_dev_t *ld;
        int i;
index f6be18146b23c7cb9ea1b233613f7fd3185bd5aa..396ea882eaccae038cb51cffb31dfb1b42a7ca1b 100644 (file)
@@ -23,6 +23,7 @@
 #define STATUS_LED_BLINKING    1
 #define STATUS_LED_ON          2
 
+void status_led_init(void);
 void status_led_tick (unsigned long timestamp);
 void status_led_set  (int led, int state);