brcm63xx: set usb host port number for some devices
[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 @@ -2900,6 +2900,489 @@ 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 +       .num_usbh_ports                         = 2,
16 +
17 +       .has_caldata                            = 1,
18 +       .caldata = {
19 +               {
20 +                       .caldata_offset         = 0xe00000,
21 +               },
22 +       },
23 +
24 +       .has_enet1                              = 1,
25 +       .enet1 = {
26 +               .has_phy                        = 1,
27 +               .phy_id                         = 0,
28 +               .force_speed_100                = 1,
29 +               .force_duplex_full              = 1,
30 +       },
31 +
32 +       .leds = {
33 +               {
34 +                       .name                   = "HW556:red:message",
35 +                       .gpio                   = 0,
36 +                       .active_low             = 1,
37 +               },
38 +               {
39 +                       .name                   = "HW556:red:hspa",
40 +                       .gpio                   = 1,
41 +                       .active_low             = 1,
42 +               },
43 +               {
44 +                       .name                   = "HW556:red:dsl",
45 +                       .gpio                   = 2,
46 +                       .active_low             = 1,
47 +               },
48 +               {
49 +                       .name                   = "HW556:red:power",
50 +                       .gpio                   = 3,
51 +                       .active_low             = 1,
52 +                       .default_trigger        = "default-on",
53 +               },
54 +               {
55 +                       .name                   = "HW556:red:all",
56 +                       .gpio                   = 6,
57 +                       .active_low             = 1,
58 +                       .default_trigger        = "default-on",
59 +               },
60 +       },
61 +
62 +       .buttons = {
63 +               {
64 +                       .desc                   = "help",
65 +                       .gpio                   = 8,
66 +                       .active_low             = 1,
67 +                       .type                   = EV_KEY,
68 +                       .code                   = KEY_HELP,
69 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
70 +               },
71 +               {
72 +                       .desc                   = "wlan",
73 +                       .gpio                   = 9,
74 +                       .active_low             = 1,
75 +                       .type                   = EV_KEY,
76 +                       .code                   = KEY_WLAN,
77 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
78 +               },
79 +               {
80 +                       .desc                   = "restart",
81 +                       .gpio                   = 10,
82 +                       .active_low             = 1,
83 +                       .type                   = EV_KEY,
84 +                       .code                   = KEY_RESTART,
85 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
86 +               },
87 +               {
88 +                       .desc                   = "reset",
89 +                       .gpio                   = 11,
90 +                       .active_low             = 1,
91 +                       .type                   = EV_KEY,
92 +                       .code                   = KEY_CONFIG,
93 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
94 +               },
95 +       },
96 +};
97 +static struct board_info __initdata board_HW556_A = {
98 +       .name                                   = "HW556_A",
99 +       .expected_cpu_id                        = 0x6358,
100 +
101 +       .has_uart0                              = 1,
102 +       .has_pci                                = 1,
103 +       .has_ohci0                              = 1,
104 +       .has_ehci0                              = 1,
105 +
106 +       .has_caldata                            = 1,
107 +       .caldata = {
108 +               {
109 +                       .vendor                 = PCI_VENDOR_ID_RALINK,
110 +                       .caldata_offset         = 0xeffe00,
111 +                       .slot                   = 1,
112 +                       .eeprom                 = "rt2x00.eeprom",
113 +               },
114 +       },
115 +
116 +       .has_enet1                              = 1,
117 +       .enet1 = {
118 +               .has_phy                        = 1,
119 +               .phy_id                         = 0,
120 +               .force_speed_100                = 1,
121 +               .force_duplex_full              = 1,
122 +       },
123 +
124 +       .leds = {
125 +               {
126 +                       .name                   = "HW556:green:lan1",
127 +                       .gpio                   = 0,
128 +                       .active_low             = 1,
129 +               },
130 +               {
131 +                       .name                   = "HW556:green:lan2",
132 +                       .gpio                   = 1,
133 +                       .active_low             = 1,
134 +               },
135 +               {
136 +                       .name                   = "HW556:red:dsl",
137 +                       .gpio                   = 2,
138 +                       .active_low             = 1,
139 +               },
140 +               {
141 +                       .name                   = "HW556:red:power",
142 +                       .gpio                   = 3,
143 +                       .active_low             = 1,
144 +                       .default_trigger        = "default-on",
145 +               },
146 +               {
147 +                       .name                   = "HW556:red:message",
148 +                       .gpio                   = 12,
149 +                       .active_low             = 1,
150 +               },
151 +               {
152 +                       .name                   = "HW556:red:lan1",
153 +                       .gpio                   = 13,
154 +                       .active_low             = 1,
155 +               },
156 +               {
157 +                       .name                   = "HW556:red:hspa",
158 +                       .gpio                   = 15,
159 +                       .active_low             = 1,
160 +               },
161 +               {
162 +                       .name                   = "HW556:red:lan2",
163 +                       .gpio                   = 22,
164 +                       .active_low             = 1,
165 +               },
166 +               {
167 +                       .name                   = "HW556:green:lan3",
168 +                       .gpio                   = 23,
169 +                       .active_low             = 1,
170 +               },
171 +               {
172 +                       .name                   = "HW556:red:lan3",
173 +                       .gpio                   = 26,
174 +                       .active_low             = 1,
175 +               },
176 +               {
177 +                       .name                   = "HW556:green:lan4",
178 +                       .gpio                   = 27,
179 +                       .active_low             = 1,
180 +               },
181 +               {
182 +                       .name                   = "HW556:red:lan4",
183 +                       .gpio                   = 28,
184 +                       .active_low             = 1,
185 +               },
186 +       },
187 +
188 +       .buttons = {
189 +               {
190 +                       .desc                   = "help",
191 +                       .gpio                   = 8,
192 +                       .active_low             = 1,
193 +                       .type                   = EV_KEY,
194 +                       .code                   = KEY_HELP,
195 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
196 +               },
197 +               {
198 +                       .desc                   = "wlan",
199 +                       .gpio                   = 9,
200 +                       .active_low             = 1,
201 +                       .type                   = EV_KEY,
202 +                       .code                   = KEY_WLAN,
203 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
204 +               },
205 +               {
206 +                       .desc                   = "restart",
207 +                       .gpio                   = 10,
208 +                       .active_low             = 1,
209 +                       .type                   = EV_KEY,
210 +                       .code                   = KEY_RESTART,
211 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
212 +               },
213 +               {
214 +                       .desc                   = "reset",
215 +                       .gpio                   = 11,
216 +                       .active_low             = 1,
217 +                       .type                   = EV_KEY,
218 +                       .code                   = KEY_CONFIG,
219 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
220 +               },
221 +       },
222 +};
223 +static struct board_info __initdata board_HW556_B = {
224 +       .name                                   = "HW556_B",
225 +       .expected_cpu_id                        = 0x6358,
226 +
227 +       .has_uart0                              = 1,
228 +       .has_pci                                = 1,
229 +       .has_ohci0                              = 1,
230 +       .has_ehci0                              = 1,
231 +
232 +       .has_caldata                            = 1,
233 +       .caldata = {
234 +               {
235 +                       .vendor                 = PCI_VENDOR_ID_ATHEROS,
236 +                       .caldata_offset         = 0xf7e000,
237 +                       .slot                   = 1,
238 +                       .endian_check           = 1,
239 +                       .led_pin                = 2,
240 +               },
241 +       },
242 +
243 +       .has_enet1                              = 1,
244 +       .enet1 = {
245 +               .has_phy                        = 1,
246 +               .phy_id                         = 0,
247 +               .force_speed_100                = 1,
248 +               .force_duplex_full              = 1,
249 +       },
250 +
251 +       .leds = {
252 +               {
253 +                       .name                   = "HW556:red:message",
254 +                       .gpio                   = 0,
255 +                       .active_low             = 1,
256 +               },
257 +               {
258 +                       .name                   = "HW556:red:hspa",
259 +                       .gpio                   = 1,
260 +                       .active_low             = 1,
261 +               },
262 +               {
263 +                       .name                   = "HW556:red:dsl",
264 +                       .gpio                   = 2,
265 +                       .active_low             = 1,
266 +               },
267 +               {
268 +                       .name                   = "HW556:red:power",
269 +                       .gpio                   = 3,
270 +                       .active_low             = 1,
271 +                       .default_trigger        = "default-on",
272 +               },
273 +               {
274 +                       .name                   = "HW556:red:all",
275 +                       .gpio                   = 6,
276 +                       .active_low             = 1,
277 +                       .default_trigger        = "default-on",
278 +               },
279 +               {
280 +                       .name                   = "HW556:green:lan1",
281 +                       .gpio                   = 12,
282 +                       .active_low             = 1,
283 +               },
284 +               {
285 +                       .name                   = "HW556:red:lan1",
286 +                       .gpio                   = 13,
287 +                       .active_low             = 1,
288 +               },
289 +               {
290 +                       .name                   = "HW556:green:lan2",
291 +                       .gpio                   = 15,
292 +                       .active_low             = 1,
293 +               },
294 +               {
295 +                       .name                   = "HW556:red:lan2",
296 +                       .gpio                   = 22,
297 +                       .active_low             = 1,
298 +               },
299 +               {
300 +                       .name                   = "HW556:green:lan3",
301 +                       .gpio                   = 23,
302 +                       .active_low             = 1,
303 +               },
304 +               {
305 +                       .name                   = "HW556:red:lan3",
306 +                       .gpio                   = 26,
307 +                       .active_low             = 1,
308 +               },
309 +               {
310 +                       .name                   = "HW556:green:lan4",
311 +                       .gpio                   = 27,
312 +                       .active_low             = 1,
313 +               },
314 +               {
315 +                       .name                   = "HW556:red:lan4",
316 +                       .gpio                   = 28,
317 +                       .active_low             = 1,
318 +               },
319 +       },
320 +
321 +       .buttons = {
322 +               {
323 +                       .desc                   = "help",
324 +                       .gpio                   = 8,
325 +                       .active_low             = 1,
326 +                       .type                   = EV_KEY,
327 +                       .code                   = KEY_HELP,
328 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
329 +               },
330 +               {
331 +                       .desc                   = "wlan",
332 +                       .gpio                   = 9,
333 +                       .active_low             = 1,
334 +                       .type                   = EV_KEY,
335 +                       .code                   = KEY_WLAN,
336 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
337 +               },
338 +               {
339 +                       .desc                   = "restart",
340 +                       .gpio                   = 10,
341 +                       .active_low             = 1,
342 +                       .type                   = EV_KEY,
343 +                       .code                   = KEY_RESTART,
344 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
345 +               },
346 +               {
347 +                       .desc                   = "reset",
348 +                       .gpio                   = 11,
349 +                       .active_low             = 1,
350 +                       .type                   = EV_KEY,
351 +                       .code                   = KEY_CONFIG,
352 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
353 +               },
354 +       },
355 +};
356 +static struct board_info __initdata board_HW556_C = {
357 +       .name                                   = "HW556_C",
358 +       .expected_cpu_id                        = 0x6358,
359 +
360 +       .has_uart0                              = 1,
361 +       .has_pci                                = 1,
362 +       .has_ohci0                              = 1,
363 +       .has_ehci0                              = 1,
364 +
365 +       .has_caldata                            = 1,
366 +       .caldata = {
367 +               {
368 +                       .vendor                 = PCI_VENDOR_ID_ATHEROS,
369 +                       .caldata_offset         = 0xefe000,
370 +                       .slot                   = 1,
371 +                       .endian_check           = 1,
372 +                       .led_pin                = 2,
373 +               },
374 +       },
375 +
376 +       .has_enet1                              = 1,
377 +       .enet1 = {
378 +               .has_phy                        = 1,
379 +               .phy_id                         = 0,
380 +               .force_speed_100                = 1,
381 +               .force_duplex_full              = 1,
382 +       },
383 +
384 +       .leds = {
385 +               {
386 +                       .name                   = "HW556:red:message",
387 +                       .gpio                   = 0,
388 +                       .active_low             = 1,
389 +               },
390 +               {
391 +                       .name                   = "HW556:red:hspa",
392 +                       .gpio                   = 1,
393 +                       .active_low             = 1,
394 +               },
395 +               {
396 +                       .name                   = "HW556:red:dsl",
397 +                       .gpio                   = 2,
398 +                       .active_low             = 1,
399 +               },
400 +               {
401 +                       .name                   = "HW556:red:power",
402 +                       .gpio                   = 3,
403 +                       .active_low             = 1,
404 +                       .default_trigger        = "default-on",
405 +               },
406 +               {
407 +                       .name                   = "HW556:red:all",
408 +                       .gpio                   = 6,
409 +                       .active_low             = 1,
410 +                       .default_trigger        = "default-on",
411 +               },
412 +               {
413 +                       .name                   = "HW556:green:lan1",
414 +                       .gpio                   = 12,
415 +                       .active_low             = 1,
416 +               },
417 +               {
418 +                       .name                   = "HW556:red:lan1",
419 +                       .gpio                   = 13,
420 +                       .active_low             = 1,
421 +               },
422 +               {
423 +                       .name                   = "HW556:green:lan2",
424 +                       .gpio                   = 15,
425 +                       .active_low             = 1,
426 +               },
427 +               {
428 +                       .name                   = "HW556:red:lan2",
429 +                       .gpio                   = 22,
430 +                       .active_low             = 1,
431 +               },
432 +               {
433 +                       .name                   = "HW556:green:lan3",
434 +                       .gpio                   = 23,
435 +                       .active_low             = 1,
436 +               },
437 +               {
438 +                       .name                   = "HW556:red:lan3",
439 +                       .gpio                   = 26,
440 +                       .active_low             = 1,
441 +               },
442 +               {
443 +                       .name                   = "HW556:green:lan4",
444 +                       .gpio                   = 27,
445 +                       .active_low             = 1,
446 +               },
447 +               {
448 +                       .name                   = "HW556:red:lan4",
449 +                       .gpio                   = 28,
450 +                       .active_low             = 1,
451 +               },
452 +       },
453 +
454 +       .buttons = {
455 +               {
456 +                       .desc                   = "help",
457 +                       .gpio                   = 8,
458 +                       .active_low             = 1,
459 +                       .type                   = EV_KEY,
460 +                       .code                   = KEY_HELP,
461 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
462 +               },
463 +               {
464 +                       .desc                   = "wlan",
465 +                       .gpio                   = 9,
466 +                       .active_low             = 1,
467 +                       .type                   = EV_KEY,
468 +                       .code                   = KEY_WLAN,
469 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
470 +               },
471 +               {
472 +                       .desc                   = "restart",
473 +                       .gpio                   = 10,
474 +                       .active_low             = 1,
475 +                       .type                   = EV_KEY,
476 +                       .code                   = KEY_RESTART,
477 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
478 +               },
479 +               {
480 +                       .desc                   = "reset",
481 +                       .gpio                   = 11,
482 +                       .active_low             = 1,
483 +                       .type                   = EV_KEY,
484 +                       .code                   = KEY_CONFIG,
485 +                       .debounce_interval      = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
486 +               },
487 +       },
488 +};
489 +
490   /* T-Home Speedport W 303V Typ B */
491  static struct board_info __initdata board_spw303v = {
492         .name                   = "96358-502V",
493 @@ -3339,6 +3822,10 @@ static const struct board_info __initcon
494         &board_nb4_fxc_r2,
495         &board_ct6373_1,
496         &board_HW553,
497 +       &board_HW556,
498 +       &board_HW556_A,
499 +       &board_HW556_B,
500 +       &board_HW556_C,
501         &board_spw303v,
502         &board_DVAG3810BN,
503  #endif
504 @@ -3404,13 +3891,37 @@ static void __init boardid_fixup(u8 *boo
505         struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
506         char *board_name = (char *)bcm63xx_nvram_get_name();
507  
508 -       if (BCMCPU_IS_6358() && (!strcmp(board_name, "96358VW"))) {
509 -               u8 *p = boot_addr + NB4_PID_OFFSET;
510 -
511 -               /* Extract nb4 PID */
512 -               if (!memcmp(p, "NB4-", 4)) {
513 -                       memcpy(board_name, p, sizeof("NB4-XXX-rX"));
514 -                       return;
515 +       if (BCMCPU_IS_6358()) {
516 +               if (!strcmp(board_name, "96358VW")) {
517 +                       u8 *p = boot_addr + NB4_PID_OFFSET;
518 +
519 +                       /* Extract nb4 PID */
520 +                       if (!memcmp(p, "NB4-", 4)) {
521 +                               memcpy(board_name, p, sizeof("NB4-XXX-rX"));
522 +                               return;
523 +                       }
524 +               } else if (!strcmp(board_name, "HW556")) {
525 +                       /*
526 +                        * HW556 has different wlan caldatas depending on
527 +                        * hardware version.
528 +                        * Detect hardware version and change board id
529 +                        */
530 +                       u8 cal_data_ath9k[4] = { 0xa5, 0x5a, 0, 0 };
531 +                       u8 cal_data_rt3062[4] = { 0x62, 0x30, 1, 0 };
532 +
533 +                       if (!memcmp(boot_addr + 0xeffe00,
534 +                                   &cal_data_rt3062, 4)) {
535 +                               /* Ralink 0xeffe00 */
536 +                               memcpy(board_name, "HW556_A", 7);
537 +                       } else if (!memcmp(boot_addr + 0xf7e000,
538 +                                          &cal_data_ath9k, 4)) {
539 +                               /* Atheros 0xf7e000 */
540 +                               memcpy(board_name, "HW556_B", 7);
541 +                       } else if (!memcmp(boot_addr + 0xefe000,
542 +                                          &cal_data_ath9k, 4)) {
543 +                               /* Atheros 0xefe000 */
544 +                               memcpy(board_name, "HW556_C", 7);
545 +                       }
546                 }
547         }
548  
549 --- a/drivers/mtd/bcm63xxpart.c
550 +++ b/drivers/mtd/bcm63xxpart.c
551 @@ -70,6 +70,11 @@ static int bcm63xx_parse_cfe_partitions(
552                               BCM63XX_CFE_BLOCK_SIZE);
553  
554         cfelen = cfe_erasesize;
555 +
556 +       /* Fix HW556 MX29LV128DB */
557 +       if (!strncmp(bcm63xx_nvram_get_name(), "HW556", 5))
558 +               cfelen = 0x20000;
559 +
560         nvramlen = bcm63xx_nvram_get_psi_size();
561         nvramlen = roundup(nvramlen, cfe_erasesize);
562         nvramaddr = master->size - nvramlen;