bcm63xx: remove bcm_tag usage in kernel
[openwrt.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 @@ -43,6 +45,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 @@ -666,6 +674,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 @@ -696,6 +1284,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 @@ -750,6 +1343,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 */