tricorder: add led support
authorAndreas Bießmann <andreas.biessmann@corscience.de>
Fri, 6 Sep 2013 13:04:54 +0000 (15:04 +0200)
committerTom Rini <trini@ti.com>
Fri, 1 Nov 2013 19:55:59 +0000 (15:55 -0400)
Signed-off-by: Andreas Bießmann <andreas.biessmann@corscience.de>
board/corscience/tricorder/Makefile
board/corscience/tricorder/led.c [new file with mode: 0644]
board/corscience/tricorder/tricorder.c
board/corscience/tricorder/tricorder.h
include/configs/tricorder.h

index 22ad8c510c9c745b9fcbe64a677e7d59ef951054..8a7f15c79564dcbe10834ed0758c1e9a2f31cad4 100644 (file)
@@ -12,7 +12,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).o
 
-COBJS  := tricorder.o tricorder-eeprom.o
+COBJS  := tricorder.o tricorder-eeprom.o led.o
 
 SRCS   := $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/corscience/tricorder/led.c b/board/corscience/tricorder/led.c
new file mode 100644 (file)
index 0000000..30f2f50
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2013 Corscience GmbH & Co.KG
+ * Andreas Bießmann <andreas.biessmann@corscience.de>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+#include <common.h>
+#include <status_led.h>
+#include <twl4030.h>
+#include <asm/arch/cpu.h>
+#include <asm/io.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/gpio.h>
+
+#define TRICORDER_STATUS_LED_YELLOW 42
+#define TRICORDER_STATUS_LED_GREEN  43
+
+void __led_init(led_id_t mask, int state)
+{
+       __led_set(mask, state);
+}
+
+void __led_toggle(led_id_t mask)
+{
+       int toggle_gpio = 0;
+#ifdef STATUS_LED_BIT
+       if (!toggle_gpio && STATUS_LED_BIT & mask)
+               toggle_gpio = TRICORDER_STATUS_LED_GREEN;
+#endif
+#ifdef STATUS_LED_BIT1
+       if (!toggle_gpio && STATUS_LED_BIT1 & mask)
+               toggle_gpio = TRICORDER_STATUS_LED_YELLOW;
+#endif
+#ifdef STATUS_LED_BIT2
+       if (!toggle_gpio && STATUS_LED_BIT2 & mask) {
+               uint8_t val;
+               twl4030_i2c_read_u8(TWL4030_CHIP_LED, TWL4030_LED_LEDEN,
+                                   &val);
+               val ^= (TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDAPWM);
+               twl4030_i2c_write_u8(TWL4030_CHIP_LED, TWL4030_LED_LEDEN,
+                                    val);
+       }
+#endif
+       if (toggle_gpio) {
+               int state;
+               gpio_request(toggle_gpio, "");
+               state = gpio_get_value(toggle_gpio);
+               gpio_set_value(toggle_gpio, !state);
+       }
+}
+
+void __led_set(led_id_t mask, int state)
+{
+#ifdef STATUS_LED_BIT
+       if (STATUS_LED_BIT & mask) {
+               gpio_request(TRICORDER_STATUS_LED_GREEN, "");
+               gpio_direction_output(TRICORDER_STATUS_LED_GREEN, 0);
+               gpio_set_value(TRICORDER_STATUS_LED_GREEN, state);
+       }
+#endif
+#ifdef STATUS_LED_BIT1
+       if (STATUS_LED_BIT1 & mask) {
+               gpio_request(TRICORDER_STATUS_LED_YELLOW, "");
+               gpio_direction_output(TRICORDER_STATUS_LED_YELLOW, 0);
+               gpio_set_value(TRICORDER_STATUS_LED_YELLOW, state);
+       }
+#endif
+#ifdef STATUS_LED_BIT2
+       if (STATUS_LED_BIT2 & mask) {
+               if (STATUS_LED_OFF == state)
+                       twl4030_i2c_write_u8(TWL4030_CHIP_LED,
+                                            TWL4030_LED_LEDEN, 0);
+               else
+                       twl4030_i2c_write_u8(TWL4030_CHIP_LED,
+                                            TWL4030_LED_LEDEN,
+                                            (TWL4030_LED_LEDEN_LEDAON |
+                                             TWL4030_LED_LEDEN_LEDAPWM));
+       }
+#endif
+}
index b8129168b9fa7641203a757105f979e5bed96745..fb5d0364818e6fddf7f75d692ee4d4759a319a1e 100644 (file)
@@ -118,9 +118,9 @@ int misc_init_r(void)
        print_hwversion(&eeprom);
 
        twl4030_power_init();
-#ifdef CONFIG_TWL4030_LED
-       twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON);
-#endif
+       status_led_set(0, STATUS_LED_ON);
+       status_led_set(1, STATUS_LED_ON);
+       status_led_set(2, STATUS_LED_ON);
 
        dieid_num_r();
 
index 820a50c9f7076014a43ab75c861152f4f72d6e4f..67c35c56bc3e16c557f1592432998bbfbcf8de46 100644 (file)
@@ -75,8 +75,8 @@ const omap3_sysinfo sysinfo = {
        MUX_VAL(CP(GPMC_A6),            (IDIS | PTD | DIS | M0)) /*GPMC_A6*/\
        MUX_VAL(CP(GPMC_A7),            (IDIS | PTD | DIS | M0)) /*GPMC_A7*/\
        MUX_VAL(CP(GPMC_A8),            (IDIS | PTD | DIS | M0)) /*GPMC_A8*/\
-       MUX_VAL(CP(GPMC_A9),            (IDIS | PTD | DIS | M0)) /*GPMC_A9*/\
-       MUX_VAL(CP(GPMC_A10),           (IDIS | PTD | DIS | M0)) /*GPMC_A10*/\
+       MUX_VAL(CP(GPMC_A9),            (IDIS | PTU | EN  | M4)) /*GPIO 42*/\
+       MUX_VAL(CP(GPMC_A10),           (IDIS | PTU | EN  | M4)) /*GPIO 43*/\
        MUX_VAL(CP(GPMC_D0),            (IEN  | PTD | DIS | M0)) /*GPMC_D0*/\
        MUX_VAL(CP(GPMC_D1),            (IEN  | PTD | DIS | M0)) /*GPMC_D1*/\
        MUX_VAL(CP(GPMC_D2),            (IEN  | PTD | DIS | M0)) /*GPMC_D2*/\
index 087c44ca513f4e89130b45528ec1abb143bc4178..f54fa24922ac72fb9dffef95fd520d712fedd3be 100644 (file)
 /* GPIO support */
 #define CONFIG_OMAP_GPIO
 
+/* LED support */
+#define CONFIG_STATUS_LED
+#define CONFIG_BOARD_SPECIFIC_LED
+#define CONFIG_CMD_LED                 /* LED command */
+#define STATUS_LED_BIT                 (1 << 0)
+#define STATUS_LED_STATE               STATUS_LED_ON
+#define STATUS_LED_PERIOD              (CONFIG_SYS_HZ / 2)
+#define STATUS_LED_BIT1                        (1 << 1)
+#define STATUS_LED_STATE1              STATUS_LED_ON
+#define STATUS_LED_PERIOD1             (CONFIG_SYS_HZ / 2)
+#define STATUS_LED_BIT2                        (1 << 2)
+#define STATUS_LED_STATE2              STATUS_LED_ON
+#define STATUS_LED_PERIOD2             (CONFIG_SYS_HZ / 2)
+
 /* NS16550 Configuration */
 #define CONFIG_SYS_NS16550
 #define CONFIG_SYS_NS16550_SERIAL