[PATCH] switch enable UART0 by press [S] switch USBBOOT mode by press [U]
Xiangfu Liu
xiangfu at qi-hardware.com
Thu Nov 26 02:48:15 EST 2009
---
.../patches/0003-disable-init-gpio-as-uart0.patch | 130 ++++++++++++++++++--
1 files changed, 117 insertions(+), 13 deletions(-)
diff --git a/target/linux/xburst/image/u-boot/patches/0003-disable-init-gpio-as-uart0.patch b/target/linux/xburst/image/u-boot/patches/0003-disable-init-gpio-as-uart0.patch
index f72a87c..e4b00cc 100644
--- a/target/linux/xburst/image/u-boot/patches/0003-disable-init-gpio-as-uart0.patch
+++ b/target/linux/xburst/image/u-boot/patches/0003-disable-init-gpio-as-uart0.patch
@@ -1,29 +1,133 @@
diff --git a/board/qi_lb60/qi_lb60.c b/board/qi_lb60/qi_lb60.c
-index d13f2ab..86c33ba 100644
+index d13f2ab..30ee73c 100644
--- a/board/qi_lb60/qi_lb60.c
+++ b/board/qi_lb60/qi_lb60.c
-@@ -25,9 +25,11 @@ static void gpio_init(void)
+@@ -25,11 +25,6 @@ static void gpio_init(void)
__gpio_as_sdram_32bit();
/*
- * Initialize UART0 pins
+- */
+- __gpio_as_uart0();
+-
+- /*
+ * Initialize LCD pins
+ */
+ __gpio_as_lcd_18bit();
+@@ -43,17 +38,30 @@ static void gpio_init(void)
+ * Initialize Other pins
+ */
+ unsigned int i;
++ for (i = 0; i < 7; i++){
++ __gpio_as_input(GPIO_KEYIN_BASE + i);
++ __gpio_enable_pull(GPIO_KEYIN_BASE + i);
++ }
++
+ for (i = 0; i < 8; i++) {
+ __gpio_as_output(GPIO_KEYOUT_BASE + i);
+- __gpio_set_pin(GPIO_KEYOUT_BASE + i);
++ __gpio_clear_pin(GPIO_KEYOUT_BASE + i);
+ }
+
+- for (i = 0; i < 7; i++){
+- __gpio_as_input(GPIO_KEYIN_BASE + i);
+- __gpio_enable_pull(GPIO_KEYIN_BASE + i);
++ /*
+ * Initialize UART0 pins, in Ben NanoNote uart0 and keyin8 use the
+ * same gpio, init the gpio as uart0 cause a keyboard bug. so for
+ * end user we disable the uart0
- */
-- __gpio_as_uart0();
-+ /* __gpio_as_uart0(); */
-
- /*
- * Initialize LCD pins
-@@ -52,8 +54,8 @@ static void gpio_init(void)
- __gpio_as_input(GPIO_KEYIN_BASE + i);
- __gpio_enable_pull(GPIO_KEYIN_BASE + i);
++ */
++ if (__gpio_get_pin(GPIO_KEYIN_BASE + 2) == 0){
++ /* if pressed [S] */
++ printf("[S] pressed, enable UART0\n");
++ __gpio_as_uart0();
++ } else {
++ printf("[S] not pressed, disable UART0\n");
++ __gpio_as_input(GPIO_KEYIN_8);
++ __gpio_enable_pull(GPIO_KEYIN_8);
}
- /* __gpio_as_input( GPIO_KEYIN_8 ); */
- /* __gpio_enable_pull( GPIO_KEYIN_8 ); */
-+ __gpio_as_input(GPIO_KEYIN_8);
-+ __gpio_enable_pull(GPIO_KEYIN_8);
__gpio_as_output(GPIO_AUDIO_POP);
__gpio_set_pin(GPIO_AUDIO_POP);
+diff --git a/nand_spl/nand_boot_jz4740.c b/nand_spl/nand_boot_jz4740.c
+index 924a47a..146de19 100644
+--- a/nand_spl/nand_boot_jz4740.c
++++ b/nand_spl/nand_boot_jz4740.c
+@@ -24,10 +24,8 @@
+ #include <asm/io.h>
+ #include <asm/jz4740.h>
+
+-#define KEY_1_OUT (32 * 3 + 21)
+-#define KEY_1_IN (32 * 3 + 19)
+-#define KEY_2_OUT (32 * 3 + 25)
+-#define KEY_2_IN (32 * 3 + 26)
++#define KEY_U_OUT (32 * 2 + 16)
++#define KEY_U_IN (32 * 3 + 19)
+
+ /*
+ * NAND flash definitions
+@@ -350,40 +348,25 @@ static void gpio_init(void)
+
+ static int is_usb_boot()
+ {
+- int key2,keyh;
+-
+- key2 = 0;
+- keyh = 0;
++ int keyU = 0;
+
+- __gpio_as_output(KEY_1_OUT);
+- __gpio_as_output(KEY_2_OUT);
+- __gpio_as_input(KEY_1_IN);
+- __gpio_as_input(KEY_2_IN);
+- __gpio_disable_pull(KEY_1_IN);
+- __gpio_disable_pull(KEY_2_IN);
++ __gpio_as_input(KEY_U_IN);
++ __gpio_enable_pull(KEY_U_IN);
+
+- __gpio_clear_pin(KEY_1_OUT);
+- __gpio_clear_pin(KEY_2_OUT);
+-
+- key2 = __gpio_get_pin(KEY_2_IN);
+- keyh = __gpio_get_pin(KEY_1_IN);
++ __gpio_as_output(KEY_U_OUT);
++ __gpio_clear_pin(KEY_U_OUT);
+
+- if(key2)
+- serial_puts("key2");
+- else
+- serial_puts("key2--");
++ keyU = __gpio_get_pin(KEY_U_IN);
+
+- if(keyh)
+- serial_puts("keyh");
++ if (keyU)
++ serial_puts("[U] not pressed\n");
+ else
+- serial_puts("keyh--");
++ serial_puts("[U] pressed\n");
+
+-
+- if( ( key2 == 0 ) && ( keyh == 0 ) )
++ if (keyU == 0)
+ return 1;
+ else
+ return 0;
+-
+ }
+
+ void nand_boot(void)
+@@ -402,9 +385,8 @@ void nand_boot(void)
+ pll_init();
+ sdram_init();
+
+- int ret = 0;
+- ret = is_usb_boot();
+- if(ret) {
++ if(is_usb_boot()) {
++ serial_puts("enter USB BOOT mode\n");
+ usb_boot();
+ }
+
--
1.6.3.3
More information about the discussion
mailing list