Blackfin: post: generalize led/button tests with GPIOs
authorMike Frysinger <vapier@gentoo.org>
Tue, 10 May 2011 20:22:25 +0000 (16:22 -0400)
committerMike Frysinger <vapier@gentoo.org>
Thu, 29 Sep 2011 20:38:05 +0000 (16:38 -0400)
Make it easy for any Blackfin board to enable led/push button tests.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
arch/blackfin/include/asm/config.h
arch/blackfin/lib/Makefile
arch/blackfin/lib/post.c [moved from board/bf537-stamp/post.c with 51% similarity]
board/bf537-stamp/Makefile
include/configs/bf537-stamp.h
include/configs/bf548-ezkit.h
post/tests.c

index bc3c252..53af310 100644 (file)
 # define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
 #endif
 
+/* Blackfin POST tests */
+#ifdef CONFIG_POST_BSPEC1_GPIO_LEDS
+# define CONFIG_POST_BSPEC1 \
+       { \
+               "LED test", "led", "This test verifies LEDs on the board.", \
+               POST_MEM | POST_ALWAYS, &led_post_test, NULL, NULL, \
+               CONFIG_SYS_POST_BSPEC1, \
+       }
+#endif
+#ifdef CONFIG_POST_BSPEC2_GPIO_BUTTONS
+# define CONFIG_POST_BSPEC2 \
+       { \
+               "Button test", "button", "This test verifies buttons on the board.", \
+               POST_MEM | POST_ALWAYS, &button_post_test, NULL, NULL, \
+               CONFIG_SYS_POST_BSPEC2, \
+       }
+#endif
+
 #endif
index 18c9f74..37e0663 100644 (file)
@@ -46,6 +46,7 @@ COBJS-y       += clocks.o
 COBJS-$(CONFIG_CMD_CACHE_DUMP) += cmd_cache_dump.o
 COBJS-$(CONFIG_CMD_KGDB) += kgdb.o
 COBJS-y        += muldi3.o
+COBJS-$(CONFIG_HAS_POST) += post.o
 COBJS-y        += string.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
similarity index 51%
rename from board/bf537-stamp/post.c
rename to arch/blackfin/lib/post.c
index f35cc8e..b3c5fab 100644 (file)
@@ -1,69 +1,66 @@
 /*
- * BF537-STAMP POST code
+ * Blackfin POST code
  *
- * Enter bugs at http://blackfin.uclinux.org/
- *
- * Copyright (c) 2005-2009 Analog Devices Inc.
+ * Copyright (c) 2005-2011 Analog Devices Inc.
  *
  * Licensed under the GPL-2 or later.
  */
 
 #include <common.h>
 #include <config.h>
-#include <command.h>
-#include <asm/blackfin.h>
+#include <post.h>
+
 #include <asm/gpio.h>
 
-/****************************************************
- * LED1 ---- PF6       LED2 ---- PF7               *
- * LED3 ---- PF8       LED4 ---- PF9               *
- * LED5 ---- PF10      LED6 ---- PF11              *
- ****************************************************/
+#if CONFIG_POST & CONFIG_SYS_POST_BSPEC1
 int led_post_test(int flags)
 {
-       unsigned int leds[] = {
-               GPIO_PF6, GPIO_PF7, GPIO_PF8,
-               GPIO_PF9, GPIO_PF10, GPIO_PF11,
-       };
+       unsigned leds[] = { CONFIG_POST_BSPEC1_GPIO_LEDS };
        int i;
 
+       /* First turn them all off */
        for (i = 0; i < ARRAY_SIZE(leds); ++i) {
-               gpio_request(leds[i], "post");
+               if (gpio_request(leds[i], "post")) {
+                       printf("could not request gpio %u\n", leds[i]);
+                       continue;
+               }
                gpio_direction_output(leds[i], 0);
+       }
 
+       /* Now turn them on one by one */
+       for (i = 0; i < ARRAY_SIZE(leds); ++i) {
                printf("LED%i on", i + 1);
                gpio_set_value(leds[i], 1);
                udelay(1000000);
                printf("\b\b\b\b\b\b\b");
-
                gpio_free(leds[i]);
        }
 
        return 0;
 }
+#endif
 
-/************************************************
- *  SW10 ---- PF5      SW11 ---- PF4           *
- *  SW12 ---- PF3      SW13 ---- PF2           *
- ************************************************/
+#if CONFIG_POST & CONFIG_SYS_POST_BSPEC2
 int button_post_test(int flags)
 {
-       unsigned int buttons[] = {
-               GPIO_PF2, GPIO_PF3, GPIO_PF4, GPIO_PF5,
-       };
-       unsigned int sws[] = { 13, 12, 11, 10, };
+       unsigned buttons[] = { CONFIG_POST_BSPEC2_GPIO_BUTTONS };
+       unsigned int sws[] = { CONFIG_POST_BSPEC2_GPIO_NAMES };
        int i, delay = 5;
        unsigned short value = 0;
        int result = 0;
 
        for (i = 0; i < ARRAY_SIZE(buttons); ++i) {
-               gpio_request(buttons[i], "post");
+               if (gpio_request(buttons[i], "post")) {
+                       printf("could not request gpio %u\n", buttons[i]);
+                       continue;
+               }
                gpio_direction_input(buttons[i]);
 
                delay = 5;
                printf("\n--------Press SW%i: %2d ", sws[i], delay);
                while (delay--) {
-                       for (i = 0; i < 100; i++) {
+                       int j;
+                       for (j = 0; j < 100; j++) {
                                value = gpio_get_value(buttons[i]);
                                if (value != 0)
                                        break;
@@ -85,3 +82,4 @@ int button_post_test(int flags)
 
        return result;
 }
+#endif
index 2b9328b..49e4414 100644 (file)
@@ -31,7 +31,7 @@ LIB   = $(obj)lib$(BOARD).o
 
 COBJS-y        := $(BOARD).o
 COBJS-$(CONFIG_BFIN_IDE)   += ide-cf.o
-COBJS-$(CONFIG_HAS_POST)   += post.o post-memory.o
+COBJS-$(CONFIG_HAS_POST)   += post-memory.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS-y))
index 3dee8ee..172268b 100644 (file)
 #undef CONFIG_POST
 #ifdef CONFIG_POST
 #define CONFIG_SYS_POST_HOTKEYS_GPIO   GPIO_PF5
+#define CONFIG_POST_BSPEC1_GPIO_LEDS \
+       GPIO_PF6, GPIO_PF7, GPIO_PF8, GPIO_PF9, GPIO_PF10, GPIO_PF11,
+#define CONFIG_POST_BSPEC2_GPIO_BUTTONS \
+       GPIO_PF5, GPIO_PF4, GPIO_PF3, GPIO_PF2,
+#define CONFIG_POST_BSPEC2_GPIO_NAMES \
+       10, 11, 12, 13,
 #define FLASH_START_POST_BLOCK 11      /* Should > = 11 */
 #define FLASH_END_POST_BLOCK   71      /* Should < = 71 */
 #endif
index 3550fd3..ae27a97 100644 (file)
 /* Define if want to do post memory test */
 #undef CONFIG_POST
 #ifdef CONFIG_POST
+#define CONFIG_POST_BSPEC1_GPIO_LEDS \
+       GPIO_PG6, GPIO_PG7, GPIO_PG8, GPIO_PG9, GPIO_PG10, GPIO_PG11,
+#define CONFIG_POST_BSPEC2_GPIO_BUTTONS \
+       GPIO_PB8, GPIO_PB9, GPIO_PB10, GPIO_PB11
+#define CONFIG_POST_BSPEC2_GPIO_NAMES \
+       13, 12, 11, 10,
 #define FLASH_START_POST_BLOCK 11       /* Should > = 11 */
 #define FLASH_END_POST_BLOCK   71       /* Should < = 71 */
 #endif
index bfb9cb5..725f80b 100644 (file)
@@ -55,6 +55,8 @@ extern int fpga_post_test (int flags);
 extern int lwmon5_watchdog_post_test(int flags);
 extern int sysmon1_post_test(int flags);
 extern int coprocessor_post_test(int flags);
+extern int led_post_test(int flags);
+extern int button_post_test(int flags);
 
 extern int sysmon_init_f (void);