brcm63xx: switch to 3.9 kernel
[openwrt/svn-archive/archive.git] / target / linux / brcm63xx / patches-3.8 / 534-board_hw556.patch
1 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
2 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
3 @@ -2858,6 +2858,374 @@ static struct board_info __initdata boar
4 },
5 };
6
7 +static struct board_info __initdata board_HW556 = {
8 + .name = "HW556",
9 + .expected_cpu_id = 0x6358,
10 +
11 + .has_uart0 = 1,
12 + .has_pci = 1,
13 + .has_ohci0 = 1,
14 + .has_ehci0 = 1,
15 +
16 + .has_caldata = 1,
17 + .caldata = {
18 + {
19 + .caldata_offset = 0xe00000,
20 + },
21 + },
22 +
23 + .has_enet1 = 1,
24 + .enet1 = {
25 + .has_phy = 1,
26 + .phy_id = 0,
27 + .force_speed_100 = 1,
28 + .force_duplex_full = 1,
29 + },
30 +
31 + .leds = {
32 + {
33 + .name = "HW556:red:message",
34 + .gpio = 0,
35 + .active_low = 1,
36 + },
37 + {
38 + .name = "HW556:red:hspa",
39 + .gpio = 1,
40 + .active_low = 1,
41 + },
42 + {
43 + .name = "HW556:red:dsl",
44 + .gpio = 2,
45 + .active_low = 1,
46 + },
47 + {
48 + .name = "HW556:red:power",
49 + .gpio = 3,
50 + .active_low = 1,
51 + .default_trigger = "default-on",
52 + },
53 + {
54 + .name = "HW556:red:all",
55 + .gpio = 6,
56 + .active_low = 1,
57 + .default_trigger = "default-on",
58 + },
59 + },
60 +
61 + .buttons = {
62 + {
63 + .desc = "help",
64 + .gpio = 8,
65 + .active_low = 1,
66 + .type = EV_KEY,
67 + .code = KEY_HELP,
68 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
69 + },
70 + {
71 + .desc = "wlan",
72 + .gpio = 9,
73 + .active_low = 1,
74 + .type = EV_KEY,
75 + .code = KEY_WLAN,
76 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
77 + },
78 + {
79 + .desc = "restart",
80 + .gpio = 10,
81 + .active_low = 1,
82 + .type = EV_KEY,
83 + .code = KEY_RESTART,
84 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
85 + },
86 + {
87 + .desc = "reset",
88 + .gpio = 11,
89 + .active_low = 1,
90 + .type = EV_KEY,
91 + .code = KEY_CONFIG,
92 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
93 + },
94 + },
95 +};
96 +static struct board_info __initdata board_HW556_A = {
97 + .name = "HW556_A",
98 + .expected_cpu_id = 0x6358,
99 +
100 + .has_uart0 = 1,
101 + .has_pci = 1,
102 + .has_ohci0 = 1,
103 + .has_ehci0 = 1,
104 +
105 + .has_caldata = 1,
106 + .caldata = {
107 + {
108 + .vendor = PCI_VENDOR_ID_RALINK,
109 + .caldata_offset = 0xeffe00,
110 + .slot = 1,
111 + .eeprom = "rt2x00.eeprom",
112 + },
113 + },
114 +
115 + .has_enet1 = 1,
116 + .enet1 = {
117 + .has_phy = 1,
118 + .phy_id = 0,
119 + .force_speed_100 = 1,
120 + .force_duplex_full = 1,
121 + },
122 +
123 + .leds = {
124 + {
125 + .name = "HW556:red:message",
126 + .gpio = 0,
127 + .active_low = 1,
128 + },
129 + {
130 + .name = "HW556:red:hspa",
131 + .gpio = 1,
132 + .active_low = 1,
133 + },
134 + {
135 + .name = "HW556:red:dsl",
136 + .gpio = 2,
137 + .active_low = 1,
138 + },
139 + {
140 + .name = "HW556:red:power",
141 + .gpio = 3,
142 + .active_low = 1,
143 + .default_trigger = "default-on",
144 + },
145 + {
146 + .name = "HW556:red:all",
147 + .gpio = 6,
148 + .active_low = 1,
149 + .default_trigger = "default-on",
150 + },
151 + },
152 +
153 + .buttons = {
154 + {
155 + .desc = "help",
156 + .gpio = 8,
157 + .active_low = 1,
158 + .type = EV_KEY,
159 + .code = KEY_HELP,
160 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
161 + },
162 + {
163 + .desc = "wlan",
164 + .gpio = 9,
165 + .active_low = 1,
166 + .type = EV_KEY,
167 + .code = KEY_WLAN,
168 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
169 + },
170 + {
171 + .desc = "restart",
172 + .gpio = 10,
173 + .active_low = 1,
174 + .type = EV_KEY,
175 + .code = KEY_RESTART,
176 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
177 + },
178 + {
179 + .desc = "reset",
180 + .gpio = 11,
181 + .active_low = 1,
182 + .type = EV_KEY,
183 + .code = KEY_CONFIG,
184 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
185 + },
186 + },
187 +};
188 +static struct board_info __initdata board_HW556_B = {
189 + .name = "HW556_B",
190 + .expected_cpu_id = 0x6358,
191 +
192 + .has_uart0 = 1,
193 + .has_pci = 1,
194 + .has_ohci0 = 1,
195 + .has_ehci0 = 1,
196 +
197 + .has_caldata = 1,
198 + .caldata = {
199 + {
200 + .vendor = PCI_VENDOR_ID_ATHEROS,
201 + .caldata_offset = 0xf7e000,
202 + .slot = 1,
203 + .endian_check = 1,
204 + .led_pin = 2,
205 + },
206 + },
207 +
208 + .has_enet1 = 1,
209 + .enet1 = {
210 + .has_phy = 1,
211 + .phy_id = 0,
212 + .force_speed_100 = 1,
213 + .force_duplex_full = 1,
214 + },
215 +
216 + .leds = {
217 + {
218 + .name = "HW556:red:message",
219 + .gpio = 0,
220 + .active_low = 1,
221 + },
222 + {
223 + .name = "HW556:red:hspa",
224 + .gpio = 1,
225 + .active_low = 1,
226 + },
227 + {
228 + .name = "HW556:red:dsl",
229 + .gpio = 2,
230 + .active_low = 1,
231 + },
232 + {
233 + .name = "HW556:red:power",
234 + .gpio = 3,
235 + .active_low = 1,
236 + .default_trigger = "default-on",
237 + },
238 + {
239 + .name = "HW556:red:all",
240 + .gpio = 6,
241 + .active_low = 1,
242 + .default_trigger = "default-on",
243 + },
244 + },
245 +
246 + .buttons = {
247 + {
248 + .desc = "help",
249 + .gpio = 8,
250 + .active_low = 1,
251 + .type = EV_KEY,
252 + .code = KEY_HELP,
253 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
254 + },
255 + {
256 + .desc = "wlan",
257 + .gpio = 9,
258 + .active_low = 1,
259 + .type = EV_KEY,
260 + .code = KEY_WLAN,
261 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
262 + },
263 + {
264 + .desc = "restart",
265 + .gpio = 10,
266 + .active_low = 1,
267 + .type = EV_KEY,
268 + .code = KEY_RESTART,
269 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
270 + },
271 + {
272 + .desc = "reset",
273 + .gpio = 11,
274 + .active_low = 1,
275 + .type = EV_KEY,
276 + .code = KEY_CONFIG,
277 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
278 + },
279 + },
280 +};
281 +static struct board_info __initdata board_HW556_C = {
282 + .name = "HW556_C",
283 + .expected_cpu_id = 0x6358,
284 +
285 + .has_uart0 = 1,
286 + .has_pci = 1,
287 + .has_ohci0 = 1,
288 + .has_ehci0 = 1,
289 +
290 + .has_caldata = 1,
291 + .caldata = {
292 + {
293 + .vendor = PCI_VENDOR_ID_ATHEROS,
294 + .caldata_offset = 0xefe000,
295 + .slot = 1,
296 + .endian_check = 1,
297 + .led_pin = 2,
298 + },
299 + },
300 +
301 + .has_enet1 = 1,
302 + .enet1 = {
303 + .has_phy = 1,
304 + .phy_id = 0,
305 + .force_speed_100 = 1,
306 + .force_duplex_full = 1,
307 + },
308 +
309 + .leds = {
310 + {
311 + .name = "HW556:red:message",
312 + .gpio = 0,
313 + .active_low = 1,
314 + },
315 + {
316 + .name = "HW556:red:hspa",
317 + .gpio = 1,
318 + .active_low = 1,
319 + },
320 + {
321 + .name = "HW556:red:dsl",
322 + .gpio = 2,
323 + .active_low = 1,
324 + },
325 + {
326 + .name = "HW556:red:power",
327 + .gpio = 3,
328 + .active_low = 1,
329 + .default_trigger = "default-on",
330 + },
331 + {
332 + .name = "HW556:red:all",
333 + .gpio = 6,
334 + .active_low = 1,
335 + .default_trigger = "default-on",
336 + },
337 + },
338 +
339 + .buttons = {
340 + {
341 + .desc = "help",
342 + .gpio = 8,
343 + .active_low = 1,
344 + .type = EV_KEY,
345 + .code = KEY_HELP,
346 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
347 + },
348 + {
349 + .desc = "wlan",
350 + .gpio = 9,
351 + .active_low = 1,
352 + .type = EV_KEY,
353 + .code = KEY_WLAN,
354 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
355 + },
356 + {
357 + .desc = "restart",
358 + .gpio = 10,
359 + .active_low = 1,
360 + .type = EV_KEY,
361 + .code = KEY_RESTART,
362 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
363 + },
364 + {
365 + .desc = "reset",
366 + .gpio = 11,
367 + .active_low = 1,
368 + .type = EV_KEY,
369 + .code = KEY_CONFIG,
370 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
371 + },
372 + },
373 +};
374 +
375 /* T-Home Speedport W 303V Typ B */
376 static struct board_info __initdata board_spw303v = {
377 .name = "96358-502V",
378 @@ -3286,6 +3654,10 @@ static const struct board_info __initcon
379 &board_nb4_fxc_r2,
380 &board_ct6373_1,
381 &board_HW553,
382 + &board_HW556,
383 + &board_HW556_A,
384 + &board_HW556_B,
385 + &board_HW556_C,
386 &board_spw303v,
387 &board_DVAG3810BN,
388 #endif
389 @@ -3351,13 +3723,37 @@ static void __init boardid_fixup(u8 *boo
390 struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
391 char *board_name = (char *)bcm63xx_nvram_get_name();
392
393 - if (BCMCPU_IS_6358() && (!strcmp(board_name, "96358VW"))) {
394 - u8 *p = boot_addr + NB4_PID_OFFSET;
395 -
396 - /* Extract nb4 PID */
397 - if (!memcmp(p, "NB4-", 4)) {
398 - memcpy(board_name, p, sizeof("NB4-XXX-rX"));
399 - return;
400 + if (BCMCPU_IS_6358()) {
401 + if (!strcmp(board_name, "96358VW")) {
402 + u8 *p = boot_addr + NB4_PID_OFFSET;
403 +
404 + /* Extract nb4 PID */
405 + if (!memcmp(p, "NB4-", 4)) {
406 + memcpy(board_name, p, sizeof("NB4-XXX-rX"));
407 + return;
408 + }
409 + } else if (!strcmp(board_name, "HW556")) {
410 + /*
411 + * HW556 has different wlan caldatas depending on
412 + * hardware version.
413 + * Detect hardware version and change board id
414 + */
415 + u8 cal_data_ath9k[4] = { 0xa5, 0x5a, 0, 0 };
416 + u8 cal_data_rt3062[4] = { 0x62, 0x30, 1, 0 };
417 +
418 + if (!memcmp(boot_addr + 0xeffe00,
419 + &cal_data_rt3062, 4)) {
420 + /* Ralink 0xeffe00 */
421 + memcpy(board_name, "HW556_A", 7);
422 + } else if (!memcmp(boot_addr + 0xf7e000,
423 + &cal_data_ath9k, 4)) {
424 + /* Atheros 0xf7e000 */
425 + memcpy(board_name, "HW556_B", 7);
426 + } else if (!memcmp(boot_addr + 0xefe000,
427 + &cal_data_ath9k, 4)) {
428 + /* Atheros 0xefe000 */
429 + memcpy(board_name, "HW556_C", 7);
430 + }
431 }
432 }
433
434 --- a/drivers/mtd/bcm63xxpart.c
435 +++ b/drivers/mtd/bcm63xxpart.c
436 @@ -70,6 +70,11 @@ static int bcm63xx_parse_cfe_partitions(
437 BCM63XX_CFE_BLOCK_SIZE);
438
439 cfelen = cfe_erasesize;
440 +
441 + /* Fix HW556 MX29LV128DB */
442 + if (!strncmp(bcm63xx_nvram_get_name(), "HW556", 5))
443 + cfelen = 0x20000;
444 +
445 nvramlen = bcm63xx_nvram_get_psi_size();
446 nvramlen = roundup(nvramlen, cfe_erasesize);
447 nvramaddr = master->size - nvramlen;