1 --- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
2 +++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
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>
11 #include <asm/addrspace.h>
12 #include <bcm63xx_board.h>
13 #include <bcm63xx_cpu.h>
15 #define CFE_OFFSET_64K 0x10000
16 #define CFE_OFFSET_128K 0x20000
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))
24 static struct board_info board;
27 @@ -755,6 +765,605 @@ static struct board_info __initdata boar
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,
40 +static struct platform_device nb4_spi_gpio = {
44 + .platform_data = &nb4_spi_gpio_data,
48 +static struct platform_device * __initdata nb4_devices[] = {
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
58 +static struct spi_board_info nb4_spi_devices[] = {
59 +#if 0 /* FIXME: 3.14 removed non-DT support */
61 + .modalias = "74x164",
62 + .max_speed_hz = 781000,
64 + .controller_data = (void *) SPI_GPIO_NO_CHIPSELECT,
66 + .platform_data = &nb4_74x164_platform_data
71 +static struct board_info __initdata board_nb4_ser_r0 = {
72 + .name = "NB4-SER-r0",
73 + .expected_cpu_id = 0x6358,
82 + .use_internal_phy = 1,
88 + .force_speed_100 = 1,
89 + .force_duplex_full = 1,
96 + .num_usbh_ports = 2,
100 + .name = "NB4-SER-r0:white:adsl",
101 + .gpio = NB4_74HC64_GPIO(4),
105 + .name = "NB4-SER-r0:white:traffic",
110 + .name = "NB4-SER-r0:white:tel",
111 + .gpio = NB4_74HC64_GPIO(3),
115 + .name = "NB4-SER-r0:white:tv",
116 + .gpio = NB4_74HC64_GPIO(2),
120 + .name = "NB4-SER-r0:white:wifi",
125 + .name = "NB4-SER-r0:white:alarm",
126 + .gpio = NB4_74HC64_GPIO(0),
130 + .name = "NB4-SER-r0:red:service",
135 + .name = "NB4-SER-r0:green:service",
140 + .name = "NB4-SER-r0:blue:service",
150 + .code = KEY_RESTART,
152 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
158 + .code = KEY_WPS_BUTTON,
160 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
168 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
176 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
179 + .devs = nb4_devices,
180 + .num_devs = ARRAY_SIZE(nb4_devices),
181 + .spis = nb4_spi_devices,
182 + .num_spis = ARRAY_SIZE(nb4_spi_devices),
185 +static struct board_info __initdata board_nb4_ser_r1 = {
186 + .name = "NB4-SER-r1",
187 + .expected_cpu_id = 0x6358,
196 + .use_internal_phy = 1,
202 + .force_speed_100 = 1,
203 + .force_duplex_full = 1,
210 + .num_usbh_ports = 2,
214 + .name = "NB4-SER-r1:white:adsl",
215 + .gpio = NB4_74HC64_GPIO(4),
219 + .name = "NB4-SER-r1:white:traffic",
224 + .name = "NB4-SER-r1:white:tel",
225 + .gpio = NB4_74HC64_GPIO(3),
229 + .name = "NB4-SER-r1:white:tv",
230 + .gpio = NB4_74HC64_GPIO(2),
234 + .name = "NB4-SER-r1:white:wifi",
239 + .name = "NB4-SER-r1:white:alarm",
240 + .gpio = NB4_74HC64_GPIO(0),
244 + .name = "NB4-SER-r1:red:service",
249 + .name = "NB4-SER-r1:green:service",
254 + .name = "NB4-SER-r1:blue:service",
264 + .code = KEY_RESTART,
266 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
272 + .code = KEY_WPS_BUTTON,
274 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
282 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
290 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
293 + .devs = nb4_devices,
294 + .num_devs = ARRAY_SIZE(nb4_devices),
295 + .spis = nb4_spi_devices,
296 + .num_spis = ARRAY_SIZE(nb4_spi_devices),
299 +static struct board_info __initdata board_nb4_ser_r2 = {
300 + .name = "NB4-SER-r2",
301 + .expected_cpu_id = 0x6358,
310 + .use_internal_phy = 1,
316 + .force_speed_100 = 1,
317 + .force_duplex_full = 1,
324 + .num_usbh_ports = 2,
328 + .name = "NB4-SER-r2:white:adsl",
329 + .gpio = NB4_74HC64_GPIO(4),
333 + .name = "NB4-SER-r2:white:traffic",
338 + .name = "NB4-SER-r2:white:tel",
339 + .gpio = NB4_74HC64_GPIO(3),
343 + .name = "NB4-SER-r2:white:tv",
344 + .gpio = NB4_74HC64_GPIO(2),
348 + .name = "NB4-SER-r2:white:wifi",
353 + .name = "NB4-SER-r2:white:alarm",
354 + .gpio = NB4_74HC64_GPIO(0),
358 + .name = "NB4-SER-r2:red:service",
363 + .name = "NB4-SER-r2:green:service",
368 + .name = "NB4-SER-r2:blue:service",
378 + .code = KEY_RESTART,
380 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
386 + .code = KEY_WPS_BUTTON,
388 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
396 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
404 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
407 + .devs = nb4_devices,
408 + .num_devs = ARRAY_SIZE(nb4_devices),
409 + .spis = nb4_spi_devices,
410 + .num_spis = ARRAY_SIZE(nb4_spi_devices),
413 +static struct board_info __initdata board_nb4_fxc_r1 = {
414 + .name = "NB4-FXC-r1",
415 + .expected_cpu_id = 0x6358,
424 + .use_internal_phy = 1,
430 + .force_speed_100 = 1,
431 + .force_duplex_full = 1,
438 + .num_usbh_ports = 2,
442 + .name = "NB4-FXC-r1:white:adsl",
443 + .gpio = NB4_74HC64_GPIO(4),
447 + .name = "NB4-FXC-r1:white:traffic",
451 + .name = "NB4-FXC-r1:white:tel",
452 + .gpio = NB4_74HC64_GPIO(3),
456 + .name = "NB4-FXC-r1:white:tv",
457 + .gpio = NB4_74HC64_GPIO(2),
461 + .name = "NB4-FXC-r1:white:wifi",
465 + .name = "NB4-FXC-r1:white:alarm",
466 + .gpio = NB4_74HC64_GPIO(0),
470 + .name = "NB4-FXC-r1:red:service",
474 + .name = "NB4-FXC-r1:green:service",
478 + .name = "NB4-FXC-r1:blue:service",
487 + .code = KEY_RESTART,
489 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
495 + .code = KEY_WPS_BUTTON,
497 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
505 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
513 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
516 + .devs = nb4_devices,
517 + .num_devs = ARRAY_SIZE(nb4_devices),
518 + .spis = nb4_spi_devices,
519 + .num_spis = ARRAY_SIZE(nb4_spi_devices),
522 +static struct board_info __initdata board_nb4_fxc_r2 = {
523 + .name = "NB4-FXC-r2",
524 + .expected_cpu_id = 0x6358,
533 + .use_internal_phy = 1,
539 + .force_speed_100 = 1,
540 + .force_duplex_full = 1,
547 + .num_usbh_ports = 2,
551 + .name = "NB4-FXC-r2:white:adsl",
552 + .gpio = NB4_74HC64_GPIO(4),
556 + .name = "NB4-FXC-r2:white:traffic",
560 + .name = "NB4-FXC-r2:white:tel",
561 + .gpio = NB4_74HC64_GPIO(3),
565 + .name = "NB4-FXC-r2:white:tv",
566 + .gpio = NB4_74HC64_GPIO(2),
570 + .name = "NB4-FXC-r2:white:wifi",
574 + .name = "NB4-FXC-r2:white:alarm",
575 + .gpio = NB4_74HC64_GPIO(0),
579 + .name = "NB4-FXC-r2:red:service",
583 + .name = "NB4-FXC-r2:green:service",
587 + .name = "NB4-FXC-r2:blue:service",
596 + .code = KEY_RESTART,
598 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
604 + .code = KEY_WPS_BUTTON,
606 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
614 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
622 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
625 + .devs = nb4_devices,
626 + .num_devs = ARRAY_SIZE(nb4_devices),
627 + .spis = nb4_spi_devices,
628 + .num_spis = ARRAY_SIZE(nb4_spi_devices),
633 @@ -791,6 +1400,11 @@ static const struct board_info __initcon
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();
649 + if (BCMCPU_IS_6358() && (!strcmp(board_name, "96358VW"))) {
650 + u8 *p = boot_addr + NB4_PID_OFFSET;
652 + /* Extract nb4 PID */
653 + if (!memcmp(p, "NB4-", 4)) {
654 + memcpy(board_name, p, sizeof("NB4-XXX-rX"));
659 /* check if bcm_tag is at 64k offset */
660 if (strncmp(board_name, tag->board_id, BOARDID_LEN) != 0) {