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