Commit | Line | Data |
---|---|---|
114abfe1 | 1 | // SPDX-License-Identifier: (GPL-2.0+ OR MIT) |
b8b74dda NA |
2 | /* |
3 | * Copyright (c) 2017 Martin Blumenstingl <martin.blumenstingl@googlemail.com>. | |
4 | * Copyright (c) 2017 BayLibre, SAS | |
5 | * Author: Neil Armstrong <narmstrong@baylibre.com> | |
b8b74dda NA |
6 | */ |
7 | ||
8 | /dts-v1/; | |
9 | ||
10 | #include <dt-bindings/input/input.h> | |
11 | #include <dt-bindings/thermal/thermal.h> | |
12 | ||
13 | #include "meson-gxm.dtsi" | |
14 | ||
15 | / { | |
16 | compatible = "khadas,vim2", "amlogic,s912", "amlogic,meson-gxm"; | |
17 | model = "Khadas VIM2"; | |
18 | ||
19 | aliases { | |
20 | serial0 = &uart_AO; | |
21 | serial1 = &uart_A; | |
22 | serial2 = &uart_AO_B; | |
23 | }; | |
24 | ||
25 | chosen { | |
26 | stdout-path = "serial0:115200n8"; | |
27 | }; | |
28 | ||
29 | memory@0 { | |
30 | device_type = "memory"; | |
31 | reg = <0x0 0x0 0x0 0x80000000>; | |
32 | }; | |
33 | ||
34 | adc-keys { | |
35 | compatible = "adc-keys"; | |
36 | io-channels = <&saradc 0>; | |
37 | io-channel-names = "buttons"; | |
38 | keyup-threshold-microvolt = <1710000>; | |
39 | ||
40 | button-function { | |
41 | label = "Function"; | |
42 | linux,code = <KEY_FN>; | |
43 | press-threshold-microvolt = <10000>; | |
44 | }; | |
45 | }; | |
46 | ||
47 | emmc_pwrseq: emmc-pwrseq { | |
48 | compatible = "mmc-pwrseq-emmc"; | |
49 | reset-gpios = <&gpio BOOT_9 GPIO_ACTIVE_LOW>; | |
50 | }; | |
51 | ||
52 | gpio_fan: gpio-fan { | |
53 | compatible = "gpio-fan"; | |
54 | gpios = <&gpio GPIODV_14 GPIO_ACTIVE_HIGH | |
55 | &gpio GPIODV_15 GPIO_ACTIVE_HIGH>; | |
56 | /* Dummy RPM values since fan is optional */ | |
57 | gpio-fan,speed-map = <0 0 | |
58 | 1 1 | |
59 | 2 2 | |
60 | 3 3>; | |
b8b74dda NA |
61 | #cooling-cells = <2>; |
62 | }; | |
63 | ||
64 | gpio-keys-polled { | |
65 | compatible = "gpio-keys-polled"; | |
66 | #address-cells = <1>; | |
67 | #size-cells = <0>; | |
68 | poll-interval = <100>; | |
69 | ||
70 | button@0 { | |
71 | label = "power"; | |
72 | linux,code = <KEY_POWER>; | |
73 | gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>; | |
74 | }; | |
75 | }; | |
76 | ||
77 | hdmi-connector { | |
78 | compatible = "hdmi-connector"; | |
79 | type = "a"; | |
80 | ||
81 | port { | |
82 | hdmi_connector_in: endpoint { | |
83 | remote-endpoint = <&hdmi_tx_tmds_out>; | |
84 | }; | |
85 | }; | |
86 | }; | |
87 | ||
88 | pwmleds { | |
89 | compatible = "pwm-leds"; | |
90 | ||
91 | power { | |
92 | label = "vim:red:power"; | |
93 | pwms = <&pwm_AO_ab 1 7812500 0>; | |
94 | max-brightness = <255>; | |
95 | linux,default-trigger = "default-on"; | |
96 | }; | |
97 | }; | |
98 | ||
99 | sdio_pwrseq: sdio-pwrseq { | |
100 | compatible = "mmc-pwrseq-simple"; | |
101 | reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>; | |
102 | clocks = <&wifi32k>; | |
103 | clock-names = "ext_clock"; | |
104 | }; | |
105 | ||
106 | thermal-zones { | |
107 | cpu-thermal { | |
108 | polling-delay-passive = <250>; /* milliseconds */ | |
109 | polling-delay = <1000>; /* milliseconds */ | |
110 | ||
111 | thermal-sensors = <&scpi_sensors 0>; | |
112 | ||
113 | trips { | |
114 | cpu_alert0: cpu-alert0 { | |
115 | temperature = <70000>; /* millicelsius */ | |
116 | hysteresis = <2000>; /* millicelsius */ | |
117 | type = "active"; | |
118 | }; | |
119 | ||
120 | cpu_alert1: cpu-alert1 { | |
121 | temperature = <80000>; /* millicelsius */ | |
122 | hysteresis = <2000>; /* millicelsius */ | |
123 | type = "passive"; | |
124 | }; | |
125 | }; | |
126 | ||
127 | cooling-maps { | |
128 | map0 { | |
129 | trip = <&cpu_alert0>; | |
130 | cooling-device = <&gpio_fan THERMAL_NO_LIMIT 1>; | |
131 | }; | |
132 | ||
133 | map1 { | |
134 | trip = <&cpu_alert1>; | |
146e99be VK |
135 | cooling-device = <&gpio_fan 2 THERMAL_NO_LIMIT>, |
136 | <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, | |
137 | <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, | |
138 | <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, | |
139 | <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, | |
140 | <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, | |
141 | <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, | |
142 | <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, | |
143 | <&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; | |
b8b74dda NA |
144 | }; |
145 | }; | |
146 | }; | |
147 | }; | |
148 | ||
b409f625 NA |
149 | hdmi_5v: regulator-hdmi-5v { |
150 | compatible = "regulator-fixed"; | |
151 | ||
152 | regulator-name = "HDMI_5V"; | |
153 | regulator-min-microvolt = <5000000>; | |
154 | regulator-max-microvolt = <5000000>; | |
155 | ||
156 | gpio = <&gpio GPIOH_3 GPIO_ACTIVE_HIGH>; | |
157 | enable-active-high; | |
158 | regulator-always-on; | |
159 | }; | |
160 | ||
b8b74dda NA |
161 | vcc_3v3: regulator-vcc_3v3 { |
162 | compatible = "regulator-fixed"; | |
163 | regulator-name = "VCC_3V3"; | |
164 | regulator-min-microvolt = <3300000>; | |
165 | regulator-max-microvolt = <3300000>; | |
166 | }; | |
167 | ||
168 | vddio_ao18: regulator-vddio_ao18 { | |
169 | compatible = "regulator-fixed"; | |
170 | regulator-name = "VDDIO_AO18"; | |
171 | regulator-min-microvolt = <1800000>; | |
172 | regulator-max-microvolt = <1800000>; | |
173 | }; | |
174 | ||
175 | vddio_boot: regulator-vddio_boot { | |
176 | compatible = "regulator-fixed"; | |
177 | regulator-name = "VDDIO_BOOT"; | |
178 | regulator-min-microvolt = <1800000>; | |
179 | regulator-max-microvolt = <1800000>; | |
180 | }; | |
181 | ||
182 | vddao_3v3: regulator-vddao_3v3 { | |
183 | compatible = "regulator-fixed"; | |
184 | regulator-name = "VDDAO_3V3"; | |
185 | regulator-min-microvolt = <3300000>; | |
186 | regulator-max-microvolt = <3300000>; | |
187 | }; | |
188 | ||
189 | wifi32k: wifi32k { | |
190 | compatible = "pwm-clock"; | |
191 | #clock-cells = <0>; | |
192 | clock-frequency = <32768>; | |
193 | pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */ | |
194 | }; | |
195 | }; | |
196 | ||
197 | &cec_AO { | |
198 | status = "okay"; | |
199 | pinctrl-0 = <&ao_cec_pins>; | |
200 | pinctrl-names = "default"; | |
201 | hdmi-phandle = <&hdmi_tx>; | |
202 | }; | |
203 | ||
204 | &cpu0 { | |
b8b74dda NA |
205 | #cooling-cells = <2>; |
206 | }; | |
207 | ||
e3128cea VK |
208 | &cpu1 { |
209 | #cooling-cells = <2>; | |
210 | }; | |
211 | ||
212 | &cpu2 { | |
213 | #cooling-cells = <2>; | |
214 | }; | |
215 | ||
216 | &cpu3 { | |
217 | #cooling-cells = <2>; | |
218 | }; | |
219 | ||
b8b74dda | 220 | &cpu4 { |
b8b74dda NA |
221 | #cooling-cells = <2>; |
222 | }; | |
223 | ||
e3128cea VK |
224 | &cpu5 { |
225 | #cooling-cells = <2>; | |
226 | }; | |
227 | ||
228 | &cpu6 { | |
229 | #cooling-cells = <2>; | |
230 | }; | |
231 | ||
232 | &cpu7 { | |
233 | #cooling-cells = <2>; | |
234 | }; | |
235 | ||
b8b74dda NA |
236 | ðmac { |
237 | pinctrl-0 = <ð_pins>; | |
238 | pinctrl-names = "default"; | |
239 | ||
240 | /* Select external PHY by default */ | |
241 | phy-handle = <&external_phy>; | |
242 | ||
243 | amlogic,tx-delay-ns = <2>; | |
244 | ||
245 | /* External PHY reset is shared with internal PHY Led signals */ | |
246 | snps,reset-gpio = <&gpio GPIOZ_14 0>; | |
247 | snps,reset-delays-us = <0 10000 1000000>; | |
248 | snps,reset-active-low; | |
249 | ||
250 | /* External PHY is in RGMII */ | |
251 | phy-mode = "rgmii"; | |
252 | ||
253 | status = "okay"; | |
254 | }; | |
255 | ||
256 | &external_mdio { | |
257 | external_phy: ethernet-phy@0 { | |
258 | /* Realtek RTL8211F (0x001cc916) */ | |
259 | reg = <0>; | |
45293920 MB |
260 | interrupt-parent = <&gpio_intc>; |
261 | /* MAC_INTR on GPIOZ_15 */ | |
262 | interrupts = <25 IRQ_TYPE_LEVEL_LOW>; | |
b8b74dda NA |
263 | }; |
264 | }; | |
265 | ||
266 | &hdmi_tx { | |
267 | status = "okay"; | |
268 | pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>; | |
269 | pinctrl-names = "default"; | |
e1f2163d | 270 | hdmi-supply = <&hdmi_5v>; |
b8b74dda NA |
271 | }; |
272 | ||
273 | &hdmi_tx_tmds_port { | |
274 | hdmi_tx_tmds_out: endpoint { | |
275 | remote-endpoint = <&hdmi_connector_in>; | |
276 | }; | |
277 | }; | |
278 | ||
279 | &i2c_A { | |
280 | status = "okay"; | |
281 | pinctrl-0 = <&i2c_a_pins>; | |
282 | pinctrl-names = "default"; | |
283 | }; | |
284 | ||
285 | &i2c_B { | |
286 | status = "okay"; | |
287 | pinctrl-0 = <&i2c_b_pins>; | |
288 | pinctrl-names = "default"; | |
289 | ||
290 | rtc: rtc@51 { | |
291 | /* has to be enabled manually when a battery is connected: */ | |
292 | status = "disabled"; | |
293 | compatible = "haoyu,hym8563"; | |
294 | reg = <0x51>; | |
295 | #clock-cells = <0>; | |
296 | clock-frequency = <32768>; | |
297 | clock-output-names = "xin32k"; | |
298 | }; | |
299 | }; | |
300 | ||
301 | &ir { | |
302 | status = "okay"; | |
303 | pinctrl-0 = <&remote_input_ao_pins>; | |
304 | pinctrl-names = "default"; | |
305 | linux,rc-map-name = "rc-geekbox"; | |
306 | }; | |
307 | ||
308 | &pwm_AO_ab { | |
309 | status = "okay"; | |
310 | pinctrl-0 = <&pwm_ao_a_3_pins>, <&pwm_ao_b_pins>; | |
311 | pinctrl-names = "default"; | |
312 | clocks = <&clkc CLKID_FCLK_DIV4>; | |
313 | clock-names = "clkin0"; | |
314 | }; | |
315 | ||
316 | &pwm_ef { | |
317 | status = "okay"; | |
318 | pinctrl-0 = <&pwm_e_pins>, <&pwm_f_clk_pins>; | |
319 | pinctrl-names = "default"; | |
320 | clocks = <&clkc CLKID_FCLK_DIV4>; | |
321 | clock-names = "clkin0"; | |
322 | }; | |
323 | ||
324 | &sd_emmc_a { | |
325 | status = "okay"; | |
326 | pinctrl-0 = <&sdio_pins>; | |
327 | pinctrl-names = "default"; | |
328 | #address-cells = <1>; | |
329 | #size-cells = <0>; | |
330 | ||
331 | bus-width = <4>; | |
332 | max-frequency = <100000000>; | |
333 | ||
334 | non-removable; | |
335 | disable-wp; | |
336 | ||
337 | mmc-pwrseq = <&sdio_pwrseq>; | |
338 | ||
339 | vmmc-supply = <&vddao_3v3>; | |
340 | vqmmc-supply = <&vddio_boot>; | |
341 | ||
342 | brcmf: wifi@1 { | |
343 | reg = <1>; | |
344 | compatible = "brcm,bcm4329-fmac"; | |
345 | }; | |
346 | }; | |
347 | ||
348 | /* SD card */ | |
349 | &sd_emmc_b { | |
350 | status = "okay"; | |
351 | pinctrl-0 = <&sdcard_pins>; | |
352 | pinctrl-names = "default"; | |
353 | ||
354 | bus-width = <4>; | |
355 | cap-sd-highspeed; | |
356 | max-frequency = <100000000>; | |
357 | disable-wp; | |
358 | ||
359 | cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_HIGH>; | |
360 | cd-inverted; | |
361 | ||
362 | vmmc-supply = <&vddao_3v3>; | |
363 | vqmmc-supply = <&vddio_boot>; | |
364 | }; | |
365 | ||
366 | /* eMMC */ | |
367 | &sd_emmc_c { | |
368 | status = "okay"; | |
369 | pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>; | |
370 | pinctrl-names = "default"; | |
371 | ||
372 | bus-width = <8>; | |
373 | cap-sd-highspeed; | |
374 | cap-mmc-highspeed; | |
375 | max-frequency = <200000000>; | |
376 | non-removable; | |
377 | disable-wp; | |
378 | mmc-ddr-1_8v; | |
379 | mmc-hs200-1_8v; | |
a1d759cf | 380 | mmc-hs400-1_8v; |
b8b74dda NA |
381 | |
382 | mmc-pwrseq = <&emmc_pwrseq>; | |
383 | vmmc-supply = <&vcc_3v3>; | |
384 | vqmmc-supply = <&vddio_boot>; | |
385 | }; | |
386 | ||
387 | /* | |
388 | * EMMC_DS pin is shared between SPI NOR CS and eMMC Data Strobe | |
389 | * Remove emmc_ds_pins from sd_emmc_c pinctrl-0 then spifc can be enabled | |
390 | */ | |
391 | &spifc { | |
392 | status = "disabled"; | |
393 | pinctrl-0 = <&nor_pins>; | |
394 | pinctrl-names = "default"; | |
395 | ||
396 | w25q32: spi-flash@0 { | |
397 | #address-cells = <1>; | |
398 | #size-cells = <1>; | |
399 | compatible = "winbond,w25q16", "jedec,spi-nor"; | |
400 | reg = <0>; | |
401 | spi-max-frequency = <3000000>; | |
402 | }; | |
403 | }; | |
404 | ||
405 | /* This one is connected to the Bluetooth module */ | |
406 | &uart_A { | |
407 | status = "okay"; | |
408 | pinctrl-0 = <&uart_a_pins>; | |
409 | pinctrl-names = "default"; | |
410 | }; | |
411 | ||
412 | /* This is brought out on the Linux_RX (18) and Linux_TX (19) pins: */ | |
413 | &uart_AO { | |
414 | status = "okay"; | |
415 | pinctrl-0 = <&uart_ao_a_pins>; | |
416 | pinctrl-names = "default"; | |
417 | }; | |
418 | ||
419 | /* This is brought out on the UART_RX_AO_B (15) and UART_TX_AO_B (16) pins: */ | |
420 | &uart_AO_B { | |
421 | status = "okay"; | |
422 | pinctrl-0 = <&uart_ao_b_pins>; | |
423 | pinctrl-names = "default"; | |
424 | }; | |
425 | ||
426 | &saradc { | |
427 | status = "okay"; | |
428 | vref-supply = <&vddio_ao18>; | |
429 | }; | |
4b7b0d7b MB |
430 | |
431 | &usb0 { | |
432 | status = "okay"; | |
433 | }; |