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