86cc3eff2291d09d8a35b93b970b59a53960f7e8
[glsdk/meta-ti-glsdk.git] / recipes-bsp / u-boot / u-boot / 0002-OMAP3-add-board-revision-detection-for-Overo.patch
1 From 8cea9443be01ccc2525ff1de17b0dddd7c27984e Mon Sep 17 00:00:00 2001
2 From: Steve Sakoman <steve@sakoman.com>
3 Date: Wed, 10 Feb 2010 14:40:56 -0800
4 Subject: [PATCH 02/51] OMAP3: add board revision detection for Overo
6 ---
7 board/overo/overo.c | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++
8 board/overo/overo.h | 43 +++++++++++++++++++++---
9 2 files changed, 127 insertions(+), 6 deletions(-)
11 diff --git a/board/overo/overo.c b/board/overo/overo.c
12 index e85be7d..3df1a12 100644
13 --- a/board/overo/overo.c
14 +++ b/board/overo/overo.c
15 @@ -61,11 +61,101 @@ int board_init(void)
16 }
18 /*
19 + * Routine: get_sdio2_config
20 + * Description: Return information about the wifi module connection
21 + * Returns 0 if the module connects though a level translator
22 + * Returns 1 if the module connects directly
23 + */
24 +int get_sdio2_config(void) {
25 + int sdio_direct;
26 +
27 + if (!omap_request_gpio(130) && !omap_request_gpio(139)){
28 +
29 + omap_set_gpio_direction(130, 0);
30 + omap_set_gpio_direction(139, 1);
31 +
32 + sdio_direct = 1;
33 + omap_set_gpio_dataout(130, 0);
34 + if (omap_get_gpio_datain(139) == 0) {
35 + omap_set_gpio_dataout(130, 1);
36 + if (omap_get_gpio_datain(139) == 1)
37 + sdio_direct = 0;
38 + }
39 +
40 + omap_free_gpio(130);
41 + omap_free_gpio(139);
42 + } else {
43 + printf("Error: unable to acquire sdio2 clk GPIOs\n");
44 + sdio_direct=-1;
45 + }
46 +
47 + return sdio_direct;
48 +}
49 +
50 +/*
51 + * Routine: get_board_revision
52 + * Description: Returns the board revision
53 + */
54 +int get_board_revision(void) {
55 + int revision;
56 +
57 + if (!omap_request_gpio(126) && !omap_request_gpio(127) &&
58 + !omap_request_gpio(128) && !omap_request_gpio(129)){
59 +
60 + omap_set_gpio_direction(126, 1);
61 + omap_set_gpio_direction(127, 1);
62 + omap_set_gpio_direction(128, 1);
63 + omap_set_gpio_direction(129, 1);
64 +
65 + revision = 0;
66 + if (omap_get_gpio_datain(126) == 0)
67 + revision += 1;
68 + if (omap_get_gpio_datain(127) == 0)
69 + revision += 2;
70 + if (omap_get_gpio_datain(128) == 0)
71 + revision += 4;
72 + if (omap_get_gpio_datain(129) == 0)
73 + revision += 8;
74 +
75 + omap_free_gpio(126);
76 + omap_free_gpio(127);
77 + omap_free_gpio(128);
78 + omap_free_gpio(129);
79 + } else {
80 + printf("Error: unable to acquire board revision GPIOs\n");
81 + revision=-1;
82 + }
83 +
84 + return revision;
85 +}
86 +
87 +/*
88 * Routine: misc_init_r
89 * Description: Configure board specific parts
90 */
91 int misc_init_r(void)
92 {
93 + printf("Board revision: ");
94 + switch (get_board_revision()) {
95 + case 0:
96 + case 1:
97 + switch (get_sdio2_config()) {
98 + case 0:
99 + printf(" 0\n");
100 + MUX_OVERO_SDIO2_TRANSCEIVER();
101 + break;
102 + case 1:
103 + printf(" 1\n");
104 + MUX_OVERO_SDIO2_DIRECT();
105 + break;
106 + default:
107 + printf(" unknown\n");
108 + }
109 + break;
110 + default:
111 + printf(" unsupported\n");
112 + }
113 +
114 twl4030_power_init();
115 twl4030_led_init(TWL4030_LED_LEDEN_LEDAON | TWL4030_LED_LEDEN_LEDBON);
117 diff --git a/board/overo/overo.h b/board/overo/overo.h
118 index 1873523..e120e09 100644
119 --- a/board/overo/overo.h
120 +++ b/board/overo/overo.h
121 @@ -206,12 +206,12 @@ const omap3_sysinfo sysinfo = {
122 MUX_VAL(CP(MMC1_DAT1), (IEN | PTU | EN | M0)) /*MMC1_DAT1*/\
123 MUX_VAL(CP(MMC1_DAT2), (IEN | PTU | EN | M0)) /*MMC1_DAT2*/\
124 MUX_VAL(CP(MMC1_DAT3), (IEN | PTU | EN | M0)) /*MMC1_DAT3*/\
125 - MUX_VAL(CP(MMC1_DAT4), (IEN | PTU | EN | M0)) /*MMC1_DAT4*/\
126 - MUX_VAL(CP(MMC1_DAT5), (IEN | PTU | EN | M0)) /*MMC1_DAT5*/\
127 - MUX_VAL(CP(MMC1_DAT6), (IEN | PTU | EN | M0)) /*MMC1_DAT6*/\
128 - MUX_VAL(CP(MMC1_DAT7), (IEN | PTU | EN | M0)) /*MMC1_DAT7*/\
129 + MUX_VAL(CP(MMC1_DAT4), (IEN | PTU | EN | M4)) /*GPIO_126*/\
130 + MUX_VAL(CP(MMC1_DAT5), (IEN | PTU | EN | M4)) /*GPIO_127*/\
131 + MUX_VAL(CP(MMC1_DAT6), (IEN | PTU | EN | M4)) /*GPIO_128*/\
132 + MUX_VAL(CP(MMC1_DAT7), (IEN | PTU | EN | M4)) /*GPIO_129*/\
133 /*Wireless LAN */\
134 - MUX_VAL(CP(MMC2_CLK), (IEN | PTU | EN | M0)) /*MMC2_CLK*/\
135 + MUX_VAL(CP(MMC2_CLK), (IEN | PTU | EN | M4)) /*GPIO_130*/\
136 MUX_VAL(CP(MMC2_CMD), (IEN | PTU | EN | M0)) /*MMC2_CMD*/\
137 MUX_VAL(CP(MMC2_DAT0), (IEN | PTU | EN | M0)) /*MMC2_DAT0*/\
138 MUX_VAL(CP(MMC2_DAT1), (IEN | PTU | EN | M0)) /*MMC2_DAT1*/\
139 @@ -220,7 +220,7 @@ const omap3_sysinfo sysinfo = {
140 MUX_VAL(CP(MMC2_DAT4), (IEN | PTU | EN | M1)) /*MMC2_DIR_DAT0*/\
141 MUX_VAL(CP(MMC2_DAT5), (IEN | PTU | EN | M1)) /*MMC2_DIR_DAT1*/\
142 MUX_VAL(CP(MMC2_DAT6), (IEN | PTU | EN | M1)) /*MMC2_DIR_CMD*/\
143 - MUX_VAL(CP(MMC2_DAT7), (IEN | PTU | EN | M1)) /*MMC2_CLKIN*/\
144 + MUX_VAL(CP(MMC2_DAT7), (IEN | PTU | EN | M4)) /*GPIO_139*/\
145 /*Bluetooth*/\
146 MUX_VAL(CP(MCBSP3_DX), (IEN | PTD | DIS | M1)) /*UART2_CTS*/\
147 MUX_VAL(CP(MCBSP3_DR), (IDIS | PTD | DIS | M1)) /*UART2_RTS*/\
148 @@ -387,5 +387,36 @@ const omap3_sysinfo sysinfo = {
149 MUX_VAL(CP(SDRC_CKE0), (IDIS | PTU | EN | M0)) /*sdrc_cke0*/\
150 MUX_VAL(CP(SDRC_CKE1), (IDIS | PTU | EN | M0)) /*sdrc_cke1*/
152 +#define MUX_OVERO_SDIO2_DIRECT() \
153 + MUX_VAL(CP(MMC2_CLK), (IEN | PTU | EN | M0)) /*MMC2_CLK*/\
154 + MUX_VAL(CP(MMC2_CMD), (IEN | PTU | EN | M0)) /*MMC2_CMD*/\
155 + MUX_VAL(CP(MMC2_DAT0), (IEN | PTU | EN | M0)) /*MMC2_DAT0*/\
156 + MUX_VAL(CP(MMC2_DAT1), (IEN | PTU | EN | M0)) /*MMC2_DAT1*/\
157 + MUX_VAL(CP(MMC2_DAT2), (IEN | PTU | EN | M0)) /*MMC2_DAT2*/\
158 + MUX_VAL(CP(MMC2_DAT3), (IEN | PTU | EN | M0)) /*MMC2_DAT3*/\
159 + MUX_VAL(CP(MMC2_DAT4), (IEN | PTU | EN | M0)) /*MMC2_DAT4*/\
160 + MUX_VAL(CP(MMC2_DAT5), (IEN | PTU | EN | M0)) /*MMC2_DAT5*/\
161 + MUX_VAL(CP(MMC2_DAT6), (IEN | PTU | EN | M0)) /*MMC2_DAT6*/\
162 + MUX_VAL(CP(MMC2_DAT7), (IEN | PTU | EN | M0)) /*MMC2_DAT7*/\
163 + MUX_VAL(CP(MMC1_DAT4), (IEN | PTD | EN | M4)) /*GPIO_126*/\
164 + MUX_VAL(CP(MMC1_DAT5), (IEN | PTU | EN | M4)) /*GPIO_127*/\
165 + MUX_VAL(CP(MMC1_DAT6), (IEN | PTU | EN | M4)) /*GPIO_128*/\
166 + MUX_VAL(CP(MMC1_DAT7), (IEN | PTU | EN | M4)) /*GPIO_129*/
167 +
168 +#define MUX_OVERO_SDIO2_TRANSCEIVER() \
169 + MUX_VAL(CP(MMC2_CLK), (IEN | PTU | EN | M0)) /*MMC2_CLK*/\
170 + MUX_VAL(CP(MMC2_CMD), (IEN | PTU | EN | M0)) /*MMC2_CMD*/\
171 + MUX_VAL(CP(MMC2_DAT0), (IEN | PTU | EN | M0)) /*MMC2_DAT0*/\
172 + MUX_VAL(CP(MMC2_DAT1), (IEN | PTU | EN | M0)) /*MMC2_DAT1*/\
173 + MUX_VAL(CP(MMC2_DAT2), (IEN | PTU | EN | M0)) /*MMC2_DAT2*/\
174 + MUX_VAL(CP(MMC2_DAT3), (IEN | PTU | EN | M0)) /*MMC2_DAT3*/\
175 + MUX_VAL(CP(MMC2_DAT4), (IEN | PTU | EN | M1)) /*MMC2_DIR_DAT0*/\
176 + MUX_VAL(CP(MMC2_DAT5), (IEN | PTU | EN | M1)) /*MMC2_DIR_DAT1*/\
177 + MUX_VAL(CP(MMC2_DAT6), (IEN | PTU | EN | M1)) /*MMC2_DIR_CMD*/\
178 + MUX_VAL(CP(MMC2_DAT7), (IEN | PTU | EN | M1)) /*MMC2_CLKIN*/\
179 + MUX_VAL(CP(MMC1_DAT4), (IEN | PTU | EN | M4)) /*GPIO_126*/\
180 + MUX_VAL(CP(MMC1_DAT5), (IEN | PTU | EN | M4)) /*GPIO_127*/\
181 + MUX_VAL(CP(MMC1_DAT6), (IEN | PTU | EN | M4)) /*GPIO_128*/\
182 + MUX_VAL(CP(MMC1_DAT7), (IEN | PTU | EN | M4)) /*GPIO_129*/
184 #endif
185 --
186 1.6.6.1