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