brcm63xx: Fixes and additions to the GPIO assignment of Huawei HW556 leds
[openwrt/svn-archive/archive.git] / target / linux / brcm63xx / patches-3.9 / 534-board_hw556.patch
1 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
2 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
3 @@ -2891,6 +2891,488 @@ 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:green:lan1",
126 + .gpio = 0,
127 + .active_low = 1,
128 + },
129 + {
130 + .name = "HW556:green:lan2",
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:message",
147 + .gpio = 12,
148 + .active_low = 1,
149 + },
150 + {
151 + .name = "HW556:red:lan1",
152 + .gpio = 13,
153 + .active_low = 1,
154 + },
155 + {
156 + .name = "HW556:red:hspa",
157 + .gpio = 15,
158 + .active_low = 1,
159 + },
160 + {
161 + .name = "HW556:red:lan2",
162 + .gpio = 22,
163 + .active_low = 1,
164 + },
165 + {
166 + .name = "HW556:green:lan3",
167 + .gpio = 23,
168 + .active_low = 1,
169 + },
170 + {
171 + .name = "HW556:red:lan3",
172 + .gpio = 26,
173 + .active_low = 1,
174 + },
175 + {
176 + .name = "HW556:green:lan4",
177 + .gpio = 27,
178 + .active_low = 1,
179 + },
180 + {
181 + .name = "HW556:red:lan4",
182 + .gpio = 28,
183 + .active_low = 1,
184 + },
185 + },
186 +
187 + .buttons = {
188 + {
189 + .desc = "help",
190 + .gpio = 8,
191 + .active_low = 1,
192 + .type = EV_KEY,
193 + .code = KEY_HELP,
194 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
195 + },
196 + {
197 + .desc = "wlan",
198 + .gpio = 9,
199 + .active_low = 1,
200 + .type = EV_KEY,
201 + .code = KEY_WLAN,
202 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
203 + },
204 + {
205 + .desc = "restart",
206 + .gpio = 10,
207 + .active_low = 1,
208 + .type = EV_KEY,
209 + .code = KEY_RESTART,
210 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
211 + },
212 + {
213 + .desc = "reset",
214 + .gpio = 11,
215 + .active_low = 1,
216 + .type = EV_KEY,
217 + .code = KEY_CONFIG,
218 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
219 + },
220 + },
221 +};
222 +static struct board_info __initdata board_HW556_B = {
223 + .name = "HW556_B",
224 + .expected_cpu_id = 0x6358,
225 +
226 + .has_uart0 = 1,
227 + .has_pci = 1,
228 + .has_ohci0 = 1,
229 + .has_ehci0 = 1,
230 +
231 + .has_caldata = 1,
232 + .caldata = {
233 + {
234 + .vendor = PCI_VENDOR_ID_ATHEROS,
235 + .caldata_offset = 0xf7e000,
236 + .slot = 1,
237 + .endian_check = 1,
238 + .led_pin = 2,
239 + },
240 + },
241 +
242 + .has_enet1 = 1,
243 + .enet1 = {
244 + .has_phy = 1,
245 + .phy_id = 0,
246 + .force_speed_100 = 1,
247 + .force_duplex_full = 1,
248 + },
249 +
250 + .leds = {
251 + {
252 + .name = "HW556:red:message",
253 + .gpio = 0,
254 + .active_low = 1,
255 + },
256 + {
257 + .name = "HW556:red:hspa",
258 + .gpio = 1,
259 + .active_low = 1,
260 + },
261 + {
262 + .name = "HW556:red:dsl",
263 + .gpio = 2,
264 + .active_low = 1,
265 + },
266 + {
267 + .name = "HW556:red:power",
268 + .gpio = 3,
269 + .active_low = 1,
270 + .default_trigger = "default-on",
271 + },
272 + {
273 + .name = "HW556:red:all",
274 + .gpio = 6,
275 + .active_low = 1,
276 + .default_trigger = "default-on",
277 + },
278 + {
279 + .name = "HW556:green:lan1",
280 + .gpio = 12,
281 + .active_low = 1,
282 + },
283 + {
284 + .name = "HW556:red:lan1",
285 + .gpio = 13,
286 + .active_low = 1,
287 + },
288 + {
289 + .name = "HW556:green:lan2",
290 + .gpio = 15,
291 + .active_low = 1,
292 + },
293 + {
294 + .name = "HW556:red:lan2",
295 + .gpio = 22,
296 + .active_low = 1,
297 + },
298 + {
299 + .name = "HW556:green:lan3",
300 + .gpio = 23,
301 + .active_low = 1,
302 + },
303 + {
304 + .name = "HW556:red:lan3",
305 + .gpio = 26,
306 + .active_low = 1,
307 + },
308 + {
309 + .name = "HW556:green:lan4",
310 + .gpio = 27,
311 + .active_low = 1,
312 + },
313 + {
314 + .name = "HW556:red:lan4",
315 + .gpio = 28,
316 + .active_low = 1,
317 + },
318 + },
319 +
320 + .buttons = {
321 + {
322 + .desc = "help",
323 + .gpio = 8,
324 + .active_low = 1,
325 + .type = EV_KEY,
326 + .code = KEY_HELP,
327 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
328 + },
329 + {
330 + .desc = "wlan",
331 + .gpio = 9,
332 + .active_low = 1,
333 + .type = EV_KEY,
334 + .code = KEY_WLAN,
335 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
336 + },
337 + {
338 + .desc = "restart",
339 + .gpio = 10,
340 + .active_low = 1,
341 + .type = EV_KEY,
342 + .code = KEY_RESTART,
343 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
344 + },
345 + {
346 + .desc = "reset",
347 + .gpio = 11,
348 + .active_low = 1,
349 + .type = EV_KEY,
350 + .code = KEY_CONFIG,
351 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
352 + },
353 + },
354 +};
355 +static struct board_info __initdata board_HW556_C = {
356 + .name = "HW556_C",
357 + .expected_cpu_id = 0x6358,
358 +
359 + .has_uart0 = 1,
360 + .has_pci = 1,
361 + .has_ohci0 = 1,
362 + .has_ehci0 = 1,
363 +
364 + .has_caldata = 1,
365 + .caldata = {
366 + {
367 + .vendor = PCI_VENDOR_ID_ATHEROS,
368 + .caldata_offset = 0xefe000,
369 + .slot = 1,
370 + .endian_check = 1,
371 + .led_pin = 2,
372 + },
373 + },
374 +
375 + .has_enet1 = 1,
376 + .enet1 = {
377 + .has_phy = 1,
378 + .phy_id = 0,
379 + .force_speed_100 = 1,
380 + .force_duplex_full = 1,
381 + },
382 +
383 + .leds = {
384 + {
385 + .name = "HW556:red:message",
386 + .gpio = 0,
387 + .active_low = 1,
388 + },
389 + {
390 + .name = "HW556:red:hspa",
391 + .gpio = 1,
392 + .active_low = 1,
393 + },
394 + {
395 + .name = "HW556:red:dsl",
396 + .gpio = 2,
397 + .active_low = 1,
398 + },
399 + {
400 + .name = "HW556:red:power",
401 + .gpio = 3,
402 + .active_low = 1,
403 + .default_trigger = "default-on",
404 + },
405 + {
406 + .name = "HW556:red:all",
407 + .gpio = 6,
408 + .active_low = 1,
409 + .default_trigger = "default-on",
410 + },
411 + {
412 + .name = "HW556:green:lan1",
413 + .gpio = 12,
414 + .active_low = 1,
415 + },
416 + {
417 + .name = "HW556:red:lan1",
418 + .gpio = 13,
419 + .active_low = 1,
420 + },
421 + {
422 + .name = "HW556:green:lan2",
423 + .gpio = 15,
424 + .active_low = 1,
425 + },
426 + {
427 + .name = "HW556:red:lan2",
428 + .gpio = 22,
429 + .active_low = 1,
430 + },
431 + {
432 + .name = "HW556:green:lan3",
433 + .gpio = 23,
434 + .active_low = 1,
435 + },
436 + {
437 + .name = "HW556:red:lan3",
438 + .gpio = 26,
439 + .active_low = 1,
440 + },
441 + {
442 + .name = "HW556:green:lan4",
443 + .gpio = 27,
444 + .active_low = 1,
445 + },
446 + {
447 + .name = "HW556:red:lan4",
448 + .gpio = 28,
449 + .active_low = 1,
450 + },
451 + },
452 +
453 + .buttons = {
454 + {
455 + .desc = "help",
456 + .gpio = 8,
457 + .active_low = 1,
458 + .type = EV_KEY,
459 + .code = KEY_HELP,
460 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
461 + },
462 + {
463 + .desc = "wlan",
464 + .gpio = 9,
465 + .active_low = 1,
466 + .type = EV_KEY,
467 + .code = KEY_WLAN,
468 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
469 + },
470 + {
471 + .desc = "restart",
472 + .gpio = 10,
473 + .active_low = 1,
474 + .type = EV_KEY,
475 + .code = KEY_RESTART,
476 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
477 + },
478 + {
479 + .desc = "reset",
480 + .gpio = 11,
481 + .active_low = 1,
482 + .type = EV_KEY,
483 + .code = KEY_CONFIG,
484 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
485 + },
486 + },
487 +};
488 +
489 /* T-Home Speedport W 303V Typ B */
490 static struct board_info __initdata board_spw303v = {
491 .name = "96358-502V",
492 @@ -3322,6 +3804,10 @@ static const struct board_info __initcon
493 &board_nb4_fxc_r2,
494 &board_ct6373_1,
495 &board_HW553,
496 + &board_HW556,
497 + &board_HW556_A,
498 + &board_HW556_B,
499 + &board_HW556_C,
500 &board_spw303v,
501 &board_DVAG3810BN,
502 #endif
503 @@ -3387,13 +3873,37 @@ static void __init boardid_fixup(u8 *boo
504 struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
505 char *board_name = (char *)bcm63xx_nvram_get_name();
506
507 - if (BCMCPU_IS_6358() && (!strcmp(board_name, "96358VW"))) {
508 - u8 *p = boot_addr + NB4_PID_OFFSET;
509 -
510 - /* Extract nb4 PID */
511 - if (!memcmp(p, "NB4-", 4)) {
512 - memcpy(board_name, p, sizeof("NB4-XXX-rX"));
513 - return;
514 + if (BCMCPU_IS_6358()) {
515 + if (!strcmp(board_name, "96358VW")) {
516 + u8 *p = boot_addr + NB4_PID_OFFSET;
517 +
518 + /* Extract nb4 PID */
519 + if (!memcmp(p, "NB4-", 4)) {
520 + memcpy(board_name, p, sizeof("NB4-XXX-rX"));
521 + return;
522 + }
523 + } else if (!strcmp(board_name, "HW556")) {
524 + /*
525 + * HW556 has different wlan caldatas depending on
526 + * hardware version.
527 + * Detect hardware version and change board id
528 + */
529 + u8 cal_data_ath9k[4] = { 0xa5, 0x5a, 0, 0 };
530 + u8 cal_data_rt3062[4] = { 0x62, 0x30, 1, 0 };
531 +
532 + if (!memcmp(boot_addr + 0xeffe00,
533 + &cal_data_rt3062, 4)) {
534 + /* Ralink 0xeffe00 */
535 + memcpy(board_name, "HW556_A", 7);
536 + } else if (!memcmp(boot_addr + 0xf7e000,
537 + &cal_data_ath9k, 4)) {
538 + /* Atheros 0xf7e000 */
539 + memcpy(board_name, "HW556_B", 7);
540 + } else if (!memcmp(boot_addr + 0xefe000,
541 + &cal_data_ath9k, 4)) {
542 + /* Atheros 0xefe000 */
543 + memcpy(board_name, "HW556_C", 7);
544 + }
545 }
546 }
547
548 --- a/drivers/mtd/bcm63xxpart.c
549 +++ b/drivers/mtd/bcm63xxpart.c
550 @@ -70,6 +70,11 @@ static int bcm63xx_parse_cfe_partitions(
551 BCM63XX_CFE_BLOCK_SIZE);
552
553 cfelen = cfe_erasesize;
554 +
555 + /* Fix HW556 MX29LV128DB */
556 + if (!strncmp(bcm63xx_nvram_get_name(), "HW556", 5))
557 + cfelen = 0x20000;
558 +
559 nvramlen = bcm63xx_nvram_get_psi_size();
560 nvramlen = roundup(nvramlen, cfe_erasesize);
561 nvramaddr = master->size - nvramlen;