ca32c79c9f7f694fc545f549b11d6cab38601856
[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 @@ -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 @@ -343,6 +349,12 @@ static struct board_info __initdata boar
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         .has_ohci0 = 1,
28         .has_pccard = 1,
29 @@ -739,6 +751,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
633  
634  /*
635 @@ -775,6 +1386,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 @@ -783,6 +1399,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 */