brcm63xx: update development kernel to linux 3.14
[openwrt.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 */