// SPDX-License-Identifier: (GPL-2.0+ OR MIT) /* * Copyright (c) 2022 Neil Armstrong */ /dts-v1/; #include "meson-g12b-s922x.dtsi" #include #include #include #include #include / { compatible = "hardkernel,odroid-go-ultra", "amlogic,s922x", "amlogic,g12b"; model = "Hardkernel ODROID-GO-Ultra"; aliases { serial0 = &uart_AO; rtc0 = &vrtc; }; adc-joystick-left { compatible = "adc-joystick"; io-channels = <&saradc 2>, <&saradc 3>; poll-interval = <10>; #address-cells = <1>; #size-cells = <0>; axis@0 { reg = <0>; linux,code = ; abs-range = <3150 950>; abs-fuzz = <32>; abs-flat = <64>; }; axis@1 { reg = <1>; linux,code = ; abs-range = <700 2900>; abs-fuzz = <32>; abs-flat = <64>; }; }; adc-joystick-right { compatible = "adc-joystick"; io-channels = <&saradc 0>, <&saradc 1>; poll-interval = <10>; #address-cells = <1>; #size-cells = <0>; axis@0 { reg = <0>; linux,code = ; abs-range = <3150 950>; abs-fuzz = <32>; abs-flat = <64>; }; axis@1 { reg = <1>; linux,code = ; abs-range = <800 3000>; abs-fuzz = <32>; abs-flat = <64>; }; }; chosen { stdout-path = "serial0:115200n8"; }; codec_clk: codec-clk { compatible = "fixed-clock"; clock-frequency = <12288000>; clock-output-names = "codec_clk"; #clock-cells = <0>; }; gpio-keys { compatible = "gpio-keys-polled"; poll-interval = <10>; pinctrl-0 = <&keypad_gpio_pins>; pinctrl-names = "default"; volume-up-button { label = "VOLUME-UP"; linux,code = ; gpios = <&gpio GPIOX_8 GPIO_ACTIVE_LOW>; }; volume-down-button { label = "VOLUME-DOWN"; linux,code = ; gpios = <&gpio GPIOX_9 GPIO_ACTIVE_LOW>; }; dpad-up-button { label = "DPAD-UP"; linux,code = ; gpios = <&gpio GPIOX_0 GPIO_ACTIVE_LOW>; }; dpad-down-button { label = "DPAD-DOWN"; linux,code = ; gpios = <&gpio GPIOX_1 GPIO_ACTIVE_LOW>; }; dpad-left-button { label = "DPAD-LEFT"; linux,code = ; gpios = <&gpio GPIOX_2 GPIO_ACTIVE_LOW>; }; dpad-right-button { label = "DPAD-RIGHT"; linux,code = ; gpios = <&gpio GPIOX_3 GPIO_ACTIVE_LOW>; }; a-button { label = "A"; linux,code = ; gpios = <&gpio GPIOX_4 GPIO_ACTIVE_LOW>; }; b-button { label = "B"; linux,code = ; gpios = <&gpio GPIOX_5 GPIO_ACTIVE_LOW>; }; y-button { label = "Y"; linux,code = ; gpios = <&gpio GPIOX_6 GPIO_ACTIVE_LOW>; }; x-button { label = "X"; linux,code = ; gpios = <&gpio GPIOX_7 GPIO_ACTIVE_LOW>; }; f1-button { label = "F1"; linux,code = ; gpios = <&gpio GPIOX_17 GPIO_ACTIVE_LOW>; }; f2-button { label = "F2"; linux,code = ; gpios = <&gpio GPIOX_10 GPIO_ACTIVE_LOW>; }; f3-button { label = "F3"; linux,code = ; gpios = <&gpio GPIOX_11 GPIO_ACTIVE_LOW>; }; f4-button { label = "F4"; linux,code = ; gpios = <&gpio GPIOX_12 GPIO_ACTIVE_LOW>; }; f5-button { label = "F5"; linux,code = ; gpios = <&gpio GPIOX_13 GPIO_ACTIVE_LOW>; }; f6-button { label = "F6"; linux,code = ; gpios = <&gpio GPIOX_16 GPIO_ACTIVE_LOW>; }; top-left-button { label = "TOP Left"; linux,code = ; gpios = <&gpio GPIOX_14 GPIO_ACTIVE_LOW>; }; top-left2-button { label = "TOP Left 2"; linux,code = ; gpios = <&gpio GPIOX_19 GPIO_ACTIVE_LOW>; }; top-right-button { label = "TOP Right"; linux,code = ; gpios = <&gpio GPIOX_15 GPIO_ACTIVE_LOW>; }; top-right2-button { label = "TOP Right 2"; linux,code = ; gpios = <&gpio GPIOX_18 GPIO_ACTIVE_LOW>; }; }; memory@0 { device_type = "memory"; reg = <0x0 0x0 0x0 0x40000000>; }; emmc_pwrseq: emmc-pwrseq { compatible = "mmc-pwrseq-emmc"; reset-gpios = <&gpio BOOT_12 GPIO_ACTIVE_LOW>; }; leds { compatible = "gpio-leds"; led-blue { color = ; gpios = <&gpio_ao GPIOAO_11 GPIO_ACTIVE_HIGH>; linux,default-trigger = "heartbeat"; }; }; vdd_sys: regulator-vdd-sys { compatible = "regulator-fixed"; regulator-name = "VDD_SYS"; regulator-min-microvolt = <3800000>; regulator-max-microvolt = <3800000>; regulator-always-on; }; sound { compatible = "amlogic,axg-sound-card"; model = "Odroid GO Ultra"; audio-widgets = "Microphone", "Mic Jack", "Headphone", "Headphones", "Speaker", "Internal Speakers"; audio-aux-devs = <&tdmout_b>, <&tdmin_b>, <&speaker_amp>; audio-routing = "TDMOUT_B IN 0", "FRDDR_A OUT 1", "TDM_B Playback", "TDMOUT_B OUT", "TDMIN_B IN 1", "TDM_B Capture", "TDMIN_B IN 4", "TDM_B Loopback", "TODDR_A IN 1", "TDMIN_B OUT", "MICL", "Mic Jack", "Headphones", "HPOL", "Headphones", "HPOR", "Speaker Amplifier INL", "HPOL", "Speaker Amplifier INR", "HPOR", "Internal Speakers", "Speaker Amplifier OUTL", "Internal Speakers", "Speaker Amplifier OUTR"; assigned-clocks = <&clkc CLKID_MPLL2>, <&clkc CLKID_MPLL0>, <&clkc CLKID_MPLL1>; assigned-clock-parents = <0>, <0>, <0>; assigned-clock-rates = <294912000>, <270950400>, <393216000>; dai-link-0 { sound-dai = <&frddr_a>; }; dai-link-1 { sound-dai = <&toddr_a>; }; dai-link-2 { sound-dai = <&tdmif_b>; dai-format = "i2s"; dai-tdm-slot-tx-mask-0 = <1 1>; mclk-fs = <256>; codec-0 { sound-dai = <&rk817>; }; }; }; speaker_amp: speaker-amplifier { compatible = "simple-audio-amplifier"; sound-name-prefix = "Speaker Amplifier"; VCC-supply = <&hp_5v>; }; }; &arb { status = "okay"; }; &cpu0 { cpu-supply = <&vddcpu_b>; operating-points-v2 = <&cpu_opp_table_0>; clocks = <&clkc CLKID_CPU_CLK>; clock-latency = <50000>; }; &cpu1 { cpu-supply = <&vddcpu_b>; operating-points-v2 = <&cpu_opp_table_0>; clocks = <&clkc CLKID_CPU_CLK>; clock-latency = <50000>; }; &cpu100 { cpu-supply = <&vddcpu_a>; operating-points-v2 = <&cpub_opp_table_1>; clocks = <&clkc CLKID_CPUB_CLK>; clock-latency = <50000>; }; &cpu101 { cpu-supply = <&vddcpu_a>; operating-points-v2 = <&cpub_opp_table_1>; clocks = <&clkc CLKID_CPUB_CLK>; clock-latency = <50000>; }; &cpu102 { cpu-supply = <&vddcpu_a>; operating-points-v2 = <&cpub_opp_table_1>; clocks = <&clkc CLKID_CPUB_CLK>; clock-latency = <50000>; }; &cpu103 { cpu-supply = <&vddcpu_a>; operating-points-v2 = <&cpub_opp_table_1>; clocks = <&clkc CLKID_CPUB_CLK>; clock-latency = <50000>; }; /* RK817 only supports 12.5mV steps, round up the values */ &cpu_opp_table_0 { opp-1000000000 { opp-microvolt = <737500>; }; opp-1200000000 { opp-microvolt = <737500>; }; opp-1398000000 { opp-microvolt = <762500>; }; opp-1512000000 { opp-microvolt = <800000>; }; opp-1608000000 { opp-microvolt = <837500>; }; opp-1704000000 { opp-microvolt = <862500>; }; opp-1896000000 { opp-microvolt = <987500>; }; opp-1992000000 { opp-microvolt = <1012500>; }; }; /* RK818 only supports 12.5mV steps, round up the values */ &cpub_opp_table_1 { opp-1000000000 { opp-microvolt = <775000>; }; opp-1200000000 { opp-microvolt = <775000>; }; opp-1398000000 { opp-microvolt = <800000>; }; opp-1512000000 { opp-microvolt = <825000>; }; opp-1608000000 { opp-microvolt = <862500>; }; opp-1704000000 { opp-microvolt = <900000>; }; opp-1800000000 { opp-microvolt = <987500>; }; opp-1908000000 { opp-microvolt = <1025000>; }; }; &i2c_AO { status = "okay"; pinctrl-0 = <&i2c_ao_sck_pins>, <&i2c_ao_sda_pins>; pinctrl-names = "default"; rk818: pmic@1c { compatible = "rockchip,rk818"; reg = <0x1c>; interrupt-parent = <&gpio_intc>; interrupts = <7 IRQ_TYPE_LEVEL_LOW>; /* GPIOAO_7 */ #clock-cells = <1>; vcc1-supply = <&vdd_sys>; vcc2-supply = <&vdd_sys>; vcc3-supply = <&vdd_sys>; vcc4-supply = <&vdd_sys>; vcc6-supply = <&vdd_sys>; vcc7-supply = <&vcc_2v3>; vcc8-supply = <&vcc_2v3>; vcc9-supply = <&vddao_3v3>; boost-supply = <&vdd_sys>; regulators { vddcpu_a: DCDC_REG1 { regulator-name = "vddcpu_a"; regulator-always-on; regulator-boot-on; regulator-min-microvolt = <775000>; regulator-max-microvolt = <1025000>; regulator-ramp-delay = <6001>; regulator-state-mem { regulator-on-in-suspend; regulator-suspend-microvolt = <775000>; }; }; vdd_ee: DCDC_REG2 { regulator-name = "vdd_ee"; regulator-always-on; regulator-boot-on; regulator-min-microvolt = <875000>; regulator-max-microvolt = <1250000>; regulator-ramp-delay = <6001>; regulator-state-mem { regulator-on-in-suspend; regulator-suspend-microvolt = <875000>; }; }; vddq_1v1: DCDC_REG3 { regulator-name = "vddq_1v1"; regulator-always-on; regulator-boot-on; regulator-state-mem { regulator-on-in-suspend; }; }; vddao_3v3: DCDC_REG4 { regulator-always-on; regulator-boot-on; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-name = "vddao_3v3"; regulator-state-mem { regulator-on-in-suspend; regulator-suspend-microvolt = <3300000>; }; }; hp_5v: DCDC_BOOST { regulator-always-on; regulator-boot-on; regulator-name = "hp_5v"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; regulator-state-mem { regulator-off-in-suspend; }; }; vddio_ao1v8: LDO_REG5 { regulator-always-on; regulator-boot-on; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-name = "vddio_ao1v8"; regulator-state-mem { regulator-on-in-suspend; regulator-suspend-microvolt = <1800000>; }; }; vddq_1v8: LDO_REG7 { regulator-always-on; regulator-boot-on; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; regulator-name = "vddq_1v8"; regulator-state-mem { regulator-on-in-suspend; regulator-suspend-microvolt = <1800000>; }; }; vddio_c: LDO_REG9 { regulator-always-on; regulator-boot-on; regulator-min-microvolt = <1800000>; regulator-max-microvolt = <3300000>; regulator-name = "vddio_c"; regulator-state-mem { regulator-on-in-suspend; regulator-suspend-microvolt = <3300000>; }; }; vcc_sd: SWITCH_REG { regulator-name = "vcc_sd"; regulator-always-on; regulator-boot-on; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-state-mem { regulator-on-in-suspend; }; }; OTG_SWITCH { regulator-name = "otg_switch"; regulator-state-mem { regulator-off-in-suspend; }; }; }; }; }; &i2c3 { status = "okay"; pinctrl-0 = <&i2c3_sda_a_pins>, <&i2c3_sck_a_pins>; pinctrl-names = "default"; rk817: pmic@20 { compatible = "rockchip,rk817"; reg = <0x20>; interrupt-parent = <&gpio_intc>; interrupts = <5 IRQ_TYPE_LEVEL_LOW>; /* GPIOAO_5 */ vcc1-supply = <&vdd_sys>; vcc2-supply = <&vdd_sys>; vcc3-supply = <&vdd_sys>; vcc4-supply = <&vdd_sys>; vcc5-supply = <&vdd_sys>; vcc6-supply = <&vdd_sys>; vcc7-supply = <&vdd_sys>; vcc8-supply = <&vdd_sys>; vcc9-supply = <&rk817_boost>; #sound-dai-cells = <0>; clocks = <&codec_clk>; clock-names = "mclk"; #clock-cells = <1>; regulators { vddcpu_b: DCDC_REG2 { regulator-always-on; regulator-boot-on; regulator-min-microvolt = <737500>; regulator-max-microvolt = <1012500>; regulator-ramp-delay = <6001>; regulator-initial-mode = <0x2>; regulator-name = "vddcpu_b"; regulator-state-mem { regulator-on-in-suspend; regulator-suspend-microvolt = <1000000>; }; }; vcc_2v3: DCDC_REG3 { regulator-always-on; regulator-boot-on; regulator-min-microvolt = <2300000>; regulator-max-microvolt = <2400000>; regulator-initial-mode = <0x2>; regulator-name = "vcc_2v3"; regulator-state-mem { regulator-on-in-suspend; }; }; LDO_REG4 { regulator-always-on; regulator-boot-on; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-name = "vdd_codec"; regulator-state-mem { regulator-off-in-suspend; }; }; vcc_lcd: LDO_REG8 { regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-name = "vcc_lcd"; regulator-state-mem { regulator-off-in-suspend; }; }; rk817_boost: BOOST { regulator-always-on; regulator-boot-on; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5400000>; regulator-name = "rk817_boost"; regulator-state-mem { regulator-off-in-suspend; }; }; usb_host: OTG_SWITCH { regulator-name = "usb_host"; regulator-min-microvolt = <5000000>; regulator-max-microvolt = <5000000>; regulator-state-mem { regulator-off-in-suspend; }; }; }; }; }; &clkc_audio { status = "okay"; }; ð_phy { status = "disabled"; }; &frddr_a { status = "okay"; }; &periphs_pinctrl { keypad_gpio_pins: keypad-gpio { mux { groups = "GPIOX_0", "GPIOX_1", "GPIOX_2", "GPIOX_3", "GPIOX_4", "GPIOX_5", "GPIOX_6", "GPIOX_7", "GPIOX_8", "GPIOX_9", "GPIOX_10", "GPIOX_11", "GPIOX_12", "GPIOX_13", "GPIOX_14", "GPIOX_15", "GPIOX_16", "GPIOX_17", "GPIOX_18", "GPIOX_19"; function = "gpio_periphs"; bias-pull-up; output-disable; }; }; }; &saradc { status = "okay"; vref-supply = <&vddio_ao1v8>; }; /* SD card */ &sd_emmc_b { status = "okay"; pinctrl-0 = <&sdcard_c_pins>; pinctrl-1 = <&sdcard_clk_gate_c_pins>; pinctrl-names = "default", "clk-gate"; bus-width = <4>; cap-sd-highspeed; max-frequency = <50000000>; disable-wp; cd-gpios = <&gpio GPIOC_6 GPIO_ACTIVE_LOW>; vmmc-supply = <&vcc_sd>; vqmmc-supply = <&vddio_c>; }; /* eMMC */ &sd_emmc_c { status = "okay"; pinctrl-0 = <&emmc_ctrl_pins>, <&emmc_data_8b_pins>, <&emmc_ds_pins>; pinctrl-1 = <&emmc_clk_gate_pins>; pinctrl-names = "default", "clk-gate"; bus-width = <8>; cap-mmc-highspeed; mmc-ddr-1_8v; mmc-hs200-1_8v; max-frequency = <200000000>; disable-wp; mmc-pwrseq = <&emmc_pwrseq>; vmmc-supply = <&vcc_sd>; vqmmc-supply = <&vddio_ao1v8>; }; &tdmif_b { pinctrl-0 = <&tdm_b_dout0_pins>, <&tdm_b_fs_pins>, <&tdm_b_sclk_pins>, <&tdm_b_din1_pins>; pinctrl-names = "default"; status = "okay"; assigned-clocks = <&clkc_audio AUD_CLKID_TDM_SCLK_PAD1>, <&clkc_audio AUD_CLKID_TDM_LRCLK_PAD1>; assigned-clock-parents = <&clkc_audio AUD_CLKID_MST_B_SCLK>, <&clkc_audio AUD_CLKID_MST_B_LRCLK>; assigned-clock-rates = <0>, <0>; }; &tdmin_b { status = "okay"; }; &tdmout_b { status = "okay"; }; &toddr_a { status = "okay"; }; &uart_AO { status = "okay"; pinctrl-0 = <&uart_ao_a_pins>; pinctrl-names = "default"; }; &usb { status = "okay"; dr_mode = "peripheral"; }; &usb2_phy0 { status = "okay"; }; &usb2_phy1 { status = "okay"; phy-supply = <&usb_host>; };