]> git.sur5r.net Git - u-boot/commitdiff
siemens: add led cmd for flexible LED control
authorEgli, Samuel <samuel.egli@siemens.com>
Thu, 24 Apr 2014 15:57:54 +0000 (17:57 +0200)
committerTom Rini <trini@ti.com>
Tue, 13 May 2014 23:43:00 +0000 (19:43 -0400)
* remove setting LED in user button function.
   We want to decouple reading user button and setting LED. This
   two things need to be done independently.

 * led cmd can be used to control LEDs that are defined in board file
   having a led cmd, one can easily set LEDs in u-boot shell. For
   example bootcmd can be extended to disable status LED before
   loading kernel.

Signed-off-by: Samuel Egli <samuel.egli@siemens.com>
Cc: Roger Meier <r.meier@siemens.com>
Cc: Heiko Schocher <hs@denx.de>
Cc: Wolfgang Denk <wd@denx.de>
board/siemens/common/board.c

index 7e8731bb3b9a4eaac210a7ff3a1f7aa1e8c65928..2782bcc2a71febd7c4cc7e507b2d0645883a6dc0 100644 (file)
@@ -128,12 +128,6 @@ do_userbutton(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                button = 0;
 
        gpio_free(gpio);
-       if (!button) {
-               /* LED0 - RED=1: GPIO2_0 2*32 = 64 */
-               gpio_request(BOARD_DFU_BUTTON_LED, "");
-               gpio_direction_output(BOARD_DFU_BUTTON_LED, 1);
-               gpio_set_value(BOARD_DFU_BUTTON_LED, 1);
-       }
 
        return button;
 }
@@ -144,6 +138,46 @@ U_BOOT_CMD(
        ""
 );
 #endif
+/*
+ * This command sets led
+ * Input -     name of led
+ *             value of led
+ * Returns -   1 if input does not match
+ *             0 if led was set
+ */
+static int
+do_setled(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+       int gpio = 0;
+       if (argc != 3)
+               goto exit;
+#if defined(BOARD_STATUS_LED)
+       if (!strcmp(argv[1], "stat"))
+               gpio = BOARD_STATUS_LED;
+#endif
+#if defined(BOARD_DFU_BUTTON_LED)
+       if (!strcmp(argv[1], "dfu"))
+               gpio = BOARD_DFU_BUTTON_LED;
+#endif
+       /* If argument does not mach exit */
+       if (gpio == 0)
+               goto exit;
+       gpio_request(gpio, "");
+       gpio_direction_output(gpio, 1);
+       if (!strcmp(argv[2], "1"))
+               gpio_set_value(gpio, 1);
+       else
+               gpio_set_value(gpio, 0);
+       return 0;
+exit:
+       return 1;
+}
+
+U_BOOT_CMD(
+       led, CONFIG_SYS_MAXARGS, 2, do_setled,
+       "Set led on or off",
+       "dfu val - set dfu led\nled stat val - set status led"
+);
 
 static int
 do_usertestwdt(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])