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 12#include "meson-gxm.dtsi" 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 = <0 0 56 1 1 57 2 2 58 3 3>; 59 #cooling-cells = <2>; 60 }; 61 62 gpio-keys-polled { 63 compatible = "gpio-keys-polled"; 64 poll-interval = <100>; 65 66 power-button { 67 label = "power"; 68 linux,code = <KEY_POWER>; 69 gpios = <&gpio_ao GPIOAO_2 GPIO_ACTIVE_LOW>; 70 }; 71 }; 72 73 hdmi-connector { 74 compatible = "hdmi-connector"; 75 type = "a"; 76 77 port { 78 hdmi_connector_in: endpoint { 79 remote-endpoint = <&hdmi_tx_tmds_out>; 80 }; 81 }; 82 }; 83 84 pwmleds { 85 compatible = "pwm-leds"; 86 87 power { 88 label = "vim:red:power"; 89 pwms = <&pwm_AO_ab 1 7812500 0>; 90 max-brightness = <255>; 91 linux,default-trigger = "default-on"; 92 }; 93 }; 94 95 sdio_pwrseq: sdio-pwrseq { 96 compatible = "mmc-pwrseq-simple"; 97 reset-gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>; 98 clocks = <&wifi32k>; 99 clock-names = "ext_clock"; 100 }; 101 102 hdmi_5v: regulator-hdmi-5v { 103 compatible = "regulator-fixed"; 104 105 regulator-name = "HDMI_5V"; 106 regulator-min-microvolt = <5000000>; 107 regulator-max-microvolt = <5000000>; 108 109 gpio = <&gpio GPIOH_3 GPIO_ACTIVE_HIGH>; 110 enable-active-high; 111 regulator-always-on; 112 }; 113 114 vcc_3v3: regulator-vcc_3v3 { 115 compatible = "regulator-fixed"; 116 regulator-name = "VCC_3V3"; 117 regulator-min-microvolt = <3300000>; 118 regulator-max-microvolt = <3300000>; 119 }; 120 121 vddio_ao18: regulator-vddio_ao18 { 122 compatible = "regulator-fixed"; 123 regulator-name = "VDDIO_AO18"; 124 regulator-min-microvolt = <1800000>; 125 regulator-max-microvolt = <1800000>; 126 }; 127 128 vddio_boot: regulator-vddio_boot { 129 compatible = "regulator-fixed"; 130 regulator-name = "VDDIO_BOOT"; 131 regulator-min-microvolt = <1800000>; 132 regulator-max-microvolt = <1800000>; 133 }; 134 135 vddao_3v3: regulator-vddao_3v3 { 136 compatible = "regulator-fixed"; 137 regulator-name = "VDDAO_3V3"; 138 regulator-min-microvolt = <3300000>; 139 regulator-max-microvolt = <3300000>; 140 }; 141 142 wifi32k: wifi32k { 143 compatible = "pwm-clock"; 144 #clock-cells = <0>; 145 clock-frequency = <32768>; 146 pwms = <&pwm_ef 0 30518 0>; /* PWM_E at 32.768KHz */ 147 }; 148}; 149 150&cec_AO { 151 status = "okay"; 152 pinctrl-0 = <&ao_cec_pins>; 153 pinctrl-names = "default"; 154 hdmi-phandle = <&hdmi_tx>; 155}; 156 157 158&cpu_cooling_maps { 159 map0 { 160 cooling-device = <&gpio_fan THERMAL_NO_LIMIT 1>; 161 }; 162 163 map1 { 164 cooling-device = <&gpio_fan 2 THERMAL_NO_LIMIT>, 165 <&cpu0 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 166 <&cpu1 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 167 <&cpu2 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 168 <&cpu3 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 169 <&cpu4 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 170 <&cpu5 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 171 <&cpu6 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>, 172 <&cpu7 THERMAL_NO_LIMIT THERMAL_NO_LIMIT>; 173 }; 174}; 175 176ðmac { 177 pinctrl-0 = <ð_pins>; 178 pinctrl-names = "default"; 179 180 /* Select external PHY by default */ 181 phy-handle = <&external_phy>; 182 183 amlogic,tx-delay-ns = <2>; 184 185 /* External PHY is in RGMII */ 186 phy-mode = "rgmii"; 187 188 status = "okay"; 189}; 190 191&external_mdio { 192 external_phy: ethernet-phy@0 { 193 /* Realtek RTL8211F (0x001cc916) */ 194 reg = <0>; 195 196 reset-assert-us = <10000>; 197 reset-deassert-us = <30000>; 198 reset-gpios = <&gpio GPIOZ_14 GPIO_ACTIVE_LOW>; 199 200 interrupt-parent = <&gpio_intc>; 201 /* MAC_INTR on GPIOZ_15 */ 202 interrupts = <25 IRQ_TYPE_LEVEL_LOW>; 203 }; 204}; 205 206&hdmi_tx { 207 status = "okay"; 208 pinctrl-0 = <&hdmi_hpd_pins>, <&hdmi_i2c_pins>; 209 pinctrl-names = "default"; 210 hdmi-supply = <&hdmi_5v>; 211}; 212 213&hdmi_tx_tmds_port { 214 hdmi_tx_tmds_out: endpoint { 215 remote-endpoint = <&hdmi_connector_in>; 216 }; 217}; 218 219&i2c_A { 220 status = "okay"; 221 pinctrl-0 = <&i2c_a_pins>; 222 pinctrl-names = "default"; 223}; 224 225&i2c_B { 226 status = "okay"; 227 pinctrl-0 = <&i2c_b_pins>; 228 pinctrl-names = "default"; 229 230 rtc: rtc@51 { 231 /* has to be enabled manually when a battery is connected: */ 232 status = "disabled"; 233 compatible = "haoyu,hym8563"; 234 reg = <0x51>; 235 #clock-cells = <0>; 236 clock-frequency = <32768>; 237 clock-output-names = "xin32k"; 238 }; 239}; 240 241&ir { 242 status = "okay"; 243 pinctrl-0 = <&remote_input_ao_pins>; 244 pinctrl-names = "default"; 245 linux,rc-map-name = "rc-khadas"; 246}; 247 248&pwm_AO_ab { 249 status = "okay"; 250 pinctrl-0 = <&pwm_ao_a_3_pins>, <&pwm_ao_b_pins>; 251 pinctrl-names = "default"; 252 clocks = <&clkc CLKID_FCLK_DIV4>; 253 clock-names = "clkin0"; 254}; 255 256&pwm_ef { 257 status = "okay"; 258 pinctrl-0 = <&pwm_e_pins>, <&pwm_f_clk_pins>; 259 pinctrl-names = "default"; 260 clocks = <&clkc CLKID_FCLK_DIV4>; 261 clock-names = "clkin0"; 262}; 263 264&sd_emmc_a { 265 status = "okay"; 266 pinctrl-0 = <&sdio_pins>; 267 pinctrl-1 = <&sdio_clk_gate_pins>; 268 pinctrl-names = "default", "clk-gate"; 269 #address-cells = <1>; 270 #size-cells = <0>; 271 272 bus-width = <4>; 273 max-frequency = <60000000>; 274 275 non-removable; 276 disable-wp; 277 278 /* WiFi firmware requires power to be kept while in suspend */ 279 keep-power-in-suspend; 280 281 mmc-pwrseq = <&sdio_pwrseq>; 282 283 vmmc-supply = <&vddao_3v3>; 284 vqmmc-supply = <&vddio_boot>; 285 286 brcmf: wifi@1 { 287 reg = <1>; 288 compatible = "brcm,bcm4329-fmac"; 289 }; 290}; 291 292/* SD card */ 293&sd_emmc_b { 294 status = "okay"; 295 pinctrl-0 = <&sdcard_pins>; 296 pinctrl-1 = <&sdcard_clk_gate_pins>; 297 pinctrl-names = "default", "clk-gate"; 298 299 bus-width = <4>; 300 cap-sd-highspeed; 301 max-frequency = <50000000>; 302 disable-wp; 303 304 cd-gpios = <&gpio CARD_6 GPIO_ACTIVE_LOW>; 305 306 vmmc-supply = <&vddao_3v3>; 307 vqmmc-supply = <&vddio_boot>; 308}; 309 310/* eMMC */ 311&sd_emmc_c { 312 status = "okay"; 313 pinctrl-0 = <&emmc_pins>, <&emmc_ds_pins>; 314 pinctrl-1 = <&emmc_clk_gate_pins>; 315 pinctrl-names = "default", "clk-gate"; 316 317 bus-width = <8>; 318 cap-mmc-highspeed; 319 max-frequency = <200000000>; 320 non-removable; 321 disable-wp; 322 mmc-ddr-1_8v; 323 mmc-hs200-1_8v; 324 325 mmc-pwrseq = <&emmc_pwrseq>; 326 vmmc-supply = <&vcc_3v3>; 327 vqmmc-supply = <&vddio_boot>; 328}; 329 330/* 331 * EMMC_DS pin is shared between SPI NOR CS and eMMC Data Strobe 332 * Remove emmc_ds_pins from sd_emmc_c pinctrl-0 then spifc can be enabled 333 */ 334&spifc { 335 status = "disabled"; 336 pinctrl-0 = <&nor_pins>; 337 pinctrl-names = "default"; 338 339 w25q32: spi-flash@0 { 340 #address-cells = <1>; 341 #size-cells = <1>; 342 compatible = "winbond,w25q16", "jedec,spi-nor"; 343 reg = <0>; 344 spi-max-frequency = <3000000>; 345 }; 346}; 347 348/* This one is connected to the Bluetooth module */ 349&uart_A { 350 status = "okay"; 351 pinctrl-0 = <&uart_a_pins>, <&uart_a_cts_rts_pins>; 352 pinctrl-names = "default"; 353 uart-has-rtscts; 354 355 bluetooth { 356 compatible = "brcm,bcm43438-bt"; 357 shutdown-gpios = <&gpio GPIOX_17 GPIO_ACTIVE_HIGH>; 358 max-speed = <2000000>; 359 clocks = <&wifi32k>; 360 clock-names = "lpo"; 361 }; 362}; 363 364/* This is brought out on the Linux_RX (18) and Linux_TX (19) pins: */ 365&uart_AO { 366 status = "okay"; 367 pinctrl-0 = <&uart_ao_a_pins>; 368 pinctrl-names = "default"; 369}; 370 371/* This is brought out on the UART_RX_AO_B (15) and UART_TX_AO_B (16) pins: */ 372&uart_AO_B { 373 status = "okay"; 374 pinctrl-0 = <&uart_ao_b_pins>; 375 pinctrl-names = "default"; 376}; 377 378&saradc { 379 status = "okay"; 380 vref-supply = <&vddio_ao18>; 381}; 382 383&usb0 { 384 status = "okay"; 385}; 386