brcm63xx: fix BCM96318MVWG LEDs
[openwrt.git] / target / linux / brcm63xx / patches-3.10 / 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 @@ -3329,6 +3811,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 @@ -3394,13 +3880,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;