Root/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 */
641

Archive Download this file



interactive