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 <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>; 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>; 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>; 144 }; 145 }; 146 }; 147 }; 148 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 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 { 205 #cooling-cells = <2>; 206}; 207 208&cpu1 { 209 #cooling-cells = <2>; 210}; 211 212&cpu2 { 213 #cooling-cells = <2>; 214}; 215 216&cpu3 { 217 #cooling-cells = <2>; 218}; 219 220&cpu4 { 221 #cooling-cells = <2>; 222}; 223 224&cpu5 { 225 #cooling-cells = <2>; 226}; 227 228&cpu6 { 229 #cooling-cells = <2>; 230}; 231 232&cpu7 { 233 #cooling-cells = <2>; 234}; 235 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>; 260 interrupt-parent = <&gpio_intc>; 261 /* MAC_INTR on GPIOZ_15 */ 262 interrupts = <25 IRQ_TYPE_LEVEL_LOW>; 263 }; 264}; 265 266&hdmi_tx { 267 status = "okay"; 268 pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>; 269 pinctrl-names = "default"; 270 hdmi-supply = <&hdmi_5v>; 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_LOW>; 360 361 vmmc-supply = <&vddao_3v3>; 362 vqmmc-supply = <&vddio_boot>; 363}; 364 365/* eMMC */ 366&sd_emmc_c { 367 status = "okay"; 368 pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>; 369 pinctrl-names = "default"; 370 371 bus-width = <8>; 372 cap-sd-highspeed; 373 cap-mmc-highspeed; 374 max-frequency = <200000000>; 375 non-removable; 376 disable-wp; 377 mmc-ddr-1_8v; 378 mmc-hs200-1_8v; 379 mmc-hs400-1_8v; 380 381 mmc-pwrseq = <&emmc_pwrseq>; 382 vmmc-supply = <&vcc_3v3>; 383 vqmmc-supply = <&vddio_boot>; 384}; 385 386/* 387 * EMMC_DS pin is shared between SPI NOR CS and eMMC Data Strobe 388 * Remove emmc_ds_pins from sd_emmc_c pinctrl-0 then spifc can be enabled 389 */ 390&spifc { 391 status = "disabled"; 392 pinctrl-0 = <&nor_pins>; 393 pinctrl-names = "default"; 394 395 w25q32: spi-flash@0 { 396 #address-cells = <1>; 397 #size-cells = <1>; 398 compatible = "winbond,w25q16", "jedec,spi-nor"; 399 reg = <0>; 400 spi-max-frequency = <3000000>; 401 }; 402}; 403 404/* This one is connected to the Bluetooth module */ 405&uart_A { 406 status = "okay"; 407 pinctrl-0 = <&uart_a_pins>; 408 pinctrl-names = "default"; 409}; 410 411/* This is brought out on the Linux_RX (18) and Linux_TX (19) pins: */ 412&uart_AO { 413 status = "okay"; 414 pinctrl-0 = <&uart_ao_a_pins>; 415 pinctrl-names = "default"; 416}; 417 418/* This is brought out on the UART_RX_AO_B (15) and UART_TX_AO_B (16) pins: */ 419&uart_AO_B { 420 status = "okay"; 421 pinctrl-0 = <&uart_ao_b_pins>; 422 pinctrl-names = "default"; 423}; 424 425&saradc { 426 status = "okay"; 427 vref-supply = <&vddio_ao18>; 428}; 429 430&usb0 { 431 status = "okay"; 432}; 433