1// SPDX-License-Identifier: (GPL-2.0+ OR MIT) 2/* 3 * Copyright (c) 2017 Martin Blumenstingl <martin.blumenstingl@googlemail.com>. 4 * Copyright (c) 2017 BayLibre, SAS 5 * Author: Neil Armstrong <narmstrong@baylibre.com> 6 */ 7 8/dts-v1/; 9 10#include "meson-gxm.dtsi" 11#include <dt-bindings/input/input.h> 12#include <dt-bindings/sound/meson-aiu.h> 13 14/ { 15 compatible = "khadas,vim2", "amlogic,s912", "amlogic,meson-gxm"; 16 model = "Khadas VIM2"; 17 18 aliases { 19 serial0 = &uart_AO; 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 */ 55 gpio-fan,speed-map = 56 <0 0>, 57 <1 1>, 58 <2 2>, 59 <3 3>; 60 #cooling-cells = <2>; 61 }; 62 63 gpio-keys-polled { 64 compatible = "gpio-keys-polled"; 65 poll-interval = <100>; 66 67 power-button { 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 85 led-controller { 86 compatible = "pwm-leds"; 87 88 led-1 { 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 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 115 vcc_3v3: regulator-vcc-3v3 { 116 compatible = "regulator-fixed"; 117 regulator-name = "VCC_3V3"; 118 regulator-min-microvolt = <3300000>; 119 regulator-max-microvolt = <3300000>; 120 }; 121 122 vddio_ao18: regulator-vddio-ao18 { 123 compatible = "regulator-fixed"; 124 regulator-name = "VDDIO_AO18"; 125 regulator-min-microvolt = <1800000>; 126 regulator-max-microvolt = <1800000>; 127 }; 128 129 vddio_boot: regulator-vddio-boot { 130 compatible = "regulator-fixed"; 131 regulator-name = "VDDIO_BOOT"; 132 regulator-min-microvolt = <1800000>; 133 regulator-max-microvolt = <1800000>; 134 }; 135 136 vddao_3v3: regulator-vddao-3v3 { 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 }; 149 150 sound { 151 compatible = "amlogic,gx-sound-card"; 152 model = "KHADAS-VIM2"; 153 clocks = <&clkc CLKID_MPLL0>, 154 <&clkc CLKID_MPLL1>, 155 <&clkc CLKID_MPLL2>; 156 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>; 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"; 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 200&cpu_cooling_maps { 201 map0 { 202 cooling-device = <&gpio_fan THERMAL_NO_LIMIT 1>; 203 }; 204 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 }; 216}; 217 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 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>; 237 238 reset-assert-us = <10000>; 239 reset-deassert-us = <80000>; 240 reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; 241 242 interrupt-parent = <&gpio_intc>; 243 /* MAC_INTR on GPIOZ_15 */ 244 interrupts = <25 IRQ_TYPE_LEVEL_LOW>; 245 }; 246}; 247 248&hdmi_tx { 249 status = "okay"; 250 pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>; 251 pinctrl-names = "default"; 252 hdmi-supply = <&hdmi_5v>; 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 { 273 status = "okay"; 274 compatible = "haoyu,hym8563"; 275 reg = <0x51>; 276 #clock-cells = <0>; 277 clock-output-names = "xin32k"; 278 }; 279}; 280 281&ir { 282 status = "okay"; 283 pinctrl-0 = <&remote_input_ao_pins>; 284 pinctrl-names = "default"; 285 linux,rc-map-name = "rc-khadas"; 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>; 307 pinctrl-1 = <&sdio_clk_gate_pins>; 308 pinctrl-names = "default", "clk-gate"; 309 #address-cells = <1>; 310 #size-cells = <0>; 311 312 bus-width = <4>; 313 cap-sd-highspeed; 314 max-frequency = <100000000>; 315 316 non-removable; 317 disable-wp; 318 319 /* WiFi firmware requires power to be kept while in suspend */ 320 keep-power-in-suspend; 321 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>; 337 pinctrl-1 = <&sdcard_clk_gate_pins>; 338 pinctrl-names = "default", "clk-gate"; 339 340 bus-width = <4>; 341 cap-sd-highspeed; 342 max-frequency = <50000000>; 343 disable-wp; 344 345 cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>; 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>; 355 pinctrl-1 = <&emmc_clk_gate_pins>; 356 pinctrl-names = "default", "clk-gate"; 357 358 bus-width = <8>; 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 380 w25q32: flash@0 { 381 #address-cells = <1>; 382 #size-cells = <1>; 383 compatible = "winbond,w25q16", "jedec,spi-nor"; 384 reg = <0>; 385 spi-max-frequency = <104000000>; 386 }; 387}; 388 389/* This one is connected to the Bluetooth module */ 390&uart_A { 391 status = "okay"; 392 pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>; 393 pinctrl-names = "default"; 394 uart-has-rtscts; 395 396 bluetooth { 397 compatible = "brcm,bcm43438-bt"; 398 shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>; 399 max-speed = <2000000>; 400 clocks = <&wifi32k>; 401 clock-names = "lpo"; 402 }; 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}; 423 424&usb { 425 status = "okay"; 426 dr_mode = "peripheral"; 427}; 428