brcm63xx: Add DT support for A4001N
[openwrt/svn-archive/archive.git] / target / linux / brcm63xx / patches-3.14 / 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 @@ -31,6 +37,12 @@
17 #define BCM963XX_KEYS_POLL_INTERVAL 20
18 #define BCM963XX_KEYS_DEBOUNCE_INTERVAL (BCM963XX_KEYS_POLL_INTERVAL * 3)
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 * known 3368 boards
28 */
29 @@ -764,6 +776,270 @@ 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 + .of_board_id = "sfr,nb4-ser-r0",
76 + .expected_cpu_id = 0x6358,
77 +
78 + .has_uart0 = 1,
79 + .has_enet0 = 1,
80 + .has_enet1 = 1,
81 + .has_pci = 1,
82 +
83 + .enet0 = {
84 + .has_phy = 1,
85 + .use_internal_phy = 1,
86 + },
87 +
88 + .enet1 = {
89 + .has_phy = 1,
90 + .phy_id = 0,
91 + .force_speed_100 = 1,
92 + .force_duplex_full = 1,
93 + },
94 +
95 +
96 + .has_ohci0 = 1,
97 + .has_pccard = 1,
98 + .has_ehci0 = 1,
99 + .num_usbh_ports = 2,
100 +
101 + .leds = {
102 + {
103 + .name = "NB4-SER-r0:white:adsl",
104 + .gpio = NB4_74HC64_GPIO(4),
105 + .active_low = 1,
106 + },
107 + {
108 + .name = "NB4-SER-r0:white:traffic",
109 + .gpio = 2,
110 + .active_low = 1,
111 + },
112 + {
113 + .name = "NB4-SER-r0:white:tel",
114 + .gpio = NB4_74HC64_GPIO(3),
115 + .active_low = 1,
116 + },
117 + {
118 + .name = "NB4-SER-r0:white:tv",
119 + .gpio = NB4_74HC64_GPIO(2),
120 + .active_low = 1,
121 + },
122 + {
123 + .name = "NB4-SER-r0:white:wifi",
124 + .gpio = 15,
125 + .active_low = 1,
126 + },
127 + {
128 + .name = "NB4-SER-r0:white:alarm",
129 + .gpio = NB4_74HC64_GPIO(0),
130 + .active_low = 1,
131 + },
132 + {
133 + .name = "NB4-SER-r0:red:service",
134 + .gpio = 29,
135 + .active_low = 1,
136 + },
137 + {
138 + .name = "NB4-SER-r0:green:service",
139 + .gpio = 30,
140 + .active_low = 1,
141 + },
142 + {
143 + .name = "NB4-SER-r0:blue:service",
144 + .gpio = 4,
145 + .active_low = 1,
146 + },
147 + },
148 + .buttons = {
149 + {
150 + .desc = "reset",
151 + .gpio = 34,
152 + .type = EV_KEY,
153 + .code = KEY_RESTART,
154 + .active_low = 1,
155 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
156 + },
157 + {
158 + .desc = "wps",
159 + .gpio = 37,
160 + .type = EV_KEY,
161 + .code = KEY_WPS_BUTTON,
162 + .active_low = 1,
163 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
164 + },
165 + {
166 + .desc = "service",
167 + .gpio = 27,
168 + .type = EV_KEY,
169 + .code = BTN_0,
170 + .active_low = 1,
171 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
172 + },
173 + {
174 + .desc = "clip",
175 + .gpio = 31,
176 + .type = EV_KEY,
177 + .code = BTN_1,
178 + .active_low = 1,
179 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
180 + },
181 + },
182 + .devs = nb4_devices,
183 + .num_devs = ARRAY_SIZE(nb4_devices),
184 + .spis = nb4_spi_devices,
185 + .num_spis = ARRAY_SIZE(nb4_spi_devices),
186 +};
187 +
188 +static struct board_info __initdata board_nb4_fxc_r1 = {
189 + .name = "NB4-FXC-r1",
190 + .of_board_id = "sfr,nb4-fxc-r1",
191 + .expected_cpu_id = 0x6358,
192 +
193 + .has_uart0 = 1,
194 + .has_enet0 = 1,
195 + .has_enet1 = 1,
196 + .has_pci = 1,
197 +
198 + .enet0 = {
199 + .has_phy = 1,
200 + .use_internal_phy = 1,
201 + },
202 +
203 + .enet1 = {
204 + .has_phy = 1,
205 + .phy_id = 0,
206 + .force_speed_100 = 1,
207 + .force_duplex_full = 1,
208 + },
209 +
210 +
211 + .has_ohci0 = 1,
212 + .has_pccard = 1,
213 + .has_ehci0 = 1,
214 + .num_usbh_ports = 2,
215 +
216 + .leds = {
217 + {
218 + .name = "NB4-FXC-r1:white:adsl",
219 + .gpio = NB4_74HC64_GPIO(4),
220 + .active_low = 1,
221 + },
222 + {
223 + .name = "NB4-FXC-r1:white:traffic",
224 + .gpio = 2,
225 + },
226 + {
227 + .name = "NB4-FXC-r1:white:tel",
228 + .gpio = NB4_74HC64_GPIO(3),
229 + .active_low = 1,
230 + },
231 + {
232 + .name = "NB4-FXC-r1:white:tv",
233 + .gpio = NB4_74HC64_GPIO(2),
234 + .active_low = 1,
235 + },
236 + {
237 + .name = "NB4-FXC-r1:white:wifi",
238 + .gpio = 15,
239 + },
240 + {
241 + .name = "NB4-FXC-r1:white:alarm",
242 + .gpio = NB4_74HC64_GPIO(0),
243 + .active_low = 1,
244 + },
245 + {
246 + .name = "NB4-FXC-r1:red:service",
247 + .gpio = 29,
248 + },
249 + {
250 + .name = "NB4-FXC-r1:green:service",
251 + .gpio = 30,
252 + },
253 + {
254 + .name = "NB4-FXC-r1:blue:service",
255 + .gpio = 4,
256 + },
257 + },
258 + .buttons = {
259 + {
260 + .desc = "reset",
261 + .gpio = 34,
262 + .type = EV_KEY,
263 + .code = KEY_RESTART,
264 + .active_low = 1,
265 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
266 + },
267 + {
268 + .desc = "wps",
269 + .gpio = 37,
270 + .type = EV_KEY,
271 + .code = KEY_WPS_BUTTON,
272 + .active_low = 1,
273 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
274 + },
275 + {
276 + .desc = "service",
277 + .gpio = 27,
278 + .type = EV_KEY,
279 + .code = BTN_0,
280 + .active_low = 1,
281 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
282 + },
283 + {
284 + .desc = "clip",
285 + .gpio = 31,
286 + .type = EV_KEY,
287 + .code = BTN_1,
288 + .active_low = 1,
289 + .debounce_interval = BCM963XX_KEYS_DEBOUNCE_INTERVAL,
290 + },
291 + },
292 + .devs = nb4_devices,
293 + .num_devs = ARRAY_SIZE(nb4_devices),
294 + .spis = nb4_spi_devices,
295 + .num_spis = ARRAY_SIZE(nb4_spi_devices),
296 +};
297 #endif /* CONFIG_BCM63XX_CPU_6358 */
298
299 /*
300 @@ -800,6 +1076,8 @@ static const struct board_info __initcon
301 &board_96358vw2,
302 &board_AGPFS0,
303 &board_DWVS0,
304 + &board_nb4_ser_r0,
305 + &board_nb4_fxc_r1,
306 #endif
307 };
308