1// SPDX-License-Identifier: (GPL-2.0+ OR MIT) 2/* 3 * Copyright (c) 2022 Neil Armstrong <neil.armstrong@linaro.org> 4 */ 5 6/dts-v1/; 7 8#include "meson-g12b-s922x.dtsi" 9#include <dt-bindings/input/input.h> 10#include <dt-bindings/leds/common.h> 11#include <dt-bindings/gpio/meson-g12a-gpio.h> 12#include <dt-bindings/sound/meson-g12a-toacodec.h> 13#include <dt-bindings/sound/meson-g12a-tohdmitx.h> 14 15/ { 16 compatible = "hardkernel,odroid-go-ultra", "amlogic,s922x", "amlogic,g12b"; 17 model = "Hardkernel ODROID-GO-Ultra"; 18 19 aliases { 20 serial0 = &uart_AO; 21 rtc0 = &vrtc; 22 }; 23 24 adc-joystick-left { 25 compatible = "adc-joystick"; 26 io-channels = <&saradc 2>, <&saradc 3>; 27 poll-interval = <10>; 28 #address-cells = <1>; 29 #size-cells = <0>; 30 31 axis@0 { 32 reg = <0>; 33 linux,code = <ABS_Y>; 34 abs-range = <3150 950>; 35 abs-fuzz = <32>; 36 abs-flat = <64>; 37 }; 38 axis@1 { 39 reg = <1>; 40 linux,code = <ABS_X>; 41 abs-range = <700 2900>; 42 abs-fuzz = <32>; 43 abs-flat = <64>; 44 }; 45 }; 46 47 adc-joystick-right { 48 compatible = "adc-joystick"; 49 io-channels = <&saradc 0>, <&saradc 1>; 50 poll-interval = <10>; 51 #address-cells = <1>; 52 #size-cells = <0>; 53 54 axis@0 { 55 reg = <0>; 56 linux,code = <ABS_RY>; 57 abs-range = <3150 950>; 58 abs-fuzz = <32>; 59 abs-flat = <64>; 60 }; 61 axis@1 { 62 reg = <1>; 63 linux,code = <ABS_RX>; 64 abs-range = <800 3000>; 65 abs-fuzz = <32>; 66 abs-flat = <64>; 67 }; 68 }; 69 70 chosen { 71 stdout-path = "serial0:115200n8"; 72 }; 73 74 codec_clk: codec-clk { 75 compatible = "fixed-clock"; 76 clock-frequency = <12288000>; 77 clock-output-names = "codec_clk"; 78 #clock-cells = <0>; 79 }; 80 81 gpio-keys { 82 compatible = "gpio-keys-polled"; 83 poll-interval = <10>; 84 pinctrl-0 = <&keypad_gpio_pins>; 85 pinctrl-names = "default"; 86 87 volume-up-button { 88 label = "VOLUME-UP"; 89 linux,code = <KEY_VOLUMEUP>; 90 gpios = <&gpio GPIOX_8 GPIO_ACTIVE_LOW>; 91 }; 92 volume-down-button { 93 label = "VOLUME-DOWN"; 94 linux,code = <KEY_VOLUMEDOWN>; 95 gpios = <&gpio GPIOX_9 GPIO_ACTIVE_LOW>; 96 }; 97 dpad-up-button { 98 label = "DPAD-UP"; 99 linux,code = <BTN_DPAD_UP>; 100 gpios = <&gpio GPIOX_0 GPIO_ACTIVE_LOW>; 101 }; 102 dpad-down-button { 103 label = "DPAD-DOWN"; 104 linux,code = <BTN_DPAD_DOWN>; 105 gpios = <&gpio GPIOX_1 GPIO_ACTIVE_LOW>; 106 }; 107 dpad-left-button { 108 label = "DPAD-LEFT"; 109 linux,code = <BTN_DPAD_LEFT>; 110 gpios = <&gpio GPIOX_2 GPIO_ACTIVE_LOW>; 111 }; 112 dpad-right-button { 113 label = "DPAD-RIGHT"; 114 linux,code = <BTN_DPAD_RIGHT>; 115 gpios = <&gpio GPIOX_3 GPIO_ACTIVE_LOW>; 116 }; 117 a-button { 118 label = "A"; 119 linux,code = <BTN_EAST>; 120 gpios = <&gpio GPIOX_4 GPIO_ACTIVE_LOW>; 121 }; 122 b-button { 123 label = "B"; 124 linux,code = <BTN_SOUTH>; 125 gpios = <&gpio GPIOX_5 GPIO_ACTIVE_LOW>; 126 }; 127 y-button { 128 label = "Y"; 129 linux,code = <BTN_WEST>; 130 gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>; 131 }; 132 x-button { 133 label = "X"; 134 linux,code = <BTN_NORTH>; 135 gpios = <&gpio GPIOX_7 GPIO_ACTIVE_LOW>; 136 }; 137 f1-button { 138 label = "F1"; 139 linux,code = <BTN_TRIGGER_HAPPY1>; 140 gpios = <&gpio GPIOX_17 GPIO_ACTIVE_LOW>; 141 }; 142 f2-button { 143 label = "F2"; 144 linux,code = <BTN_TRIGGER_HAPPY2>; 145 gpios = <&gpio GPIOX_10 GPIO_ACTIVE_LOW>; 146 }; 147 f3-button { 148 label = "F3"; 149 linux,code = <BTN_TRIGGER_HAPPY3>; 150 gpios = <&gpio GPIOX_11 GPIO_ACTIVE_LOW>; 151 }; 152 f4-button { 153 label = "F4"; 154 linux,code = <BTN_TRIGGER_HAPPY4>; 155 gpios = <&gpio GPIOX_12 GPIO_ACTIVE_LOW>; 156 }; 157 f5-button { 158 label = "F5"; 159 linux,code = <BTN_TRIGGER_HAPPY5>; 160 gpios = <&gpio GPIOX_13 GPIO_ACTIVE_LOW>; 161 }; 162 f6-button { 163 label = "F6"; 164 linux,code = <BTN_TRIGGER_HAPPY6>; 165 gpios = <&gpio GPIOX_16 GPIO_ACTIVE_LOW>; 166 }; 167 top-left-button { 168 label = "TOP Left"; 169 linux,code = <BTN_TL>; 170 gpios = <&gpio GPIOX_14 GPIO_ACTIVE_LOW>; 171 }; 172 top-left2-button { 173 label = "TOP Left 2"; 174 linux,code = <BTN_TL2>; 175 gpios = <&gpio GPIOX_19 GPIO_ACTIVE_LOW>; 176 }; 177 top-right-button { 178 label = "TOP Right"; 179 linux,code = <BTN_TR>; 180 gpios = <&gpio GPIOX_15 GPIO_ACTIVE_LOW>; 181 }; 182 top-right2-button { 183 label = "TOP Right 2"; 184 linux,code = <BTN_TR2>; 185 gpios = <&gpio GPIOX_18 GPIO_ACTIVE_LOW>; 186 }; 187 }; 188 189 memory@0 { 190 device_type = "memory"; 191 reg = <0x0 0x0 0x0 0x40000000>; 192 }; 193 194 emmc_pwrseq: emmc-pwrseq { 195 compatible = "mmc-pwrseq-emmc"; 196 reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>; 197 }; 198 199 leds { 200 compatible = "gpio-leds"; 201 202 led-blue { 203 color = <LED_COLOR_ID_BLUE>; 204 gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_HIGH>; 205 linux,default-trigger = "heartbeat"; 206 }; 207 }; 208 209 vdd_sys: regulator-vdd-sys { 210 compatible = "regulator-fixed"; 211 regulator-name = "VDD_SYS"; 212 regulator-min-microvolt = <3800000>; 213 regulator-max-microvolt = <3800000>; 214 regulator-always-on; 215 }; 216 217 sound { 218 compatible = "amlogic,axg-sound-card"; 219 model = "Odroid GO Ultra"; 220 audio-widgets = "Microphone", "Mic Jack", 221 "Headphone", "Headphones", 222 "Speaker", "Internal Speakers"; 223 audio-aux-devs = <&tdmout_b>, <&tdmin_b>, <&speaker_amp>; 224 audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1", 225 "TDM_B Playback", "TDMOUT_B OUT", 226 "TDMIN_B IN 1", "TDM_B Capture", 227 "TDMIN_B IN 4", "TDM_B Loopback", 228 "TODDR_A IN 1", "TDMIN_B OUT", 229 "MICL", "Mic Jack", 230 "Headphones", "HPOL", 231 "Headphones", "HPOR", 232 "Speaker Amplifier INL", "HPOL", 233 "Speaker Amplifier INR", "HPOR", 234 "Internal Speakers", "Speaker Amplifier OUTL", 235 "Internal Speakers", "Speaker Amplifier OUTR"; 236 237 clocks = <&clkc CLKID_MPLL2>, 238 <&clkc CLKID_MPLL0>, 239 <&clkc CLKID_MPLL1>; 240 241 assigned-clocks = <&clkc CLKID_MPLL2>, 242 <&clkc CLKID_MPLL0>, 243 <&clkc CLKID_MPLL1>; 244 assigned-clock-parents = <0>, <0>, <0>; 245 assigned-clock-rates = <294912000>, 246 <270950400>, 247 <393216000>; 248 249 dai-link-0 { 250 sound-dai = <&frddr_a>; 251 }; 252 253 dai-link-1 { 254 sound-dai = <&toddr_a>; 255 }; 256 257 dai-link-2 { 258 sound-dai = <&tdmif_b>; 259 dai-format = "i2s"; 260 dai-tdm-slot-tx-mask-0 = <1 1>; 261 mclk-fs = <256>; 262 263 codec-0 { 264 sound-dai = <&rk817>; 265 }; 266 }; 267 }; 268 269 speaker_amp: speaker-amplifier { 270 compatible = "simple-audio-amplifier"; 271 sound-name-prefix = "Speaker Amplifier"; 272 VCC-supply = <&hp_5v>; 273 }; 274}; 275 276&arb { 277 status = "okay"; 278}; 279 280&cpu0 { 281 cpu-supply = <&vddcpu_b>; 282 operating-points-v2 = <&cpu_opp_table_0>; 283 clocks = <&clkc CLKID_CPU_CLK>; 284 clock-latency = <50000>; 285}; 286 287&cpu1 { 288 cpu-supply = <&vddcpu_b>; 289 operating-points-v2 = <&cpu_opp_table_0>; 290 clocks = <&clkc CLKID_CPU_CLK>; 291 clock-latency = <50000>; 292}; 293 294&cpu100 { 295 cpu-supply = <&vddcpu_a>; 296 operating-points-v2 = <&cpub_opp_table_1>; 297 clocks = <&clkc CLKID_CPUB_CLK>; 298 clock-latency = <50000>; 299}; 300 301&cpu101 { 302 cpu-supply = <&vddcpu_a>; 303 operating-points-v2 = <&cpub_opp_table_1>; 304 clocks = <&clkc CLKID_CPUB_CLK>; 305 clock-latency = <50000>; 306}; 307 308&cpu102 { 309 cpu-supply = <&vddcpu_a>; 310 operating-points-v2 = <&cpub_opp_table_1>; 311 clocks = <&clkc CLKID_CPUB_CLK>; 312 clock-latency = <50000>; 313}; 314 315&cpu103 { 316 cpu-supply = <&vddcpu_a>; 317 operating-points-v2 = <&cpub_opp_table_1>; 318 clocks = <&clkc CLKID_CPUB_CLK>; 319 clock-latency = <50000>; 320}; 321 322/* RK817 only supports 12.5mV steps, round up the values */ 323&cpu_opp_table_0 { 324 opp-1000000000 { 325 opp-microvolt = <737500>; 326 }; 327 opp-1200000000 { 328 opp-microvolt = <737500>; 329 }; 330 opp-1398000000 { 331 opp-microvolt = <762500>; 332 }; 333 opp-1512000000 { 334 opp-microvolt = <800000>; 335 }; 336 opp-1608000000 { 337 opp-microvolt = <837500>; 338 }; 339 opp-1704000000 { 340 opp-microvolt = <862500>; 341 }; 342 opp-1896000000 { 343 opp-microvolt = <987500>; 344 }; 345 opp-1992000000 { 346 opp-microvolt = <1012500>; 347 }; 348}; 349 350/* RK818 only supports 12.5mV steps, round up the values */ 351&cpub_opp_table_1 { 352 opp-1000000000 { 353 opp-microvolt = <775000>; 354 }; 355 opp-1200000000 { 356 opp-microvolt = <775000>; 357 }; 358 opp-1398000000 { 359 opp-microvolt = <800000>; 360 }; 361 opp-1512000000 { 362 opp-microvolt = <825000>; 363 }; 364 opp-1608000000 { 365 opp-microvolt = <862500>; 366 }; 367 opp-1704000000 { 368 opp-microvolt = <900000>; 369 }; 370 opp-1800000000 { 371 opp-microvolt = <987500>; 372 }; 373 opp-1908000000 { 374 opp-microvolt = <1025000>; 375 }; 376}; 377 378&i2c_AO { 379 status = "okay"; 380 pinctrl-0 = <&i2c_ao_sck_pins>, <&i2c_ao_sda_pins>; 381 pinctrl-names = "default"; 382 383 rk818: pmic@1c { 384 compatible = "rockchip,rk818"; 385 reg = <0x1c>; 386 interrupt-parent = <&gpio_intc>; 387 interrupts = <IRQID_GPIOAO_7 IRQ_TYPE_LEVEL_LOW>; /* GPIOAO_7 */ 388 #clock-cells = <1>; 389 390 vcc1-supply = <&vdd_sys>; 391 vcc2-supply = <&vdd_sys>; 392 vcc3-supply = <&vdd_sys>; 393 vcc4-supply = <&vdd_sys>; 394 vcc6-supply = <&vdd_sys>; 395 vcc7-supply = <&vcc_2v3>; 396 vcc8-supply = <&vcc_2v3>; 397 vcc9-supply = <&vddao_3v3>; 398 boost-supply = <&vdd_sys>; 399 400 regulators { 401 vddcpu_a: DCDC_REG1 { 402 regulator-name = "vddcpu_a"; 403 regulator-always-on; 404 regulator-boot-on; 405 regulator-min-microvolt = <775000>; 406 regulator-max-microvolt = <1025000>; 407 regulator-ramp-delay = <6001>; 408 regulator-state-mem { 409 regulator-on-in-suspend; 410 regulator-suspend-microvolt = <775000>; 411 }; 412 }; 413 414 vdd_ee: DCDC_REG2 { 415 regulator-name = "vdd_ee"; 416 regulator-always-on; 417 regulator-boot-on; 418 regulator-min-microvolt = <875000>; 419 regulator-max-microvolt = <1250000>; 420 regulator-ramp-delay = <6001>; 421 regulator-state-mem { 422 regulator-on-in-suspend; 423 regulator-suspend-microvolt = <875000>; 424 }; 425 }; 426 427 vddq_1v1: DCDC_REG3 { 428 regulator-name = "vddq_1v1"; 429 regulator-always-on; 430 regulator-boot-on; 431 regulator-state-mem { 432 regulator-on-in-suspend; 433 }; 434 }; 435 436 vddao_3v3: DCDC_REG4 { 437 regulator-always-on; 438 regulator-boot-on; 439 regulator-min-microvolt = <3300000>; 440 regulator-max-microvolt = <3300000>; 441 regulator-name = "vddao_3v3"; 442 regulator-state-mem { 443 regulator-on-in-suspend; 444 regulator-suspend-microvolt = <3300000>; 445 }; 446 }; 447 448 hp_5v: DCDC_BOOST { 449 regulator-always-on; 450 regulator-boot-on; 451 regulator-name = "hp_5v"; 452 regulator-min-microvolt = <5000000>; 453 regulator-max-microvolt = <5000000>; 454 regulator-state-mem { 455 regulator-off-in-suspend; 456 }; 457 }; 458 459 vddio_ao1v8: LDO_REG5 { 460 regulator-always-on; 461 regulator-boot-on; 462 regulator-min-microvolt = <1800000>; 463 regulator-max-microvolt = <1800000>; 464 regulator-name = "vddio_ao1v8"; 465 regulator-state-mem { 466 regulator-on-in-suspend; 467 regulator-suspend-microvolt = <1800000>; 468 }; 469 }; 470 471 vddq_1v8: LDO_REG7 { 472 regulator-always-on; 473 regulator-boot-on; 474 regulator-min-microvolt = <1800000>; 475 regulator-max-microvolt = <1800000>; 476 regulator-name = "vddq_1v8"; 477 regulator-state-mem { 478 regulator-on-in-suspend; 479 regulator-suspend-microvolt = <1800000>; 480 }; 481 }; 482 483 vddio_c: LDO_REG9 { 484 regulator-always-on; 485 regulator-boot-on; 486 regulator-min-microvolt = <1800000>; 487 regulator-max-microvolt = <3300000>; 488 regulator-name = "vddio_c"; 489 regulator-state-mem { 490 regulator-on-in-suspend; 491 regulator-suspend-microvolt = <3300000>; 492 }; 493 }; 494 495 vcc_sd: SWITCH_REG { 496 regulator-name = "vcc_sd"; 497 regulator-always-on; 498 regulator-boot-on; 499 regulator-min-microvolt = <3300000>; 500 regulator-max-microvolt = <3300000>; 501 regulator-state-mem { 502 regulator-on-in-suspend; 503 }; 504 }; 505 506 OTG_SWITCH { 507 regulator-name = "otg_switch"; 508 regulator-state-mem { 509 regulator-off-in-suspend; 510 }; 511 }; 512 }; 513 }; 514}; 515 516&i2c3 { 517 status = "okay"; 518 pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>; 519 pinctrl-names = "default"; 520 521 rk817: pmic@20 { 522 compatible = "rockchip,rk817"; 523 reg = <0x20>; 524 interrupt-parent = <&gpio_intc>; 525 526 interrupts = <IRQID_GPIOAO_5 IRQ_TYPE_LEVEL_LOW>; /* GPIOAO_5 */ 527 528 vcc1-supply = <&vdd_sys>; 529 vcc2-supply = <&vdd_sys>; 530 vcc3-supply = <&vdd_sys>; 531 vcc4-supply = <&vdd_sys>; 532 vcc5-supply = <&vdd_sys>; 533 vcc6-supply = <&vdd_sys>; 534 vcc7-supply = <&vdd_sys>; 535 vcc8-supply = <&vdd_sys>; 536 vcc9-supply = <&rk817_boost>; 537 538 #sound-dai-cells = <0>; 539 clocks = <&codec_clk>; 540 clock-names = "mclk"; 541 542 #clock-cells = <1>; 543 544 regulators { 545 vddcpu_b: DCDC_REG2 { 546 regulator-always-on; 547 regulator-boot-on; 548 regulator-min-microvolt = <737500>; 549 regulator-max-microvolt = <1012500>; 550 regulator-ramp-delay = <6001>; 551 regulator-initial-mode = <0x2>; 552 regulator-name = "vddcpu_b"; 553 regulator-state-mem { 554 regulator-on-in-suspend; 555 regulator-suspend-microvolt = <1000000>; 556 }; 557 }; 558 559 vcc_2v3: DCDC_REG3 { 560 regulator-always-on; 561 regulator-boot-on; 562 regulator-min-microvolt = <2300000>; 563 regulator-max-microvolt = <2400000>; 564 regulator-initial-mode = <0x2>; 565 regulator-name = "vcc_2v3"; 566 regulator-state-mem { 567 regulator-on-in-suspend; 568 }; 569 }; 570 571 LDO_REG4 { 572 regulator-always-on; 573 regulator-boot-on; 574 regulator-min-microvolt = <3300000>; 575 regulator-max-microvolt = <3300000>; 576 regulator-name = "vdd_codec"; 577 regulator-state-mem { 578 regulator-off-in-suspend; 579 }; 580 }; 581 582 vcc_lcd: LDO_REG8 { 583 regulator-min-microvolt = <3300000>; 584 regulator-max-microvolt = <3300000>; 585 regulator-name = "vcc_lcd"; 586 regulator-state-mem { 587 regulator-off-in-suspend; 588 }; 589 }; 590 591 rk817_boost: BOOST { 592 regulator-always-on; 593 regulator-boot-on; 594 regulator-min-microvolt = <5000000>; 595 regulator-max-microvolt = <5400000>; 596 regulator-name = "rk817_boost"; 597 regulator-state-mem { 598 regulator-off-in-suspend; 599 }; 600 }; 601 602 usb_host: OTG_SWITCH { 603 regulator-name = "usb_host"; 604 regulator-min-microvolt = <5000000>; 605 regulator-max-microvolt = <5000000>; 606 regulator-state-mem { 607 regulator-off-in-suspend; 608 }; 609 }; 610 }; 611 }; 612}; 613 614&clkc_audio { 615 status = "okay"; 616}; 617 618ð_phy { 619 status = "disabled"; 620}; 621 622&frddr_a { 623 status = "okay"; 624}; 625 626&periphs_pinctrl { 627 keypad_gpio_pins: keypad-gpio-state { 628 mux { 629 groups = "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3", 630 "GPIOX_4", "GPIOX_5", "GPIOX_6", "GPIOX_7", 631 "GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11", 632 "GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15", 633 "GPIOX_16", "GPIOX_17", "GPIOX_18", "GPIOX_19"; 634 function = "gpio_periphs"; 635 bias-pull-up; 636 output-disable; 637 }; 638 }; 639}; 640 641&saradc { 642 status = "okay"; 643 vref-supply = <&vddio_ao1v8>; 644}; 645 646/* SD card */ 647&sd_emmc_b { 648 status = "okay"; 649 pinctrl-0 = <&sdcard_c_pins>; 650 pinctrl-1 = <&sdcard_clk_gate_c_pins>; 651 pinctrl-names = "default", "clk-gate"; 652 653 bus-width = <4>; 654 cap-sd-highspeed; 655 max-frequency = <50000000>; 656 disable-wp; 657 658 cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>; 659 vmmc-supply = <&vcc_sd>; 660 vqmmc-supply = <&vddio_c>; 661 662}; 663 664/* eMMC */ 665&sd_emmc_c { 666 status = "okay"; 667 pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>; 668 pinctrl-1 = <&emmc_clk_gate_pins>; 669 pinctrl-names = "default", "clk-gate"; 670 671 bus-width = <8>; 672 cap-mmc-highspeed; 673 mmc-ddr-1_8v; 674 mmc-hs200-1_8v; 675 max-frequency = <200000000>; 676 disable-wp; 677 678 mmc-pwrseq = <&emmc_pwrseq>; 679 vmmc-supply = <&vcc_sd>; 680 vqmmc-supply = <&vddio_ao1v8>; 681}; 682 683 684&tdmif_b { 685 pinctrl-0 = <&tdm_b_dout0_pins>, <&tdm_b_fs_pins>, <&tdm_b_sclk_pins>, <&tdm_b_din1_pins>; 686 pinctrl-names = "default"; 687 status = "okay"; 688 689 assigned-clocks = <&clkc_audio AUD_CLKID_TDM_SCLK_PAD1>, 690 <&clkc_audio AUD_CLKID_TDM_LRCLK_PAD1>; 691 assigned-clock-parents = <&clkc_audio AUD_CLKID_MST_B_SCLK>, 692 <&clkc_audio AUD_CLKID_MST_B_LRCLK>; 693 assigned-clock-rates = <0>, <0>; 694}; 695 696&tdmin_b { 697 status = "okay"; 698}; 699 700&tdmout_b { 701 status = "okay"; 702}; 703 704&toddr_a { 705 status = "okay"; 706}; 707 708&uart_AO { 709 status = "okay"; 710 pinctrl-0 = <&uart_ao_a_pins>; 711 pinctrl-names = "default"; 712}; 713 714&usb { 715 status = "okay"; 716 dr_mode = "peripheral"; 717}; 718 719&usb2_phy0 { 720 status = "okay"; 721}; 722 723&usb2_phy1 { 724 status = "okay"; 725 phy-supply = <&usb_host>; 726}; 727