blob: 5e8e964589035a6de2423ee8b27e60334f2dedec [file] [log] [blame]
Linus Walleij22789ae2017-04-29 22:39:11 +02001/*
2 * Device Tree file for D-Link DIR-685 Xtreme N Storage Router
3 */
4
5/dts-v1/;
6
7#include "gemini.dtsi"
8#include <dt-bindings/input/input.h>
9
10/ {
11 model = "D-Link DIR-685 Xtreme N Storage Router";
12 compatible = "dlink,dir-685", "cortina,gemini";
13 #address-cells = <1>;
14 #size-cells = <1>;
15
Linus Walleije7c88152018-05-06 15:39:00 +020016 memory@0 {
Linus Walleij22789ae2017-04-29 22:39:11 +020017 /* 128 MB SDRAM in 2 x Hynix HY5DU121622DTP-D43 */
18 device_type = "memory";
19 reg = <0x00000000 0x8000000>;
20 };
21
22 chosen {
Linus Walleij0d6ce772018-05-02 09:17:25 +020023 bootargs = "console=ttyS0,19200n8 root=/dev/sda1 rw rootwait";
24 stdout-path = "uart0:19200n8";
Linus Walleij22789ae2017-04-29 22:39:11 +020025 };
26
27 gpio_keys {
28 compatible = "gpio-keys";
Linus Walleije7c88152018-05-06 15:39:00 +020029
Linus Walleij22789ae2017-04-29 22:39:11 +020030 button-esc {
Geert Uytterhoevenc0b20ba2018-02-13 15:15:31 +010031 debounce-interval = <50>;
Linus Walleij22789ae2017-04-29 22:39:11 +020032 wakeup-source;
33 linux,code = <KEY_ESC>;
34 label = "reset";
Linus Walleijf328c2e2017-07-05 16:59:33 +020035 /* Collides with LPC_LAD[0], UART DCD, SSP 97RST */
Linus Walleij22789ae2017-04-29 22:39:11 +020036 gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
37 };
38 button-eject {
Geert Uytterhoevenc0b20ba2018-02-13 15:15:31 +010039 debounce-interval = <50>;
Linus Walleij22789ae2017-04-29 22:39:11 +020040 wakeup-source;
41 linux,code = <KEY_EJECTCD>;
42 label = "unmount";
Linus Walleijf328c2e2017-07-05 16:59:33 +020043 /* Collides with LPC LFRAME, UART RTS, SSP TXD */
Linus Walleij22789ae2017-04-29 22:39:11 +020044 gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
45 };
46 };
47
Linus Walleijea6f23f2017-07-15 21:02:06 +020048 vdisp: regulator {
49 compatible = "regulator-fixed";
50 regulator-name = "display-power";
51 regulator-min-microvolt = <3600000>;
52 regulator-max-microvolt = <3600000>;
53 /* Collides with LCD E */
54 gpio = <&gpio0 16 GPIO_ACTIVE_HIGH>;
55 enable-active-high;
56 };
57
58 spi {
59 compatible = "spi-gpio";
60 #address-cells = <1>;
61 #size-cells = <0>;
62
63 /* Collides with IDE pins, that's cool (we do not use them) */
64 gpio-sck = <&gpio1 5 GPIO_ACTIVE_HIGH>;
65 gpio-miso = <&gpio1 8 GPIO_ACTIVE_HIGH>;
66 gpio-mosi = <&gpio1 7 GPIO_ACTIVE_HIGH>;
Linus Walleijea6f23f2017-07-15 21:02:06 +020067 cs-gpios = <&gpio0 20 GPIO_ACTIVE_HIGH>;
68 num-chipselects = <1>;
69
70 panel: display@0 {
71 compatible = "dlink,dir-685-panel", "ilitek,ili9322";
72 reg = <0>;
73 /* 50 ns min period = 20 MHz */
74 spi-max-frequency = <20000000>;
75 spi-cpol; /* Clock active low */
76 vcc-supply = <&vdisp>;
77 iovcc-supply = <&vdisp>;
78 vci-supply = <&vdisp>;
79
80 port {
81 panel_in: endpoint {
82 remote-endpoint = <&display_out>;
83 };
84 };
85 };
86 };
87
Linus Walleij22789ae2017-04-29 22:39:11 +020088 leds {
89 compatible = "gpio-leds";
90 led-wps {
91 label = "dir685:blue:WPS";
Linus Walleijf328c2e2017-07-05 16:59:33 +020092 /* Collides with ICE */
Linus Walleij22789ae2017-04-29 22:39:11 +020093 gpios = <&gpio0 7 GPIO_ACTIVE_LOW>;
94 default-state = "on";
95 linux,default-trigger = "heartbeat";
96 };
97 /*
98 * These two LEDs are on the side of the device.
99 * For electrical reasons, both LEDs cannot be active
Linus Walleij8cb24592018-04-11 15:58:24 +0200100 * at the same time so only blue or orange can be on at
Linus Walleij22789ae2017-04-29 22:39:11 +0200101 * one time. Enabling both makes the LED go dark.
102 * The LEDs both sit inside the unmount button and the
103 * label on the case says "unmount".
104 */
105 led-blue-hd {
106 label = "dir685:blue:HD";
Linus Walleijf328c2e2017-07-05 16:59:33 +0200107 /* Collides with LPC_SERIRQ, UART DTR, SSP FSC pins */
Linus Walleij22789ae2017-04-29 22:39:11 +0200108 gpios = <&gpio0 11 GPIO_ACTIVE_HIGH>;
109 default-state = "off";
Linus Walleij8cb24592018-04-11 15:58:24 +0200110 linux,default-trigger = "disk-read";
Linus Walleij22789ae2017-04-29 22:39:11 +0200111 };
112 led-orange-hd {
113 label = "dir685:orange:HD";
Linus Walleijf328c2e2017-07-05 16:59:33 +0200114 /* Collides with LPC_LAD[2], UART DSR, SSP ECLK pins */
Linus Walleij22789ae2017-04-29 22:39:11 +0200115 gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
116 default-state = "off";
Linus Walleij8cb24592018-04-11 15:58:24 +0200117 linux,default-trigger = "disk-write";
Linus Walleij22789ae2017-04-29 22:39:11 +0200118 };
119 };
120
121 /*
122 * This is a Sunon Maglev GM0502PFV2-8 cooling fan @10000 RPM.
123 * Since the platform has no temperature sensor, this is controlled
124 * from userspace by using the hard disks S.M.A.R.T. temperature
125 * sensor. It is turned on when the temperature exceeds 46 degrees
126 * and turned off when the temperatures goes below 41 degrees
127 * (celsius).
128 */
129 gpio-fan {
130 compatible = "gpio-fan";
Linus Walleijf328c2e2017-07-05 16:59:33 +0200131 /* Collides with IDE */
Linus Walleij22789ae2017-04-29 22:39:11 +0200132 gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
133 gpio-fan,speed-map = <0 0>, <10000 1>;
134 #cooling-cells = <2>;
135 };
136
137 /*
138 * The touchpad input is connected to a GPIO bit-banged
139 * I2C bus.
140 */
141 gpio-i2c {
142 compatible = "i2c-gpio";
Linus Walleijf328c2e2017-07-05 16:59:33 +0200143 /* Collides with ICE */
Linus Walleij8632a662017-09-10 20:02:33 +0200144 sda-gpios = <&gpio0 5 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
145 scl-gpios = <&gpio0 6 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
Linus Walleij22789ae2017-04-29 22:39:11 +0200146 #address-cells = <1>;
147 #size-cells = <0>;
148
149 touchkeys@26 {
150 compatible = "dlink,dir685-touchkeys";
151 reg = <0x26>;
152 interrupt-parent = <&gpio0>;
Linus Walleijf328c2e2017-07-05 16:59:33 +0200153 /* Collides with NAND flash */
Linus Walleij22789ae2017-04-29 22:39:11 +0200154 interrupts = <17 IRQ_TYPE_EDGE_FALLING>;
155 };
156 };
157
Linus Walleij22a001e2018-07-14 11:45:56 +0200158 /* This is a RealTek RTL8366RB switch and PHY using SMI over GPIO */
159 switch {
160 compatible = "realtek,rtl8366rb";
161 /* 22 = MDIO (has input reads), 21 = MDC (clock, output only) */
162 mdc-gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>;
163 mdio-gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>;
164 reset-gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
165 realtek,disable-leds;
166
167 switch_intc: interrupt-controller {
168 /* GPIO 15 provides the interrupt */
169 interrupt-parent = <&gpio0>;
170 interrupts = <15 IRQ_TYPE_LEVEL_LOW>;
171 interrupt-controller;
172 #address-cells = <0>;
173 #interrupt-cells = <1>;
174 };
175
176 ports {
177 #address-cells = <1>;
178 #size-cells = <0>;
179
180 port@0 {
181 reg = <0>;
182 label = "lan0";
183 phy-handle = <&phy0>;
184 };
185 port@1 {
186 reg = <1>;
187 label = "lan1";
188 phy-handle = <&phy1>;
189 };
190 port@2 {
191 reg = <2>;
192 label = "lan2";
193 phy-handle = <&phy2>;
194 };
195 port@3 {
196 reg = <3>;
197 label = "lan3";
198 phy-handle = <&phy3>;
199 };
200 port@4 {
201 reg = <4>;
202 label = "wan";
203 phy-handle = <&phy4>;
204 };
205 rtl8366rb_cpu_port: port@5 {
206 reg = <5>;
207 label = "cpu";
208 ethernet = <&gmac0>;
209 phy-mode = "rgmii";
210 fixed-link {
211 speed = <1000>;
212 full-duplex;
213 pause;
214 };
215 };
216
217 };
218
219 mdio {
220 compatible = "realtek,smi-mdio";
221 #address-cells = <1>;
222 #size-cells = <0>;
223
224 phy0: phy@0 {
225 reg = <0>;
226 interrupt-parent = <&switch_intc>;
227 interrupts = <0>;
228 };
229 phy1: phy@1 {
230 reg = <1>;
231 interrupt-parent = <&switch_intc>;
232 interrupts = <1>;
233 };
234 phy2: phy@2 {
235 reg = <2>;
236 interrupt-parent = <&switch_intc>;
237 interrupts = <2>;
238 };
239 phy3: phy@3 {
240 reg = <3>;
241 interrupt-parent = <&switch_intc>;
242 interrupts = <3>;
243 };
244 phy4: phy@4 {
245 reg = <4>;
246 interrupt-parent = <&switch_intc>;
247 interrupts = <12>;
248 };
249 };
250 };
251
Linus Walleij22789ae2017-04-29 22:39:11 +0200252 soc {
253 flash@30000000 {
Linus Walleijea6f23f2017-07-15 21:02:06 +0200254 /*
Linus Walleij137cd712018-10-11 20:06:23 +0200255 * Flash access collides with the Chip Enable signal for
256 * the display panel, that reuse the parallel flash Chip
257 * Select 1 (CS1). We switch the pin control state so we
258 * enable these pins for flash access only when we need
259 * then, and when disabled they can be used for GPIO which
260 * is what the display panel needs.
Linus Walleijea6f23f2017-07-15 21:02:06 +0200261 */
Linus Walleij137cd712018-10-11 20:06:23 +0200262 status = "okay";
263 pinctrl-names = "enabled", "disabled";
264 pinctrl-0 = <&pflash_default_pins>;
265 pinctrl-1 = <&pflash_disabled_pins>;
266
Linus Walleij22789ae2017-04-29 22:39:11 +0200267 /* 32MB of flash */
268 reg = <0x30000000 0x02000000>;
269
270 /*
271 * This "RedBoot" is the Storlink derivative.
272 */
273 partition@0 {
274 label = "RedBoot";
275 reg = <0x00000000 0x00040000>;
276 read-only;
277 };
278 /*
Linus Walleij738a05e2018-05-17 17:00:10 +0200279 * This firmware image contains the kernel catenated
280 * with the squashfs root filesystem. For some reason
281 * this is called "upgrade" on the vendor system.
Linus Walleij22789ae2017-04-29 22:39:11 +0200282 */
Linus Walleij738a05e2018-05-17 17:00:10 +0200283 partition@40000 {
Linus Walleij22789ae2017-04-29 22:39:11 +0200284 label = "upgrade";
Linus Walleij738a05e2018-05-17 17:00:10 +0200285 reg = <0x00040000 0x01f40000>;
Linus Walleij22789ae2017-04-29 22:39:11 +0200286 read-only;
287 };
Linus Walleij738a05e2018-05-17 17:00:10 +0200288 /* RGDB, Residental Gateway Database? */
Linus Walleij22789ae2017-04-29 22:39:11 +0200289 partition@1f80000 {
290 label = "rgdb";
291 reg = <0x01f80000 0x00040000>;
292 read-only;
293 };
294 /*
295 * This partition contains MAC addresses for WAN,
296 * WLAN and LAN, and the country code (for wireless
297 * I guess).
298 */
299 partition@1fc0000 {
300 label = "nvram";
301 reg = <0x01fc0000 0x00020000>;
302 read-only;
303 };
304 partition@1fe0000 {
305 label = "LangPack";
306 reg = <0x01fe0000 0x00020000>;
307 read-only;
308 };
309 };
310
Linus Walleijf328c2e2017-07-05 16:59:33 +0200311 syscon: syscon@40000000 {
312 pinctrl {
313 /*
314 * gpio0bgrp cover line 5, 6 used by TK I2C
315 * gpio0bgrp cover line 7 used by WPS LED
316 * gpio0cgrp cover line 8, 13 used by keys
317 * and 11, 12 used by the HD LEDs
Linus Walleij22a001e2018-07-14 11:45:56 +0200318 * and line 14, 15 used by RTL8366
319 * RESET and phy ready
Linus Walleijf328c2e2017-07-05 16:59:33 +0200320 * gpio0egrp cover line 16 used by VDISP
321 * gpio0fgrp cover line 17 used by TK IRQ
322 * gpio0ggrp cover line 20 used by panel CS
Linus Walleij22a001e2018-07-14 11:45:56 +0200323 * gpio0hgrp cover line 21,22 used by RTL8366RB MDIO
Linus Walleijf328c2e2017-07-05 16:59:33 +0200324 */
325 gpio0_default_pins: pinctrl-gpio0 {
326 mux {
327 function = "gpio0";
328 groups = "gpio0bgrp",
329 "gpio0cgrp",
330 "gpio0egrp",
331 "gpio0fgrp",
Linus Walleijf328c2e2017-07-05 16:59:33 +0200332 "gpio0hgrp";
333 };
334 };
335 /*
336 * gpio1bgrp cover line 5,8,7 used by panel SPI
337 * also line 6 used by the fan
338 *
339 */
340 gpio1_default_pins: pinctrl-gpio1 {
341 mux {
342 function = "gpio1";
343 groups = "gpio1bgrp";
344 };
345 };
Linus Walleij137cd712018-10-11 20:06:23 +0200346 /*
347 * These GPIO groups will be mapped in over some
348 * of the flash pins when the flash is not in
349 * active use.
350 */
351 pflash_disabled_pins: pinctrl-pflash-disabled {
352 mux {
353 function = "gpio0";
354 groups = "gpio0ggrp", "gpio0igrp", "gpio0jgrp",
355 "gpio0kgrp";
356 };
357 };
Linus Walleij22a001e2018-07-14 11:45:56 +0200358 pinctrl-gmii {
359 mux {
360 function = "gmii";
361 groups = "gmii_gmac0_grp";
362 };
363 conf0 {
364 pins = "V8 GMAC0 RXDV", "T10 GMAC1 RXDV",
365 "Y7 GMAC0 RXC", "Y11 GMAC1 RXC",
366 "T8 GMAC0 TXEN", "W11 GMAC1 TXEN",
367 "U8 GMAC0 TXC", "V11 GMAC1 TXC",
368 "W8 GMAC0 RXD0", "V9 GMAC0 RXD1",
369 "Y8 GMAC0 RXD2", "U9 GMAC0 RXD3",
370 "T7 GMAC0 TXD0", "U6 GMAC0 TXD1",
371 "V7 GMAC0 TXD2", "U7 GMAC0 TXD3",
372 "Y12 GMAC1 RXD0", "V12 GMAC1 RXD1",
373 "T11 GMAC1 RXD2", "W12 GMAC1 RXD3",
374 "U10 GMAC1 TXD0", "Y10 GMAC1 TXD1",
375 "W10 GMAC1 TXD2", "T9 GMAC1 TXD3";
376 skew-delay = <7>;
377 };
378 /* Set up drive strength on GMAC0 to 16 mA */
379 conf1 {
380 groups = "gmii_gmac0_grp";
381 drive-strength = <16>;
382 };
383 };
Linus Walleijf328c2e2017-07-05 16:59:33 +0200384 };
385 };
386
Linus Walleij22789ae2017-04-29 22:39:11 +0200387 sata: sata@46000000 {
388 cortina,gemini-ata-muxmode = <0>;
389 cortina,gemini-enable-sata-bridge;
390 status = "okay";
391 };
392
Linus Walleijf328c2e2017-07-05 16:59:33 +0200393 gpio0: gpio@4d000000 {
394 pinctrl-names = "default";
395 pinctrl-0 = <&gpio0_default_pins>;
396 };
397
398 gpio1: gpio@4e000000 {
399 pinctrl-names = "default";
400 pinctrl-0 = <&gpio1_default_pins>;
401 };
402
Linus Walleij22789ae2017-04-29 22:39:11 +0200403 pci@50000000 {
404 status = "okay";
405 interrupt-map-mask = <0xf800 0 0 7>;
406 interrupt-map =
407 <0x4800 0 0 1 &pci_intc 0>, /* Slot 9 */
408 <0x4800 0 0 2 &pci_intc 1>,
409 <0x4800 0 0 3 &pci_intc 2>,
410 <0x4800 0 0 4 &pci_intc 3>,
411 <0x5000 0 0 1 &pci_intc 1>, /* Slot 10 */
412 <0x5000 0 0 2 &pci_intc 2>,
413 <0x5000 0 0 3 &pci_intc 3>,
414 <0x5000 0 0 4 &pci_intc 0>,
415 <0x5800 0 0 1 &pci_intc 2>, /* Slot 11 */
416 <0x5800 0 0 2 &pci_intc 3>,
417 <0x5800 0 0 3 &pci_intc 0>,
418 <0x5800 0 0 4 &pci_intc 1>,
419 <0x6000 0 0 1 &pci_intc 3>, /* Slot 12 */
420 <0x6000 0 0 2 &pci_intc 0>,
421 <0x6000 0 0 3 &pci_intc 1>,
422 <0x6000 0 0 4 &pci_intc 2>;
423 };
424
Linus Walleij22a001e2018-07-14 11:45:56 +0200425 ethernet@60000000 {
426 status = "okay";
427
428 ethernet-port@0 {
429 phy-mode = "rgmii";
430 fixed-link {
431 speed = <1000>;
432 full-duplex;
433 pause;
434 };
435 };
436 ethernet-port@1 {
437 /* Not used in this platform */
438 };
439 };
440
Linus Walleij22789ae2017-04-29 22:39:11 +0200441 ata@63000000 {
442 status = "okay";
443 };
Linus Walleijea6f23f2017-07-15 21:02:06 +0200444
445 display-controller@6a000000 {
Linus Walleij137cd712018-10-11 20:06:23 +0200446 status = "disabled";
Linus Walleijea6f23f2017-07-15 21:02:06 +0200447
448 port@0 {
449 reg = <0>;
450 display_out: endpoint {
451 remote-endpoint = <&panel_in>;
452 };
453 };
454 };
Linus Walleijd6d0cef2017-04-21 20:50:22 +0200455
456 usb@68000000 {
457 status = "okay";
458 };
459
460 usb@69000000 {
461 status = "okay";
462 };
Linus Walleij22789ae2017-04-29 22:39:11 +0200463 };
464};