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