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}; 285 286&cpu1 { 287 cpu-supply = <&vddcpu_b>; 288 operating-points-v2 = <&cpu_opp_table_0>; 289 clocks = <&clkc CLKID_CPU_CLK>; 290}; 291 292&cpu100 { 293 cpu-supply = <&vddcpu_a>; 294 operating-points-v2 = <&cpub_opp_table_1>; 295 clocks = <&clkc CLKID_CPUB_CLK>; 296}; 297 298&cpu101 { 299 cpu-supply = <&vddcpu_a>; 300 operating-points-v2 = <&cpub_opp_table_1>; 301 clocks = <&clkc CLKID_CPUB_CLK>; 302}; 303 304&cpu102 { 305 cpu-supply = <&vddcpu_a>; 306 operating-points-v2 = <&cpub_opp_table_1>; 307 clocks = <&clkc CLKID_CPUB_CLK>; 308}; 309 310&cpu103 { 311 cpu-supply = <&vddcpu_a>; 312 operating-points-v2 = <&cpub_opp_table_1>; 313 clocks = <&clkc CLKID_CPUB_CLK>; 314}; 315 316/* RK817 only supports 12.5mV steps, round up the values */ 317&cpu_opp_table_0 { 318 opp-1000000000 { 319 opp-microvolt = <737500>; 320 }; 321 opp-1200000000 { 322 opp-microvolt = <737500>; 323 }; 324 opp-1398000000 { 325 opp-microvolt = <762500>; 326 }; 327 opp-1512000000 { 328 opp-microvolt = <800000>; 329 }; 330 opp-1608000000 { 331 opp-microvolt = <837500>; 332 }; 333 opp-1704000000 { 334 opp-microvolt = <862500>; 335 }; 336 opp-1896000000 { 337 opp-microvolt = <987500>; 338 }; 339 opp-1992000000 { 340 opp-microvolt = <1012500>; 341 }; 342}; 343 344/* RK818 only supports 12.5mV steps, round up the values */ 345&cpub_opp_table_1 { 346 opp-1000000000 { 347 opp-microvolt = <775000>; 348 }; 349 opp-1200000000 { 350 opp-microvolt = <775000>; 351 }; 352 opp-1398000000 { 353 opp-microvolt = <800000>; 354 }; 355 opp-1512000000 { 356 opp-microvolt = <825000>; 357 }; 358 opp-1608000000 { 359 opp-microvolt = <862500>; 360 }; 361 opp-1704000000 { 362 opp-microvolt = <900000>; 363 }; 364 opp-1800000000 { 365 opp-microvolt = <987500>; 366 }; 367 opp-1908000000 { 368 opp-microvolt = <1025000>; 369 }; 370}; 371 372&i2c_AO { 373 status = "okay"; 374 pinctrl-0 = <&i2c_ao_sck_pins>, <&i2c_ao_sda_pins>; 375 pinctrl-names = "default"; 376 377 rk818: pmic@1c { 378 compatible = "rockchip,rk818"; 379 reg = <0x1c>; 380 interrupt-parent = <&gpio_intc>; 381 interrupts = <IRQID_GPIOAO_7 IRQ_TYPE_LEVEL_LOW>; /* GPIOAO_7 */ 382 #clock-cells = <1>; 383 384 vcc1-supply = <&vdd_sys>; 385 vcc2-supply = <&vdd_sys>; 386 vcc3-supply = <&vdd_sys>; 387 vcc4-supply = <&vdd_sys>; 388 vcc6-supply = <&vdd_sys>; 389 vcc7-supply = <&vcc_2v3>; 390 vcc8-supply = <&vcc_2v3>; 391 vcc9-supply = <&vddao_3v3>; 392 boost-supply = <&vdd_sys>; 393 394 regulators { 395 vddcpu_a: DCDC_REG1 { 396 regulator-name = "vddcpu_a"; 397 regulator-always-on; 398 regulator-boot-on; 399 regulator-min-microvolt = <775000>; 400 regulator-max-microvolt = <1025000>; 401 regulator-ramp-delay = <6001>; 402 regulator-state-mem { 403 regulator-on-in-suspend; 404 regulator-suspend-microvolt = <775000>; 405 }; 406 }; 407 408 vdd_ee: DCDC_REG2 { 409 regulator-name = "vdd_ee"; 410 regulator-always-on; 411 regulator-boot-on; 412 regulator-min-microvolt = <875000>; 413 regulator-max-microvolt = <1250000>; 414 regulator-ramp-delay = <6001>; 415 regulator-state-mem { 416 regulator-on-in-suspend; 417 regulator-suspend-microvolt = <875000>; 418 }; 419 }; 420 421 vddq_1v1: DCDC_REG3 { 422 regulator-name = "vddq_1v1"; 423 regulator-always-on; 424 regulator-boot-on; 425 regulator-state-mem { 426 regulator-on-in-suspend; 427 }; 428 }; 429 430 vddao_3v3: DCDC_REG4 { 431 regulator-always-on; 432 regulator-boot-on; 433 regulator-min-microvolt = <3300000>; 434 regulator-max-microvolt = <3300000>; 435 regulator-name = "vddao_3v3"; 436 regulator-state-mem { 437 regulator-on-in-suspend; 438 regulator-suspend-microvolt = <3300000>; 439 }; 440 }; 441 442 hp_5v: DCDC_BOOST { 443 regulator-always-on; 444 regulator-boot-on; 445 regulator-name = "hp_5v"; 446 regulator-min-microvolt = <5000000>; 447 regulator-max-microvolt = <5000000>; 448 regulator-state-mem { 449 regulator-off-in-suspend; 450 }; 451 }; 452 453 vddio_ao1v8: LDO_REG5 { 454 regulator-always-on; 455 regulator-boot-on; 456 regulator-min-microvolt = <1800000>; 457 regulator-max-microvolt = <1800000>; 458 regulator-name = "vddio_ao1v8"; 459 regulator-state-mem { 460 regulator-on-in-suspend; 461 regulator-suspend-microvolt = <1800000>; 462 }; 463 }; 464 465 vddq_1v8: LDO_REG7 { 466 regulator-always-on; 467 regulator-boot-on; 468 regulator-min-microvolt = <1800000>; 469 regulator-max-microvolt = <1800000>; 470 regulator-name = "vddq_1v8"; 471 regulator-state-mem { 472 regulator-on-in-suspend; 473 regulator-suspend-microvolt = <1800000>; 474 }; 475 }; 476 477 vddio_c: LDO_REG9 { 478 regulator-always-on; 479 regulator-boot-on; 480 regulator-min-microvolt = <1800000>; 481 regulator-max-microvolt = <3300000>; 482 regulator-name = "vddio_c"; 483 regulator-state-mem { 484 regulator-on-in-suspend; 485 regulator-suspend-microvolt = <3300000>; 486 }; 487 }; 488 489 vcc_sd: SWITCH_REG { 490 regulator-name = "vcc_sd"; 491 regulator-always-on; 492 regulator-boot-on; 493 regulator-min-microvolt = <3300000>; 494 regulator-max-microvolt = <3300000>; 495 regulator-state-mem { 496 regulator-on-in-suspend; 497 }; 498 }; 499 500 OTG_SWITCH { 501 regulator-name = "otg_switch"; 502 regulator-state-mem { 503 regulator-off-in-suspend; 504 }; 505 }; 506 }; 507 }; 508}; 509 510&i2c3 { 511 status = "okay"; 512 pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>; 513 pinctrl-names = "default"; 514 515 rk817: pmic@20 { 516 compatible = "rockchip,rk817"; 517 reg = <0x20>; 518 interrupt-parent = <&gpio_intc>; 519 520 interrupts = <IRQID_GPIOAO_5 IRQ_TYPE_LEVEL_LOW>; /* GPIOAO_5 */ 521 522 vcc1-supply = <&vdd_sys>; 523 vcc2-supply = <&vdd_sys>; 524 vcc3-supply = <&vdd_sys>; 525 vcc4-supply = <&vdd_sys>; 526 vcc5-supply = <&vdd_sys>; 527 vcc6-supply = <&vdd_sys>; 528 vcc7-supply = <&vdd_sys>; 529 vcc8-supply = <&vdd_sys>; 530 vcc9-supply = <&rk817_boost>; 531 532 #sound-dai-cells = <0>; 533 clocks = <&codec_clk>; 534 clock-names = "mclk"; 535 536 #clock-cells = <1>; 537 538 regulators { 539 vddcpu_b: DCDC_REG2 { 540 regulator-always-on; 541 regulator-boot-on; 542 regulator-min-microvolt = <737500>; 543 regulator-max-microvolt = <1012500>; 544 regulator-ramp-delay = <6001>; 545 regulator-initial-mode = <0x2>; 546 regulator-name = "vddcpu_b"; 547 regulator-state-mem { 548 regulator-on-in-suspend; 549 regulator-suspend-microvolt = <1000000>; 550 }; 551 }; 552 553 vcc_2v3: DCDC_REG3 { 554 regulator-always-on; 555 regulator-boot-on; 556 regulator-min-microvolt = <2300000>; 557 regulator-max-microvolt = <2400000>; 558 regulator-initial-mode = <0x2>; 559 regulator-name = "vcc_2v3"; 560 regulator-state-mem { 561 regulator-on-in-suspend; 562 }; 563 }; 564 565 LDO_REG4 { 566 regulator-always-on; 567 regulator-boot-on; 568 regulator-min-microvolt = <3300000>; 569 regulator-max-microvolt = <3300000>; 570 regulator-name = "vdd_codec"; 571 regulator-state-mem { 572 regulator-off-in-suspend; 573 }; 574 }; 575 576 vcc_lcd: LDO_REG8 { 577 regulator-min-microvolt = <3300000>; 578 regulator-max-microvolt = <3300000>; 579 regulator-name = "vcc_lcd"; 580 regulator-state-mem { 581 regulator-off-in-suspend; 582 }; 583 }; 584 585 rk817_boost: BOOST { 586 regulator-always-on; 587 regulator-boot-on; 588 regulator-min-microvolt = <5000000>; 589 regulator-max-microvolt = <5400000>; 590 regulator-name = "rk817_boost"; 591 regulator-state-mem { 592 regulator-off-in-suspend; 593 }; 594 }; 595 596 usb_host: OTG_SWITCH { 597 regulator-name = "usb_host"; 598 regulator-min-microvolt = <5000000>; 599 regulator-max-microvolt = <5000000>; 600 regulator-state-mem { 601 regulator-off-in-suspend; 602 }; 603 }; 604 }; 605 }; 606}; 607 608&clkc_audio { 609 status = "okay"; 610}; 611 612ð_phy { 613 status = "disabled"; 614}; 615 616&frddr_a { 617 status = "okay"; 618}; 619 620&periphs_pinctrl { 621 keypad_gpio_pins: keypad-gpio-state { 622 mux { 623 groups = "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3", 624 "GPIOX_4", "GPIOX_5", "GPIOX_6", "GPIOX_7", 625 "GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11", 626 "GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15", 627 "GPIOX_16", "GPIOX_17", "GPIOX_18", "GPIOX_19"; 628 function = "gpio_periphs"; 629 bias-pull-up; 630 output-disable; 631 }; 632 }; 633}; 634 635&saradc { 636 status = "okay"; 637 vref-supply = <&vddio_ao1v8>; 638}; 639 640/* SD card */ 641&sd_emmc_b { 642 status = "okay"; 643 pinctrl-0 = <&sdcard_c_pins>; 644 pinctrl-1 = <&sdcard_clk_gate_c_pins>; 645 pinctrl-names = "default", "clk-gate"; 646 647 bus-width = <4>; 648 cap-sd-highspeed; 649 max-frequency = <50000000>; 650 disable-wp; 651 652 cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>; 653 vmmc-supply = <&vcc_sd>; 654 vqmmc-supply = <&vddio_c>; 655 656}; 657 658/* eMMC */ 659&sd_emmc_c { 660 status = "okay"; 661 pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>; 662 pinctrl-1 = <&emmc_clk_gate_pins>; 663 pinctrl-names = "default", "clk-gate"; 664 665 bus-width = <8>; 666 cap-mmc-highspeed; 667 mmc-ddr-1_8v; 668 mmc-hs200-1_8v; 669 max-frequency = <200000000>; 670 disable-wp; 671 672 mmc-pwrseq = <&emmc_pwrseq>; 673 vmmc-supply = <&vcc_sd>; 674 vqmmc-supply = <&vddio_ao1v8>; 675}; 676 677 678&tdmif_b { 679 pinctrl-0 = <&tdm_b_dout0_pins>, <&tdm_b_fs_pins>, <&tdm_b_sclk_pins>, <&tdm_b_din1_pins>; 680 pinctrl-names = "default"; 681 status = "okay"; 682 683 assigned-clocks = <&clkc_audio AUD_CLKID_TDM_SCLK_PAD1>, 684 <&clkc_audio AUD_CLKID_TDM_LRCLK_PAD1>; 685 assigned-clock-parents = <&clkc_audio AUD_CLKID_MST_B_SCLK>, 686 <&clkc_audio AUD_CLKID_MST_B_LRCLK>; 687 assigned-clock-rates = <0>, <0>; 688}; 689 690&tdmin_b { 691 status = "okay"; 692}; 693 694&tdmout_b { 695 status = "okay"; 696}; 697 698&toddr_a { 699 status = "okay"; 700}; 701 702&uart_AO { 703 status = "okay"; 704 pinctrl-0 = <&uart_ao_a_pins>; 705 pinctrl-names = "default"; 706}; 707 708&usb { 709 status = "okay"; 710 dr_mode = "peripheral"; 711}; 712 713&usb2_phy0 { 714 status = "okay"; 715}; 716 717&usb2_phy1 { 718 status = "okay"; 719 phy-supply = <&usb_host>; 720}; 721