brcm63xx: set usb host port number for some devices
[openwrt.git] / target / linux / brcm63xx / patches-3.10 / 501-board-NB4.patch
1 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
2 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
3 @@ -15,6 +15,8 @@
4  #include <linux/gpio_keys.h>
5  #include <linux/input.h>
6  #include <linux/spi/spi.h>
7 +#include <linux/spi/spi_gpio.h>
8 +#include <linux/spi/74x164.h>
9  #include <asm/addrspace.h>
10  #include <bcm63xx_board.h>
11  #include <bcm63xx_cpu.h>
12 @@ -49,6 +51,12 @@
13  #define CFE_OFFSET_64K                 0x10000
14  #define CFE_OFFSET_128K                        0x20000
15  
16 +#define NB4_PID_OFFSET         0xff80
17 +#define NB4_74X164_GPIO_BASE   64
18 +#define NB4_SPI_GPIO_MOSI      7
19 +#define NB4_SPI_GPIO_CLK       6
20 +#define NB4_74HC64_GPIO(X)     (NB4_74X164_GPIO_BASE + (X))
21 +
22  static struct board_info board;
23  
24  /*
25 @@ -754,6 +762,601 @@ static struct board_info __initdata boar
26  
27         .has_ohci0                      = 1,
28  };
29 +
30 +struct spi_gpio_platform_data nb4_spi_gpio_data = {
31 +       .sck            = NB4_SPI_GPIO_CLK,
32 +       .mosi           = NB4_SPI_GPIO_MOSI,
33 +       .miso           = SPI_GPIO_NO_MISO,
34 +       .num_chipselect = 1,
35 +};
36 +
37 +
38 +static struct platform_device nb4_spi_gpio = {
39 +       .name = "spi_gpio",
40 +       .id   = 1,
41 +       .dev = {
42 +               .platform_data = &nb4_spi_gpio_data,
43 +       },
44 +};
45 +
46 +static struct platform_device * __initdata nb4_devices[] = {
47 +       &nb4_spi_gpio,
48 +};
49 +
50 +const struct gen_74x164_chip_platform_data nb4_74x164_platform_data = {
51 +       .base = NB4_74X164_GPIO_BASE
52 +};
53 +
54 +static struct spi_board_info nb4_spi_devices[] = {
55 +       {
56 +               .modalias = "74x164",
57 +               .max_speed_hz = 781000,
58 +               .bus_num = 1,
59 +               .controller_data = (void *) SPI_GPIO_NO_CHIPSELECT,
60 +               .mode = SPI_MODE_0,
61 +               .platform_data = &nb4_74x164_platform_data
62 +       }
63 +};
64 +
65 +static struct board_info __initdata board_nb4_ser_r0 = {
66 +       .name                           = "NB4-SER-r0",
67 +       .expected_cpu_id                = 0x6358,
68 +
69 +       .has_uart0                      = 1,
70 +       .has_enet0                      = 1,
71 +       .has_enet1                      = 1,
72 +       .has_pci                        = 1,
73 +
74 +       .enet0 = {
75 +               .has_phy                = 1,
76 +               .use_internal_phy       = 1,
77 +       },
78 +
79 +       .enet1 = {
80 +               .has_phy                = 1,
81 +               .phy_id                 = 0,
82 +               .force_speed_100        = 1,
83 +               .force_duplex_full      = 1,
84 +       },
85 +
86 +
87 +       .has_ohci0 = 1,
88 +       .has_pccard = 1,
89 +       .has_ehci0 = 1,
90 +       .num_usbh_ports                 = 2,
91 +
92 +       .leds = {
93 +               {
94 +                       .name           = "NB4-SER-r0:white:adsl",
95 +                       .gpio           = NB4_74HC64_GPIO(4),
96 +                       .active_low     = 1,
97 +               },
98 +               {
99 +                       .name           = "NB4-SER-r0:white:traffic",
100 +                       .gpio           = 2,
101 +                       .active_low     = 1,
102 +               },
103 +               {
104 +                       .name           = "NB4-SER-r0:white:tel",
105 +                       .gpio           = NB4_74HC64_GPIO(3),
106 +                       .active_low     = 1,
107 +               },
108 +               {
109 +                       .name           = "NB4-SER-r0:white:tv",
110 +                       .gpio           = NB4_74HC64_GPIO(2),
111 +                       .active_low     = 1,
112 +               },
113 +               {
114 +                       .name           = "NB4-SER-r0:white:wifi",
115 +                       .gpio           = 15,
116 +                       .active_low     = 1,
117 +               },
118 +               {
119 +                       .name           = "NB4-SER-r0:white:alarm",
120 +                       .gpio           = NB4_74HC64_GPIO(0),
121 +                       .active_low     = 1,
122 +               },
123 +               {
124 +                       .name           = "NB4-SER-r0:red:service",
125 +                       .gpio           = 29,
126 +                       .active_low     = 1,
127 +               },
128 +               {
129 +                       .name           = "NB4-SER-r0:green:service",
130 +                       .gpio           = 30,
131 +                       .active_low     = 1,
132 +               },
133 +               {
134 +                       .name           = "NB4-SER-r0:blue:service",
135 +                       .gpio           = 4,
136 +                       .active_low     = 1,
137 +               },
138 +       },
139 +       .buttons = {
140 +               {
141 +                       .desc           = "reset",
142 +                       .gpio           = 34,
143 +                       .type           = EV_KEY,
144 +                       .code           = KEY_RESTART,
145 +                       .active_low     = 1,
146 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
147 +               },
148 +               {
149 +                       .desc           = "wps",
150 +                       .gpio           = 37,
151 +                       .type           = EV_KEY,
152 +                       .code           = KEY_WPS_BUTTON,
153 +                       .active_low     = 1,
154 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
155 +               },
156 +               {
157 +                       .desc           = "service",
158 +                       .gpio           = 27,
159 +                       .type           = EV_KEY,
160 +                       .code           = BTN_0,
161 +                       .active_low     = 1,
162 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
163 +               },
164 +               {
165 +                       .desc           = "clip",
166 +                       .gpio           = 31,
167 +                       .type           = EV_KEY,
168 +                       .code           = BTN_1,
169 +                       .active_low     = 1,
170 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
171 +               },
172 +       },
173 +       .devs = nb4_devices,
174 +       .num_devs = ARRAY_SIZE(nb4_devices),
175 +       .spis = nb4_spi_devices,
176 +       .num_spis = ARRAY_SIZE(nb4_spi_devices),
177 +};
178 +
179 +static struct board_info __initdata board_nb4_ser_r1 = {
180 +       .name                           = "NB4-SER-r1",
181 +       .expected_cpu_id                = 0x6358,
182 +
183 +       .has_uart0                      = 1,
184 +       .has_enet0                      = 1,
185 +       .has_enet1                      = 1,
186 +       .has_pci                        = 1,
187 +
188 +       .enet0 = {
189 +               .has_phy                = 1,
190 +               .use_internal_phy       = 1,
191 +       },
192 +
193 +       .enet1 = {
194 +               .has_phy                = 1,
195 +               .phy_id                 = 0,
196 +               .force_speed_100        = 1,
197 +               .force_duplex_full      = 1,
198 +       },
199 +
200 +
201 +       .has_ohci0 = 1,
202 +       .has_pccard = 1,
203 +       .has_ehci0 = 1,
204 +       .num_usbh_ports                 = 2,
205 +
206 +       .leds = {
207 +               {
208 +                       .name           = "NB4-SER-r1:white:adsl",
209 +                       .gpio           = NB4_74HC64_GPIO(4),
210 +                       .active_low     = 1,
211 +               },
212 +               {
213 +                       .name           = "NB4-SER-r1:white:traffic",
214 +                       .gpio           = 2,
215 +                       .active_low     = 1,
216 +               },
217 +               {
218 +                       .name           = "NB4-SER-r1:white:tel",
219 +                       .gpio           = NB4_74HC64_GPIO(3),
220 +                       .active_low     = 1,
221 +               },
222 +               {
223 +                       .name           = "NB4-SER-r1:white:tv",
224 +                       .gpio           = NB4_74HC64_GPIO(2),
225 +                       .active_low     = 1,
226 +               },
227 +               {
228 +                       .name           = "NB4-SER-r1:white:wifi",
229 +                       .gpio           = 15,
230 +                       .active_low     = 1,
231 +               },
232 +               {
233 +                       .name           = "NB4-SER-r1:white:alarm",
234 +                       .gpio           = NB4_74HC64_GPIO(0),
235 +                       .active_low     = 1,
236 +               },
237 +               {
238 +                       .name           = "NB4-SER-r1:red:service",
239 +                       .gpio           = 29,
240 +                       .active_low     = 1,
241 +               },
242 +               {
243 +                       .name           = "NB4-SER-r1:green:service",
244 +                       .gpio           = 30,
245 +                       .active_low     = 1,
246 +               },
247 +               {
248 +                       .name           = "NB4-SER-r1:blue:service",
249 +                       .gpio           = 4,
250 +                       .active_low     = 1,
251 +               },
252 +       },
253 +       .buttons = {
254 +               {
255 +                       .desc           = "reset",
256 +                       .gpio           = 34,
257 +                       .type           = EV_KEY,
258 +                       .code           = KEY_RESTART,
259 +                       .active_low     = 1,
260 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
261 +               },
262 +               {
263 +                       .desc           = "wps",
264 +                       .gpio           = 37,
265 +                       .type           = EV_KEY,
266 +                       .code           = KEY_WPS_BUTTON,
267 +                       .active_low     = 1,
268 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
269 +               },
270 +               {
271 +                       .desc           = "service",
272 +                       .gpio           = 27,
273 +                       .type           = EV_KEY,
274 +                       .code           = BTN_0,
275 +                       .active_low     = 1,
276 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
277 +               },
278 +               {
279 +                       .desc           = "clip",
280 +                       .gpio           = 31,
281 +                       .type           = EV_KEY,
282 +                       .code           = BTN_1,
283 +                       .active_low     = 1,
284 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
285 +               },
286 +       },
287 +       .devs = nb4_devices,
288 +       .num_devs = ARRAY_SIZE(nb4_devices),
289 +       .spis = nb4_spi_devices,
290 +       .num_spis = ARRAY_SIZE(nb4_spi_devices),
291 +};
292 +
293 +static struct board_info __initdata board_nb4_ser_r2 = {
294 +       .name                           = "NB4-SER-r2",
295 +       .expected_cpu_id                = 0x6358,
296 +
297 +       .has_uart0                      = 1,
298 +       .has_enet0                      = 1,
299 +       .has_enet1                      = 1,
300 +       .has_pci                        = 1,
301 +
302 +       .enet0 = {
303 +               .has_phy                = 1,
304 +               .use_internal_phy       = 1,
305 +       },
306 +
307 +       .enet1 = {
308 +               .has_phy                = 1,
309 +               .phy_id                 = 0,
310 +               .force_speed_100        = 1,
311 +               .force_duplex_full      = 1,
312 +       },
313 +
314 +
315 +       .has_ohci0 = 1,
316 +       .has_pccard = 1,
317 +       .has_ehci0 = 1,
318 +       .num_usbh_ports                 = 2,
319 +
320 +       .leds = {
321 +               {
322 +                       .name           = "NB4-SER-r2:white:adsl",
323 +                       .gpio           = NB4_74HC64_GPIO(4),
324 +                       .active_low     = 1,
325 +               },
326 +               {
327 +                       .name           = "NB4-SER-r2:white:traffic",
328 +                       .gpio           = 2,
329 +                       .active_low     = 1,
330 +               },
331 +               {
332 +                       .name           = "NB4-SER-r2:white:tel",
333 +                       .gpio           = NB4_74HC64_GPIO(3),
334 +                       .active_low     = 1,
335 +               },
336 +               {
337 +                       .name           = "NB4-SER-r2:white:tv",
338 +                       .gpio           = NB4_74HC64_GPIO(2),
339 +                       .active_low     = 1,
340 +               },
341 +               {
342 +                       .name           = "NB4-SER-r2:white:wifi",
343 +                       .gpio           = 15,
344 +                       .active_low     = 1,
345 +               },
346 +               {
347 +                       .name           = "NB4-SER-r2:white:alarm",
348 +                       .gpio           = NB4_74HC64_GPIO(0),
349 +                       .active_low     = 1,
350 +               },
351 +               {
352 +                       .name           = "NB4-SER-r2:red:service",
353 +                       .gpio           = 29,
354 +                       .active_low     = 1,
355 +               },
356 +               {
357 +                       .name           = "NB4-SER-r2:green:service",
358 +                       .gpio           = 30,
359 +                       .active_low     = 1,
360 +               },
361 +               {
362 +                       .name           = "NB4-SER-r2:blue:service",
363 +                       .gpio           = 4,
364 +                       .active_low     = 1,
365 +               },
366 +       },
367 +       .buttons = {
368 +               {
369 +                       .desc           = "reset",
370 +                       .gpio           = 34,
371 +                       .type           = EV_KEY,
372 +                       .code           = KEY_RESTART,
373 +                       .active_low     = 1,
374 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
375 +               },
376 +               {
377 +                       .desc           = "wps",
378 +                       .gpio           = 37,
379 +                       .type           = EV_KEY,
380 +                       .code           = KEY_WPS_BUTTON,
381 +                       .active_low     = 1,
382 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
383 +               },
384 +               {
385 +                       .desc           = "service",
386 +                       .gpio           = 27,
387 +                       .type           = EV_KEY,
388 +                       .code           = BTN_0,
389 +                       .active_low     = 1,
390 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
391 +               },
392 +               {
393 +                       .desc           = "clip",
394 +                       .gpio           = 31,
395 +                       .type           = EV_KEY,
396 +                       .code           = BTN_1,
397 +                       .active_low     = 1,
398 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
399 +               },
400 +       },
401 +       .devs = nb4_devices,
402 +       .num_devs = ARRAY_SIZE(nb4_devices),
403 +       .spis = nb4_spi_devices,
404 +       .num_spis = ARRAY_SIZE(nb4_spi_devices),
405 +};
406 +
407 +static struct board_info __initdata board_nb4_fxc_r1 = {
408 +       .name                           = "NB4-FXC-r1",
409 +       .expected_cpu_id                = 0x6358,
410 +
411 +       .has_uart0                      = 1,
412 +       .has_enet0                      = 1,
413 +       .has_enet1                      = 1,
414 +       .has_pci                        = 1,
415 +
416 +       .enet0 = {
417 +               .has_phy                = 1,
418 +               .use_internal_phy       = 1,
419 +       },
420 +
421 +       .enet1 = {
422 +               .has_phy                = 1,
423 +               .phy_id                 = 0,
424 +               .force_speed_100        = 1,
425 +               .force_duplex_full      = 1,
426 +       },
427 +
428 +
429 +       .has_ohci0 = 1,
430 +       .has_pccard = 1,
431 +       .has_ehci0 = 1,
432 +       .num_usbh_ports                 = 2,
433 +
434 +       .leds = {
435 +               {
436 +                       .name           = "NB4-FXC-r1:white:adsl",
437 +                       .gpio           = NB4_74HC64_GPIO(4),
438 +                       .active_low     = 1,
439 +               },
440 +               {
441 +                       .name           = "NB4-FXC-r1:white:traffic",
442 +                       .gpio           = 2,
443 +               },
444 +               {
445 +                       .name           = "NB4-FXC-r1:white:tel",
446 +                       .gpio           = NB4_74HC64_GPIO(3),
447 +                       .active_low     = 1,
448 +               },
449 +               {
450 +                       .name           = "NB4-FXC-r1:white:tv",
451 +                       .gpio           = NB4_74HC64_GPIO(2),
452 +                       .active_low     = 1,
453 +               },
454 +               {
455 +                       .name           = "NB4-FXC-r1:white:wifi",
456 +                       .gpio           = 15,
457 +               },
458 +               {
459 +                       .name           = "NB4-FXC-r1:white:alarm",
460 +                       .gpio           = NB4_74HC64_GPIO(0),
461 +                       .active_low     = 1,
462 +               },
463 +               {
464 +                       .name           = "NB4-FXC-r1:red:service",
465 +                       .gpio           = 29,
466 +               },
467 +               {
468 +                       .name           = "NB4-FXC-r1:green:service",
469 +                       .gpio           = 30,
470 +               },
471 +               {
472 +                       .name           = "NB4-FXC-r1:blue:service",
473 +                       .gpio           = 4,
474 +               },
475 +       },
476 +       .buttons = {
477 +               {
478 +                       .desc           = "reset",
479 +                       .gpio           = 34,
480 +                       .type           = EV_KEY,
481 +                       .code           = KEY_RESTART,
482 +                       .active_low     = 1,
483 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
484 +               },
485 +               {
486 +                       .desc           = "wps",
487 +                       .gpio           = 37,
488 +                       .type           = EV_KEY,
489 +                       .code           = KEY_WPS_BUTTON,
490 +                       .active_low     = 1,
491 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
492 +               },
493 +               {
494 +                       .desc           = "service",
495 +                       .gpio           = 27,
496 +                       .type           = EV_KEY,
497 +                       .code           = BTN_0,
498 +                       .active_low     = 1,
499 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
500 +               },
501 +               {
502 +                       .desc           = "clip",
503 +                       .gpio           = 31,
504 +                       .type           = EV_KEY,
505 +                       .code           = BTN_1,
506 +                       .active_low     = 1,
507 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
508 +               },
509 +       },
510 +       .devs = nb4_devices,
511 +       .num_devs = ARRAY_SIZE(nb4_devices),
512 +       .spis = nb4_spi_devices,
513 +       .num_spis = ARRAY_SIZE(nb4_spi_devices),
514 +};
515 +
516 +static struct board_info __initdata board_nb4_fxc_r2 = {
517 +       .name                           = "NB4-FXC-r2",
518 +       .expected_cpu_id                = 0x6358,
519 +
520 +       .has_uart0                      = 1,
521 +       .has_enet0                      = 1,
522 +       .has_enet1                      = 1,
523 +       .has_pci                        = 1,
524 +
525 +       .enet0 = {
526 +               .has_phy                = 1,
527 +               .use_internal_phy       = 1,
528 +       },
529 +
530 +       .enet1 = {
531 +               .has_phy                = 1,
532 +               .phy_id                 = 0,
533 +               .force_speed_100        = 1,
534 +               .force_duplex_full      = 1,
535 +       },
536 +
537 +
538 +       .has_ohci0 = 1,
539 +       .has_pccard = 1,
540 +       .has_ehci0 = 1,
541 +       .num_usbh_ports                 = 2,
542 +
543 +       .leds = {
544 +               {
545 +                       .name           = "NB4-FXC-r2:white:adsl",
546 +                       .gpio           = NB4_74HC64_GPIO(4),
547 +                       .active_low     = 1,
548 +               },
549 +               {
550 +                       .name           = "NB4-FXC-r2:white:traffic",
551 +                       .gpio           = 2,
552 +               },
553 +               {
554 +                       .name           = "NB4-FXC-r2:white:tel",
555 +                       .gpio           = NB4_74HC64_GPIO(3),
556 +                       .active_low     = 1,
557 +               },
558 +               {
559 +                       .name           = "NB4-FXC-r2:white:tv",
560 +                       .gpio           = NB4_74HC64_GPIO(2),
561 +                       .active_low     = 1,
562 +               },
563 +               {
564 +                       .name           = "NB4-FXC-r2:white:wifi",
565 +                       .gpio           = 15,
566 +               },
567 +               {
568 +                       .name           = "NB4-FXC-r2:white:alarm",
569 +                       .gpio           = NB4_74HC64_GPIO(0),
570 +                       .active_low     = 1,
571 +               },
572 +               {
573 +                       .name           = "NB4-FXC-r2:red:service",
574 +                       .gpio           = 29,
575 +               },
576 +               {
577 +                       .name           = "NB4-FXC-r2:green:service",
578 +                       .gpio           = 30,
579 +               },
580 +               {
581 +                       .name           = "NB4-FXC-r2:blue:service",
582 +                       .gpio           = 4,
583 +               },
584 +       },
585 +       .buttons = {
586 +               {
587 +                       .desc           = "reset",
588 +                       .gpio           = 34,
589 +                       .type           = EV_KEY,
590 +                       .code           = KEY_RESTART,
591 +                       .active_low     = 1,
592 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
593 +               },
594 +               {
595 +                       .desc           = "wps",
596 +                       .gpio           = 37,
597 +                       .type           = EV_KEY,
598 +                       .code           = KEY_WPS_BUTTON,
599 +                       .active_low     = 1,
600 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
601 +               },
602 +               {
603 +                       .desc           = "service",
604 +                       .gpio           = 27,
605 +                       .type           = EV_KEY,
606 +                       .code           = BTN_0,
607 +                       .active_low     = 1,
608 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
609 +               },
610 +               {
611 +                       .desc           = "clip",
612 +                       .gpio           = 31,
613 +                       .type           = EV_KEY,
614 +                       .code           = BTN_1,
615 +                       .active_low     = 1,
616 +                       .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
617 +               },
618 +       },
619 +       .devs = nb4_devices,
620 +       .num_devs = ARRAY_SIZE(nb4_devices),
621 +       .spis = nb4_spi_devices,
622 +       .num_spis = ARRAY_SIZE(nb4_spi_devices),
623 +};
624  #endif
625  
626  /*
627 @@ -790,6 +1393,11 @@ static const struct board_info __initcon
628         &board_96358vw2,
629         &board_AGPFS0,
630         &board_DWVS0,
631 +       &board_nb4_ser_r0,
632 +       &board_nb4_ser_r1,
633 +       &board_nb4_ser_r2,
634 +       &board_nb4_fxc_r1,
635 +       &board_nb4_fxc_r2,
636  #endif
637  };
638  
639 @@ -844,6 +1452,16 @@ static void __init boardid_fixup(u8 *boo
640         struct bcm_tag *tag = (struct bcm_tag *)(boot_addr + CFE_OFFSET_64K);
641         char *board_name = (char *)bcm63xx_nvram_get_name();
642  
643 +       if (BCMCPU_IS_6358() && (!strcmp(board_name, "96358VW"))) {
644 +               u8 *p = boot_addr + NB4_PID_OFFSET;
645 +
646 +               /* Extract nb4 PID */
647 +               if (!memcmp(p, "NB4-", 4)) {
648 +                       memcpy(board_name, p, sizeof("NB4-XXX-rX"));
649 +                       return;
650 +               }
651 +       }
652 +
653         /* check if bcm_tag is at 64k offset */
654         if (strncmp(board_name, tag->board_id, BOARDID_LEN) != 0) {
655                 /* else try 128k */