diff --git a/config/boards/orangepi5-max.csc b/config/boards/orangepi5-max.csc index 8b0d8c0f147b..e1e81a6b7799 100644 --- a/config/boards/orangepi5-max.csc +++ b/config/boards/orangepi5-max.csc @@ -4,7 +4,7 @@ BOARDFAMILY="rockchip-rk3588" BOARD_MAINTAINER="" BOOTCONFIG="orangepi-5-max-rk3588_defconfig" # vendor name, not standard, see hook below, set BOOT_SOC below to compensate BOOT_SOC="rk3588" -KERNEL_TARGET="vendor" +KERNEL_TARGET="vendor,edge" KERNEL_TEST_TARGET="vendor" FULL_DESKTOP="yes" BOOT_LOGO="desktop" @@ -13,8 +13,9 @@ BOOT_SCENARIO="spl-blobs" BOOT_SUPPORT_SPI="yes" BOOT_SPI_RKSPI_LOADER="yes" IMAGE_PARTITION_TABLE="gpt" -enable_extension "bcmdhd" -BCMDHD_TYPE="sdio" +#enable_extension "bcmdhd" +#BCMDHD_TYPE="sdio" +SKIP_ARMBIAN_REPO="yes" function post_family_tweaks__orangepi5max_naming_audios() { display_alert "$BOARD" "Renaming orangepi5max audios" "info" @@ -27,22 +28,22 @@ function post_family_tweaks__orangepi5max_naming_audios() { return 0 } -function post_family_tweaks_bsp__orangepi5max_bluetooth() { - display_alert "$BOARD" "Installing ap6611s-bluetooth.service" "info" +#function post_family_tweaks_bsp__orangepi5max_bluetooth() { +# display_alert "$BOARD" "Installing ap6611s-bluetooth.service" "info" # Bluetooth on this board is handled by a Broadcom (AP6611S) chip and requires # a custom brcm_patchram_plus binary, plus a systemd service to run it at boot time - install -m 755 $SRC/packages/bsp/rk3399/brcm_patchram_plus_rk3399 $destination/usr/bin - cp $SRC/packages/bsp/rk3399/rk3399-bluetooth.service $destination/lib/systemd/system/ap6611s-bluetooth.service +# install -m 755 $SRC/packages/bsp/rk3399/brcm_patchram_plus_rk3399 $destination/usr/bin +# cp $SRC/packages/bsp/rk3399/rk3399-bluetooth.service $destination/lib/systemd/system/ap6611s-bluetooth.service # Reuse the service file, ttyS0 -> ttyS7; BCM4345C5.hcd -> SYN43711A0.hcd - sed -i 's/ttyS0/ttyS7/g' $destination/lib/systemd/system/ap6611s-bluetooth.service - sed -i 's/BCM4345C5.hcd/SYN43711A0.hcd/g' $destination/lib/systemd/system/ap6611s-bluetooth.service - return 0 -} +# sed -i 's/ttyS0/ttyS7/g' $destination/lib/systemd/system/ap6611s-bluetooth.service +# sed -i 's/BCM4345C5.hcd/SYN43711A0.hcd/g' $destination/lib/systemd/system/ap6611s-bluetooth.service +# return 0 +#} -function post_family_tweaks__orangepi5max_enable_bluetooth_service() { - display_alert "$BOARD" "Enabling ap6611s-bluetooth.service" "info" - chroot_sdcard systemctl enable ap6611s-bluetooth.service - return 0 -} +#function post_family_tweaks__orangepi5max_enable_bluetooth_service() { +# display_alert "$BOARD" "Enabling ap6611s-bluetooth.service" "info" +# chroot_sdcard systemctl enable ap6611s-bluetooth.service +# return 0 +#} diff --git a/config/sources/families/rockchip-rk3588.conf b/config/sources/families/rockchip-rk3588.conf index 2b589ab0c718..6888e7630965 100644 --- a/config/sources/families/rockchip-rk3588.conf +++ b/config/sources/families/rockchip-rk3588.conf @@ -50,7 +50,7 @@ case $BRANCH in edge) # Branch based on the latest kernel release including RC releases, to benefit from the latest RK3588 mainline advancements. Might be unstable! LINUXFAMILY=rockchip-rk3588 - KERNEL_MAJOR_MINOR="6.12" # Major and minor versions of this kernel. + KERNEL_MAJOR_MINOR="6.13" # Major and minor versions of this kernel. LINUXCONFIG="linux-rockchip-rk3588-${BRANCH}" # No need to set KERNELPATCHDIR, since default is: KERNELPATCHDIR='archive/rockchip-rk3588-${KERNEL_MAJOR_MINOR}' ;; diff --git a/patch/kernel/archive/rockchip-rk3588-6.13/0000.patching_config.yaml b/patch/kernel/archive/rockchip-rk3588-6.13/0000.patching_config.yaml new file mode 100644 index 000000000000..96961a726f83 --- /dev/null +++ b/patch/kernel/archive/rockchip-rk3588-6.13/0000.patching_config.yaml @@ -0,0 +1,47 @@ +config: # This is file 'patch/kernel/rockchip-rk3588-edge/0000.patching_config.yaml' + + # PATCH NUMBERING INFO + # + # Patches should be ordered in such a way that general kernel patches are applied first, then SoC-related patches and at last board-specific patches + # + # Patch numbers in this folder are sorted by category: + # + # 000* for general patches + # 01** for GPU/HDMI related patches + # 08** for wireless patches + # 1*** for board specific patches: + # 101* for Rock-5B, 102* for Rock-5A and so on + + # Just some info stuff; not used by the patching scripts + name: rockchip-rk3588-edge + kind: kernel + type: mainline # or: vendor + branch: linux-6.13.y + last-known-good-tag: v6.13-rc1 + maintainers: + - { github: rpardini, name: Ricardo Pardini, email: ricardo@pardini.net, armbian-forum: rpardini } + + # .dts files in these directories will be copied as-is to the build tree; later ones overwrite earlier ones. + # This is meant to provide a way to "add a board DTS" without having to null-patch them in. + dts-directories: + - { source: "dt", target: "arch/arm64/boot/dts/rockchip" } + + # every file in these directories will be copied as-is to the build tree; later ones overwrite earlier ones + # This is meant as a way to have overlays, bare, in a directory, without having to null-patch them in. + # @TODO need a solution to auto-Makefile the overlays as well + overlay-directories: + - { source: "overlay", target: "arch/arm64/boot/dts/rockchip/overlay" } + + # the Makefile in each of these directories will be magically patched to include the dts files copied + # or patched-in; overlay subdir will be included "-y" if it exists. + # No more Makefile patching needed, yay! + auto-patch-dt-makefile: + - { directory: "arch/arm64/boot/dts/rockchip", config-var: "CONFIG_ARCH_ROCKCHIP" } + + # configuration for when applying patches to git / auto-rewriting patches (development cycle helpers) + patches-to-git: + do-not-commit-files: + - "MAINTAINERS" # constant churn, drop them. sorry. + - "Documentation/devicetree/bindings/arm/rockchip.yaml" # constant churn, conflicts on every bump, drop it. sorry. + do-not-commit-regexes: # Python-style regexes + - "^arch/([a-zA-Z0-9]+)/boot/dts/([a-zA-Z0-9]+)/Makefile$" # ignore DT Makefile patches, we've an auto-patcher now diff --git a/patch/kernel/archive/rockchip-rk3588-6.13/0001-arm64-dts-Add-dts-to-Orange-Pi-5-Max.patch b/patch/kernel/archive/rockchip-rk3588-6.13/0001-arm64-dts-Add-dts-to-Orange-Pi-5-Max.patch new file mode 100644 index 000000000000..0a1d89013323 --- /dev/null +++ b/patch/kernel/archive/rockchip-rk3588-6.13/0001-arm64-dts-Add-dts-to-Orange-Pi-5-Max.patch @@ -0,0 +1,2011 @@ +From b37359e8465822a72d6295a4f66eb4feb011cac6 Mon Sep 17 00:00:00 2001 +From: Jimmy Hon +Date: Sun, 10 Nov 2024 22:53:23 -0600 +Subject: [PATCH 1/3] arm64: dts: rockchip: refactor common + rk3588-orangepi-5.dtsi + +for Orange Pi 5 Plus/Max/Ultra and AI Max +--- + .../dts/rockchip/rk3588-orangepi-5-plus.dts | 858 ++---------------- + .../boot/dts/rockchip/rk3588-orangepi-5.dtsi | 804 ++++++++++++++++ + 2 files changed, 862 insertions(+), 800 deletions(-) + create mode 100644 arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi + +diff --git a/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-plus.dts b/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-plus.dts +index 9f5a38b290bf..4aff61e83a5f 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-plus.dts ++++ b/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-plus.dts +@@ -6,66 +6,14 @@ + /dts-v1/; + + #include +-#include +-#include + #include +-#include + #include +-#include "rk3588.dtsi" ++#include "rk3588-orangepi-5.dtsi" + + / { + model = "Xunlong Orange Pi 5 Plus"; + compatible = "xunlong,orangepi-5-plus", "rockchip,rk3588"; + +- aliases { +- mmc0 = &sdhci; +- mmc1 = &sdmmc; +- }; +- +- chosen { +- stdout-path = "serial2:1500000n8"; +- }; +- +- adc-keys-0 { +- compatible = "adc-keys"; +- io-channels = <&saradc 0>; +- io-channel-names = "buttons"; +- keyup-threshold-microvolt = <1800000>; +- poll-interval = <100>; +- +- button-maskrom { +- label = "Mask Rom"; +- linux,code = ; +- press-threshold-microvolt = <2000>; +- }; +- }; +- +- adc-keys-1 { +- compatible = "adc-keys"; +- io-channels = <&saradc 1>; +- io-channel-names = "buttons"; +- keyup-threshold-microvolt = <1800000>; +- poll-interval = <100>; +- +- button-recovery { +- label = "Recovery"; +- linux,code = ; +- press-threshold-microvolt = <2000>; +- }; +- }; +- +- speaker_amp: speaker-audio-amplifier { +- compatible = "simple-audio-amplifier"; +- enable-gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_HIGH>; +- sound-name-prefix = "Speaker Amp"; +- }; +- +- headphone_amp: headphones-audio-amplifier { +- compatible = "simple-audio-amplifier"; +- enable-gpios = <&gpio3 RK_PA7 GPIO_ACTIVE_HIGH>; +- sound-name-prefix = "Headphones Amp"; +- }; +- + ir-receiver { + compatible = "gpio-ir-receiver"; + gpios = <&gpio4 RK_PB3 GPIO_ACTIVE_LOW>; +@@ -73,355 +21,84 @@ ir-receiver { + pinctrl-0 = <&ir_receiver_pin>; + }; + +- gpio-leds { +- compatible = "gpio-leds"; +- pinctrl-names = "default"; +- pinctrl-0 = <&blue_led_pin>; +- +- led { +- color = ; +- function = LED_FUNCTION_INDICATOR; +- function-enumerator = <1>; +- gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_HIGH>; +- }; +- }; +- +- hdmi0-con { +- compatible = "hdmi-connector"; +- type = "a"; +- +- port { +- hdmi0_con_in: endpoint { +- remote-endpoint = <&hdmi0_out_con>; +- }; +- }; +- }; +- +- fan: pwm-fan { +- compatible = "pwm-fan"; +- cooling-levels = <0 70 75 80 100>; +- fan-supply = <&vcc5v0_sys>; +- pwms = <&pwm3 0 50000 0>; +- #cooling-cells = <2>; +- }; +- +- pwm-leds { +- compatible = "pwm-leds"; +- +- led { +- color = ; +- function = LED_FUNCTION_INDICATOR; +- function-enumerator = <2>; +- max-brightness = <255>; +- pwms = <&pwm2 0 25000 0>; +- }; +- }; +- + rfkill { + compatible = "rfkill-gpio"; + label = "rfkill-pcie-wlan"; + radio-type = "wlan"; + shutdown-gpios = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>; + }; +- +- sound { +- compatible = "simple-audio-card"; +- pinctrl-names = "default"; +- pinctrl-0 = <&hp_detect>; +- simple-audio-card,name = "Analog"; +- simple-audio-card,aux-devs = <&speaker_amp>, <&headphone_amp>; +- simple-audio-card,format = "i2s"; +- simple-audio-card,mclk-fs = <256>; +- simple-audio-card,hp-det-gpios = <&gpio1 RK_PD3 GPIO_ACTIVE_LOW>; +- simple-audio-card,bitclock-master = <&daicpu>; +- simple-audio-card,frame-master = <&daicpu>; +- /*TODO: SARADC_IN3 is used as MIC detection / key input */ +- +- simple-audio-card,widgets = +- "Microphone", "Onboard Microphone", +- "Microphone", "Microphone Jack", +- "Speaker", "Speaker", +- "Headphone", "Headphones"; +- +- simple-audio-card,routing = +- "Headphones", "LOUT1", +- "Headphones", "ROUT1", +- "Speaker", "LOUT2", +- "Speaker", "ROUT2", +- +- "Headphones", "Headphones Amp OUTL", +- "Headphones", "Headphones Amp OUTR", +- "Headphones Amp INL", "LOUT1", +- "Headphones Amp INR", "ROUT1", +- +- "Speaker", "Speaker Amp OUTL", +- "Speaker", "Speaker Amp OUTR", +- "Speaker Amp INL", "LOUT2", +- "Speaker Amp INR", "ROUT2", +- +- /* single ended signal to LINPUT1 */ +- "LINPUT1", "Microphone Jack", +- "RINPUT1", "Microphone Jack", +- /* differential signal */ +- "LINPUT2", "Onboard Microphone", +- "RINPUT2", "Onboard Microphone"; +- +- daicpu: simple-audio-card,cpu { +- sound-dai = <&i2s0_8ch>; +- system-clock-frequency = <12288000>; +- }; +- +- daicodec: simple-audio-card,codec { +- sound-dai = <&es8388>; +- system-clock-frequency = <12288000>; +- }; +- }; +- +- vcc3v3_pcie30: regulator-vcc3v3-pcie30 { +- compatible = "regulator-fixed"; +- enable-active-high; +- gpios = <&gpio2 RK_PB6 GPIO_ACTIVE_HIGH>; +- regulator-name = "vcc3v3_pcie30"; +- regulator-min-microvolt = <3300000>; +- regulator-max-microvolt = <3300000>; +- startup-delay-us = <5000>; +- vin-supply = <&vcc5v0_sys>; +- }; +- +- vcc3v3_pcie_eth: regulator-vcc3v3-pcie-eth { +- compatible = "regulator-fixed"; +- gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; +- regulator-name = "vcc3v3_pcie_eth"; +- regulator-min-microvolt = <3300000>; +- regulator-max-microvolt = <3300000>; +- startup-delay-us = <50000>; +- vin-supply = <&vcc5v0_sys>; +- }; +- +- vcc3v3_wf: regulator-vcc3v3-wf { +- compatible = "regulator-fixed"; +- enable-active-high; +- gpios = <&gpio2 RK_PC5 GPIO_ACTIVE_HIGH>; +- regulator-name = "vcc3v3_wf"; +- regulator-min-microvolt = <3300000>; +- regulator-max-microvolt = <3300000>; +- startup-delay-us = <50000>; +- vin-supply = <&vcc5v0_sys>; +- }; +- +- vcc5v0_sys: regulator-vcc5v0-sys { +- compatible = "regulator-fixed"; +- regulator-name = "vcc5v0_sys"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <5000000>; +- regulator-max-microvolt = <5000000>; +- }; +- +- vcc5v0_usb20: regulator-vcc5v0-usb20 { +- compatible = "regulator-fixed"; +- enable-active-high; +- gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_HIGH>; +- pinctrl-names = "default"; +- pinctrl-0 = <&vcc5v0_usb20_en>; +- regulator-name = "vcc5v0_usb20"; +- regulator-min-microvolt = <5000000>; +- regulator-max-microvolt = <5000000>; +- vin-supply = <&vcc5v0_sys>; +- }; +-}; +- +-&combphy0_ps { +- status = "okay"; +-}; +- +-&combphy1_ps { +- status = "okay"; + }; + +-&combphy2_psu { ++&speaker_amp { ++ enable-gpios = <&gpio3 RK_PC0 GPIO_ACTIVE_HIGH>; + status = "okay"; + }; + +-&cpu_b0 { +- cpu-supply = <&vdd_cpu_big0_s0>; +-}; +- +-&cpu_b1 { +- cpu-supply = <&vdd_cpu_big0_s0>; +-}; +- +-&cpu_b2 { +- cpu-supply = <&vdd_cpu_big1_s0>; +-}; +- +-&cpu_b3 { +- cpu-supply = <&vdd_cpu_big1_s0>; +-}; +- +-&cpu_l0 { +- cpu-supply = <&vdd_cpu_lit_s0>; +-}; +- +-&cpu_l1 { +- cpu-supply = <&vdd_cpu_lit_s0>; ++&headphone_amp { ++ enable-gpios = <&gpio3 RK_PA7 GPIO_ACTIVE_HIGH>; + }; + +-&cpu_l2 { +- cpu-supply = <&vdd_cpu_lit_s0>; +-}; +- +-&cpu_l3 { +- cpu-supply = <&vdd_cpu_lit_s0>; +-}; +- +-&gpu { +- mali-supply = <&vdd_gpu_s0>; +- status = "okay"; +-}; +- +-&hdmi0 { +- status = "okay"; +-}; +- +-&hdmi0_in { +- hdmi0_in_vp0: endpoint { +- remote-endpoint = <&vp0_out_hdmi0>; +- }; +-}; +- +-&hdmi0_out { +- hdmi0_out_con: endpoint { +- remote-endpoint = <&hdmi0_con_in>; +- }; +-}; +- +-&hdptxphy_hdmi0 { +- status = "okay"; +-}; +- +-&i2c0 { ++&analog_sound { + pinctrl-names = "default"; +- pinctrl-0 = <&i2c0m2_xfer>; +- status = "okay"; +- +- vdd_cpu_big0_s0: regulator@42 { +- compatible = "rockchip,rk8602"; +- reg = <0x42>; +- fcs,suspend-voltage-selector = <1>; +- regulator-name = "vdd_cpu_big0_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <550000>; +- regulator-max-microvolt = <1050000>; +- regulator-ramp-delay = <2300>; +- vin-supply = <&vcc5v0_sys>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- }; +- }; +- +- vdd_cpu_big1_s0: regulator@43 { +- compatible = "rockchip,rk8603", "rockchip,rk8602"; +- reg = <0x43>; +- fcs,suspend-voltage-selector = <1>; +- regulator-name = "vdd_cpu_big1_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <550000>; +- regulator-max-microvolt = <1050000>; +- regulator-ramp-delay = <2300>; +- vin-supply = <&vcc5v0_sys>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- }; +- }; ++ pinctrl-0 = <&hp_detect>; ++ simple-audio-card,aux-devs = <&speaker_amp>, <&headphone_amp>; ++ simple-audio-card,hp-det-gpios = <&gpio1 RK_PD3 GPIO_ACTIVE_LOW>; ++ simple-audio-card,widgets = ++ "Microphone", "Onboard Microphone", ++ "Microphone", "Microphone Jack", ++ "Speaker", "Speaker", ++ "Headphone", "Headphones"; ++ ++ simple-audio-card,routing = ++ "Headphones", "LOUT1", ++ "Headphones", "ROUT1", ++ "Speaker", "LOUT2", ++ "Speaker", "ROUT2", ++ ++ "Headphones", "Headphones Amp OUTL", ++ "Headphones", "Headphones Amp OUTR", ++ "Headphones Amp INL", "LOUT1", ++ "Headphones Amp INR", "ROUT1", ++ ++ "Speaker", "Speaker Amp OUTL", ++ "Speaker", "Speaker Amp OUTR", ++ "Speaker Amp INL", "LOUT2", ++ "Speaker Amp INR", "ROUT2", ++ ++ /* single ended signal to LINPUT1 */ ++ "LINPUT1", "Microphone Jack", ++ "RINPUT1", "Microphone Jack", ++ /* differential signal */ ++ "LINPUT2", "Onboard Microphone", ++ "RINPUT2", "Onboard Microphone"; + }; + +-&i2c6 { +- clock-frequency = <400000>; ++&combphy0_ps { + status = "okay"; +- +- hym8563: rtc@51 { +- compatible = "haoyu,hym8563"; +- reg = <0x51>; +- interrupt-parent = <&gpio0>; +- interrupts = ; +- #clock-cells = <0>; +- clock-output-names = "hym8563"; +- pinctrl-names = "default"; +- pinctrl-0 = <&hym8563_int>; +- wakeup-source; +- }; + }; + +-&i2c7 { ++&combphy1_ps { + status = "okay"; ++}; + +- /* PLDO2 vcca 1.8V, BUCK8 gated by PLDO2 being enabled */ +- es8388: audio-codec@11 { +- compatible = "everest,es8388"; +- reg = <0x11>; +- clocks = <&cru I2S0_8CH_MCLKOUT>; +- AVDD-supply = <&vcc_1v8_s0>; +- DVDD-supply = <&vcc_1v8_s0>; +- HPVDD-supply = <&vcc_3v3_s0>; +- PVDD-supply = <&vcc_3v3_s0>; +- assigned-clocks = <&cru I2S0_8CH_MCLKOUT>; +- assigned-clock-rates = <12288000>; +- #sound-dai-cells = <0>; +- }; ++&fan { ++ pwms = <&pwm3 0 50000 0>; + }; + +-&i2s0_8ch { ++&hym8563 { ++ interrupt-parent = <&gpio0>; ++ interrupts = ; + pinctrl-names = "default"; +- pinctrl-0 = <&i2s0_lrck +- &i2s0_mclk +- &i2s0_sclk +- &i2s0_sdi0 +- &i2s0_sdo0>; +- status = "okay"; ++ pinctrl-0 = <&hym8563_int>; + }; + +-&i2s2_2ch { +- pinctrl-names = "default"; +- pinctrl-0 = <&i2s2m0_lrck +- &i2s2m0_sclk +- &i2s2m0_sdi +- &i2s2m0_sdo>; ++&led_blue_gpio { ++ gpios = <&gpio3 RK_PA6 GPIO_ACTIVE_HIGH>; + status = "okay"; + }; + +-&package_thermal { +- polling-delay = <1000>; +- +- cooling-maps { +- map0 { +- trip = <&package_fan0>; +- cooling-device = <&fan THERMAL_NO_LIMIT 1>; +- }; +- +- map1 { +- trip = <&package_fan1>; +- cooling-device = <&fan 2 THERMAL_NO_LIMIT>; +- }; +- }; +- +- trips { +- package_fan0: package-fan0 { +- temperature = <55000>; +- hysteresis = <2000>; +- type = "active"; +- }; +- +- package_fan1: package-fan1 { +- temperature = <65000>; +- hysteresis = <2000>; +- type = "active"; +- }; +- }; ++&led_green_pwm { ++ pwms = <&pwm2 0 25000 0>; + }; + + /* phy1 - M.KEY socket */ +@@ -445,16 +122,6 @@ &pcie2x1l2 { + status = "okay"; + }; + +-&pcie30phy { +- status = "okay"; +-}; +- +-&pcie3x4 { +- reset-gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>; +- vpcie3v3-supply = <&vcc3v3_pcie30>; +- status = "okay"; +-}; +- + &pinctrl { + hym8563 { + hym8563_int: hym8563-int { +@@ -498,405 +165,13 @@ &pwm3 { + status = "okay"; + }; + +-&saradc { +- vref-supply = <&vcc_1v8_s0>; +- status = "okay"; +-}; +- +-&sdhci { +- bus-width = <8>; +- no-sdio; +- no-sd; +- non-removable; +- max-frequency = <200000000>; +- mmc-hs400-1_8v; +- mmc-hs400-enhanced-strobe; +- status = "okay"; +-}; +- +-&sdmmc { +- bus-width = <4>; +- cap-sd-highspeed; +- cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>; +- disable-wp; +- max-frequency = <150000000>; +- no-sdio; +- no-mmc; +- sd-uhs-sdr104; +- vmmc-supply = <&vcc_3v3_s3>; +- vqmmc-supply = <&vccio_sd_s0>; ++&recovery_button { + status = "okay"; + }; + + &sfc { + pinctrl-names = "default"; + pinctrl-0 = <&fspim1_pins>; +- status = "okay"; +- +- spi_flash: flash@0 { +- compatible = "jedec,spi-nor"; +- reg = <0x0>; +- spi-max-frequency = <100000000>; +- spi-rx-bus-width = <4>; +- spi-tx-bus-width = <1>; +- }; +-}; +- +-&spi2 { +- assigned-clocks = <&cru CLK_SPI2>; +- assigned-clock-rates = <200000000>; +- num-cs = <1>; +- pinctrl-names = "default"; +- pinctrl-0 = <&spi2m2_cs0 &spi2m2_pins>; +- status = "okay"; +- +- pmic@0 { +- compatible = "rockchip,rk806"; +- reg = <0x0>; +- interrupt-parent = <&gpio0>; +- interrupts = <7 IRQ_TYPE_LEVEL_LOW>; +- pinctrl-names = "default"; +- pinctrl-0 = <&pmic_pins>, <&rk806_dvs1_null>, +- <&rk806_dvs2_null>, <&rk806_dvs3_null>; +- spi-max-frequency = <1000000>; +- system-power-controller; +- +- vcc1-supply = <&vcc5v0_sys>; +- vcc2-supply = <&vcc5v0_sys>; +- vcc3-supply = <&vcc5v0_sys>; +- vcc4-supply = <&vcc5v0_sys>; +- vcc5-supply = <&vcc5v0_sys>; +- vcc6-supply = <&vcc5v0_sys>; +- vcc7-supply = <&vcc5v0_sys>; +- vcc8-supply = <&vcc5v0_sys>; +- vcc9-supply = <&vcc5v0_sys>; +- vcc10-supply = <&vcc5v0_sys>; +- vcc11-supply = <&vcc_2v0_pldo_s3>; +- vcc12-supply = <&vcc5v0_sys>; +- vcc13-supply = <&vdd2_ddr_s3>; +- vcc14-supply = <&vdd2_ddr_s3>; +- vcca-supply = <&vcc5v0_sys>; +- +- gpio-controller; +- #gpio-cells = <2>; +- +- rk806_dvs1_null: dvs1-null-pins { +- pins = "gpio_pwrctrl1"; +- function = "pin_fun0"; +- }; +- +- rk806_dvs2_null: dvs2-null-pins { +- pins = "gpio_pwrctrl2"; +- function = "pin_fun0"; +- }; +- +- rk806_dvs3_null: dvs3-null-pins { +- pins = "gpio_pwrctrl3"; +- function = "pin_fun0"; +- }; +- +- regulators { +- vdd_gpu_s0: dcdc-reg1 { +- regulator-name = "vdd_gpu_s0"; +- regulator-boot-on; +- regulator-enable-ramp-delay = <400>; +- regulator-min-microvolt = <550000>; +- regulator-max-microvolt = <950000>; +- regulator-ramp-delay = <12500>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- }; +- }; +- +- vdd_cpu_lit_s0: dcdc-reg2 { +- regulator-name = "vdd_cpu_lit_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <550000>; +- regulator-max-microvolt = <950000>; +- regulator-ramp-delay = <12500>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- }; +- }; +- +- vdd_log_s0: dcdc-reg3 { +- regulator-name = "vdd_log_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <675000>; +- regulator-max-microvolt = <825000>; +- regulator-ramp-delay = <12500>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- regulator-suspend-microvolt = <750000>; +- }; +- }; +- +- vdd_vdenc_s0: dcdc-reg4 { +- regulator-name = "vdd_vdenc_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <550000>; +- regulator-max-microvolt = <825000>; +- regulator-ramp-delay = <12500>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- }; +- }; +- +- vdd_ddr_s0: dcdc-reg5 { +- regulator-name = "vdd_ddr_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <675000>; +- regulator-max-microvolt = <900000>; +- regulator-ramp-delay = <12500>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- regulator-suspend-microvolt = <850000>; +- }; +- }; +- +- vdd2_ddr_s3: dcdc-reg6 { +- regulator-name = "vdd2_ddr_s3"; +- regulator-always-on; +- regulator-boot-on; +- +- regulator-state-mem { +- regulator-on-in-suspend; +- }; +- }; +- +- vcc_2v0_pldo_s3: dcdc-reg7 { +- regulator-name = "vdd_2v0_pldo_s3"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <2000000>; +- regulator-max-microvolt = <2000000>; +- regulator-ramp-delay = <12500>; +- +- regulator-state-mem { +- regulator-on-in-suspend; +- regulator-suspend-microvolt = <2000000>; +- }; +- }; +- +- vcc_3v3_s3: dcdc-reg8 { +- regulator-name = "vcc_3v3_s3"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <3300000>; +- regulator-max-microvolt = <3300000>; +- +- regulator-state-mem { +- regulator-on-in-suspend; +- regulator-suspend-microvolt = <3300000>; +- }; +- }; +- +- vddq_ddr_s0: dcdc-reg9 { +- regulator-name = "vddq_ddr_s0"; +- regulator-always-on; +- regulator-boot-on; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- }; +- }; +- +- vcc_1v8_s3: dcdc-reg10 { +- regulator-name = "vcc_1v8_s3"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <1800000>; +- regulator-max-microvolt = <1800000>; +- +- regulator-state-mem { +- regulator-on-in-suspend; +- regulator-suspend-microvolt = <1800000>; +- }; +- }; +- +- avcc_1v8_s0: pldo-reg1 { +- regulator-name = "avcc_1v8_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <1800000>; +- regulator-max-microvolt = <1800000>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- regulator-suspend-microvolt = <1800000>; +- }; +- }; +- +- /* shorted to avcc_1v8_s0 on the board */ +- vcc_1v8_s0: pldo-reg2 { +- regulator-name = "vcc_1v8_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <1800000>; +- regulator-max-microvolt = <1800000>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- regulator-suspend-microvolt = <1800000>; +- }; +- }; +- +- avdd_1v2_s0: pldo-reg3 { +- regulator-name = "avdd_1v2_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <1200000>; +- regulator-max-microvolt = <1200000>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- }; +- }; +- +- vcc_3v3_s0: pldo-reg4 { +- regulator-name = "vcc_3v3_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <3300000>; +- regulator-max-microvolt = <3300000>; +- regulator-ramp-delay = <12500>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- }; +- }; +- +- vccio_sd_s0: pldo-reg5 { +- regulator-name = "vccio_sd_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <1800000>; +- regulator-max-microvolt = <3300000>; +- regulator-ramp-delay = <12500>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- }; +- }; +- +- pldo6_s3: pldo-reg6 { +- regulator-name = "pldo6_s3"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <1800000>; +- regulator-max-microvolt = <1800000>; +- +- regulator-state-mem { +- regulator-on-in-suspend; +- regulator-suspend-microvolt = <1800000>; +- }; +- }; +- +- vdd_0v75_s3: nldo-reg1 { +- regulator-name = "vdd_0v75_s3"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <750000>; +- regulator-max-microvolt = <750000>; +- +- regulator-state-mem { +- regulator-on-in-suspend; +- regulator-suspend-microvolt = <750000>; +- }; +- }; +- +- vdd_ddr_pll_s0: nldo-reg2 { +- regulator-name = "vdd_ddr_pll_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <850000>; +- regulator-max-microvolt = <850000>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- regulator-suspend-microvolt = <850000>; +- }; +- }; +- +- avdd_0v75_s0: nldo-reg3 { +- regulator-name = "avdd_0v75_s0"; +- regulator-always-on; +- regulator-boot-on; +- /* +- * The schematic mentions that actual setting +- * should be 0.8375V. RK3588 datasheet specifies +- * maximum as 0.825V. So we set datasheet max +- * here. +- */ +- regulator-min-microvolt = <825000>; +- regulator-max-microvolt = <825000>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- }; +- }; +- +- vdd_0v85_s0: nldo-reg4 { +- regulator-name = "vdd_0v85_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <850000>; +- regulator-max-microvolt = <850000>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- }; +- }; +- +- vdd_0v75_s0: nldo-reg5 { +- regulator-name = "vdd_0v75_s0"; +- regulator-always-on; +- regulator-boot-on; +- regulator-min-microvolt = <750000>; +- regulator-max-microvolt = <750000>; +- +- regulator-state-mem { +- regulator-off-in-suspend; +- }; +- }; +- }; +- }; +-}; +- +-&tsadc { +- status = "okay"; +-}; +- +-&u2phy2 { +- status = "okay"; +-}; +- +-&u2phy3 { +- status = "okay"; +-}; +- +-&u2phy2_host { +- phy-supply = <&vcc5v0_usb20>; +- status = "okay"; +-}; +- +-&u2phy3_host { +- phy-supply = <&vcc5v0_usb20>; +- status = "okay"; +-}; +- +-&uart2 { +- pinctrl-0 = <&uart2m0_xfer>; +- status = "okay"; + }; + + &uart9 { +@@ -904,33 +179,16 @@ &uart9 { + status = "okay"; + }; + +-&usb_host0_ehci { +- status = "okay"; ++&vcc3v3_pcie_eth { ++ gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_LOW>; + }; + +-&usb_host0_ohci { ++&vcc3v3_wf { + status = "okay"; + }; + +-&usb_host1_ehci { +- status = "okay"; +-}; +- +-&usb_host1_ohci { +- status = "okay"; +-}; +- +-&vop_mmu { +- status = "okay"; +-}; +- +-&vop { +- status = "okay"; +-}; +- +-&vp0 { +- vp0_out_hdmi0: endpoint@ROCKCHIP_VOP2_EP_HDMI0 { +- reg = ; +- remote-endpoint = <&hdmi0_in_vp0>; +- }; ++&vcc5v0_usb20 { ++ gpio = <&gpio3 RK_PB7 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&vcc5v0_usb20_en>; + }; +diff --git a/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi +new file mode 100644 +index 000000000000..3c6e1321f13f +--- /dev/null ++++ b/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi +@@ -0,0 +1,804 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2023 Ondřej Jirman ++ */ ++ ++/dts-v1/; ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include "rk3588.dtsi" ++ ++/ { ++ aliases { ++ mmc0 = &sdhci; ++ mmc1 = &sdmmc; ++ }; ++ ++ chosen { ++ stdout-path = "serial2:1500000n8"; ++ }; ++ ++ adc-keys-0 { ++ compatible = "adc-keys"; ++ io-channels = <&saradc 0>; ++ io-channel-names = "buttons"; ++ keyup-threshold-microvolt = <1800000>; ++ poll-interval = <100>; ++ ++ button-maskrom { ++ label = "Mask Rom"; ++ linux,code = ; ++ press-threshold-microvolt = <2000>; ++ }; ++ }; ++ ++ recovery_button: adc-keys-1 { ++ compatible = "adc-keys"; ++ io-channels = <&saradc 1>; ++ io-channel-names = "buttons"; ++ keyup-threshold-microvolt = <1800000>; ++ poll-interval = <100>; ++ status = "disabled"; ++ ++ button-recovery { ++ label = "Recovery"; ++ linux,code = ; ++ press-threshold-microvolt = <2000>; ++ }; ++ }; ++ ++ speaker_amp: speaker-audio-amplifier { ++ compatible = "simple-audio-amplifier"; ++ sound-name-prefix = "Speaker Amp"; ++ status = "disabled"; ++ }; ++ ++ headphone_amp: headphones-audio-amplifier { ++ compatible = "simple-audio-amplifier"; ++ sound-name-prefix = "Headphones Amp"; ++ }; ++ ++ gpio-leds { ++ compatible = "gpio-leds"; ++ ++ led_blue_gpio: led { ++ color = ; ++ function = LED_FUNCTION_INDICATOR; ++ function-enumerator = <1>; ++ status = "disabled"; ++ }; ++ }; ++ ++ hdmi0-con { ++ compatible = "hdmi-connector"; ++ type = "a"; ++ ++ port { ++ hdmi0_con_in: endpoint { ++ remote-endpoint = <&hdmi0_out_con>; ++ }; ++ }; ++ }; ++ ++ fan: pwm-fan { ++ compatible = "pwm-fan"; ++ cooling-levels = <0 70 75 80 100>; ++ fan-supply = <&vcc5v0_sys>; ++ #cooling-cells = <2>; ++ }; ++ ++ pwm-leds { ++ compatible = "pwm-leds"; ++ ++ led_green_pwm: led-2 { ++ color = ; ++ function = LED_FUNCTION_INDICATOR; ++ function-enumerator = <2>; ++ max-brightness = <255>; ++ }; ++ }; ++ ++ rfkill { ++ compatible = "rfkill-gpio"; ++ label = "rfkill-pcie-wlan"; ++ radio-type = "wlan"; ++ shutdown-gpios = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>; ++ }; ++ ++ analog_sound: sound { ++ compatible = "simple-audio-card"; ++ simple-audio-card,name = "Analog"; ++ simple-audio-card,format = "i2s"; ++ simple-audio-card,mclk-fs = <256>; ++ simple-audio-card,bitclock-master = <&daicpu>; ++ simple-audio-card,frame-master = <&daicpu>; ++ /*TODO: SARADC_IN3 is used as MIC detection / key input */ ++ ++ daicpu: simple-audio-card,cpu { ++ sound-dai = <&i2s0_8ch>; ++ system-clock-frequency = <12288000>; ++ }; ++ ++ daicodec: simple-audio-card,codec { ++ sound-dai = <&es8388>; ++ system-clock-frequency = <12288000>; ++ }; ++ }; ++ ++ vcc3v3_pcie30: regulator-vcc3v3-pcie30 { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpios = <&gpio2 RK_PB6 GPIO_ACTIVE_HIGH>; ++ regulator-name = "vcc3v3_pcie30"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ startup-delay-us = <5000>; ++ vin-supply = <&vcc5v0_sys>; ++ }; ++ ++ vcc3v3_pcie_eth: regulator-vcc3v3-pcie-eth { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc3v3_pcie_eth"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ startup-delay-us = <50000>; ++ vin-supply = <&vcc_3v3_s3>; ++ }; ++ ++ vcc3v3_wf: regulator-vcc3v3-wf { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ gpios = <&gpio2 RK_PC5 GPIO_ACTIVE_HIGH>; ++ regulator-name = "vcc3v3_wf"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ startup-delay-us = <50000>; ++ vin-supply = <&vcc5v0_sys>; ++ status = "disabled"; ++ }; ++ ++ vcc5v0_sys: regulator-vcc5v0-sys { ++ compatible = "regulator-fixed"; ++ regulator-name = "vcc5v0_sys"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ }; ++ ++ vcc5v0_usb20: regulator-vcc5v0-usb20 { ++ compatible = "regulator-fixed"; ++ enable-active-high; ++ regulator-name = "vcc5v0_usb20"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ vin-supply = <&vcc5v0_sys>; ++ }; ++}; ++ ++&combphy2_psu { ++ status = "okay"; ++}; ++ ++&cpu_b0 { ++ cpu-supply = <&vdd_cpu_big0_s0>; ++}; ++ ++&cpu_b1 { ++ cpu-supply = <&vdd_cpu_big0_s0>; ++}; ++ ++&cpu_b2 { ++ cpu-supply = <&vdd_cpu_big1_s0>; ++}; ++ ++&cpu_b3 { ++ cpu-supply = <&vdd_cpu_big1_s0>; ++}; ++ ++&cpu_l0 { ++ cpu-supply = <&vdd_cpu_lit_s0>; ++}; ++ ++&cpu_l1 { ++ cpu-supply = <&vdd_cpu_lit_s0>; ++}; ++ ++&cpu_l2 { ++ cpu-supply = <&vdd_cpu_lit_s0>; ++}; ++ ++&cpu_l3 { ++ cpu-supply = <&vdd_cpu_lit_s0>; ++}; ++ ++&gpu { ++ mali-supply = <&vdd_gpu_s0>; ++ status = "okay"; ++}; ++ ++&hdmi0 { ++ status = "okay"; ++}; ++ ++&hdmi0_in { ++ hdmi0_in_vp0: endpoint { ++ remote-endpoint = <&vp0_out_hdmi0>; ++ }; ++}; ++ ++&hdmi0_out { ++ hdmi0_out_con: endpoint { ++ remote-endpoint = <&hdmi0_con_in>; ++ }; ++}; ++ ++&hdptxphy_hdmi0 { ++ status = "okay"; ++}; ++ ++&i2c0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2c0m2_xfer>; ++ status = "okay"; ++ ++ vdd_cpu_big0_s0: regulator@42 { ++ compatible = "rockchip,rk8602"; ++ reg = <0x42>; ++ fcs,suspend-voltage-selector = <1>; ++ regulator-name = "vdd_cpu_big0_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <550000>; ++ regulator-max-microvolt = <1050000>; ++ regulator-ramp-delay = <2300>; ++ vin-supply = <&vcc5v0_sys>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_cpu_big1_s0: regulator@43 { ++ compatible = "rockchip,rk8603", "rockchip,rk8602"; ++ reg = <0x43>; ++ fcs,suspend-voltage-selector = <1>; ++ regulator-name = "vdd_cpu_big1_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <550000>; ++ regulator-max-microvolt = <1050000>; ++ regulator-ramp-delay = <2300>; ++ vin-supply = <&vcc5v0_sys>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++}; ++ ++&i2c6 { ++ clock-frequency = <400000>; ++ status = "okay"; ++ ++ hym8563: rtc@51 { ++ compatible = "haoyu,hym8563"; ++ reg = <0x51>; ++ #clock-cells = <0>; ++ clock-output-names = "hym8563"; ++ wakeup-source; ++ }; ++}; ++ ++&i2c7 { ++ status = "okay"; ++ ++ /* PLDO2 vcca 1.8V, BUCK8 gated by PLDO2 being enabled */ ++ es8388: audio-codec@11 { ++ compatible = "everest,es8388"; ++ reg = <0x11>; ++ clocks = <&cru I2S0_8CH_MCLKOUT>; ++ clock-names = "mclk"; ++ AVDD-supply = <&vcc_3v3_s0>; ++ DVDD-supply = <&vcc_1v8_s0>; ++ HPVDD-supply = <&vcc_3v3_s0>; ++ PVDD-supply = <&vcc_1v8_s0>; ++ assigned-clocks = <&cru I2S0_8CH_MCLKOUT>; ++ assigned-clock-rates = <12288000>; ++ #sound-dai-cells = <0>; ++ }; ++}; ++ ++&i2s0_8ch { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2s0_lrck ++ &i2s0_mclk ++ &i2s0_sclk ++ &i2s0_sdi0 ++ &i2s0_sdo0>; ++ status = "okay"; ++}; ++ ++&i2s2_2ch { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&i2s2m0_lrck ++ &i2s2m0_sclk ++ &i2s2m0_sdi ++ &i2s2m0_sdo>; ++ status = "okay"; ++}; ++ ++&package_thermal { ++ polling-delay = <1000>; ++ ++ cooling-maps { ++ map0 { ++ trip = <&package_fan0>; ++ cooling-device = <&fan THERMAL_NO_LIMIT 1>; ++ }; ++ ++ map1 { ++ trip = <&package_fan1>; ++ cooling-device = <&fan 2 THERMAL_NO_LIMIT>; ++ }; ++ }; ++ ++ trips { ++ package_fan0: package-fan0 { ++ temperature = <55000>; ++ hysteresis = <2000>; ++ type = "active"; ++ }; ++ ++ package_fan1: package-fan1 { ++ temperature = <65000>; ++ hysteresis = <2000>; ++ type = "active"; ++ }; ++ }; ++}; ++ ++&pcie30phy { ++ status = "okay"; ++}; ++ ++&pcie3x4 { ++ reset-gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>; ++ vpcie3v3-supply = <&vcc3v3_pcie30>; ++ status = "okay"; ++}; ++ ++&saradc { ++ vref-supply = <&vcc_1v8_s0>; ++ status = "okay"; ++}; ++ ++&sdhci { ++ bus-width = <8>; ++ no-sdio; ++ no-sd; ++ non-removable; ++ max-frequency = <200000000>; ++ mmc-hs400-1_8v; ++ mmc-hs400-enhanced-strobe; ++ status = "okay"; ++}; ++ ++&sdmmc { ++ bus-width = <4>; ++ cap-sd-highspeed; ++ cd-gpios = <&gpio0 RK_PA4 GPIO_ACTIVE_LOW>; ++ disable-wp; ++ max-frequency = <150000000>; ++ no-sdio; ++ no-mmc; ++ sd-uhs-sdr104; ++ vmmc-supply = <&vcc_3v3_s3>; ++ vqmmc-supply = <&vccio_sd_s0>; ++ status = "okay"; ++}; ++ ++&sfc { ++ status = "okay"; ++ ++ spi_flash: flash@0 { ++ compatible = "jedec,spi-nor"; ++ reg = <0x0>; ++ spi-max-frequency = <100000000>; ++ spi-rx-bus-width = <4>; ++ spi-tx-bus-width = <1>; ++ }; ++}; ++ ++&spi2 { ++ assigned-clocks = <&cru CLK_SPI2>; ++ assigned-clock-rates = <200000000>; ++ num-cs = <1>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi2m2_cs0 &spi2m2_pins>; ++ status = "okay"; ++ ++ pmic@0 { ++ compatible = "rockchip,rk806"; ++ reg = <0x0>; ++ interrupt-parent = <&gpio0>; ++ interrupts = <7 IRQ_TYPE_LEVEL_LOW>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pmic_pins>, <&rk806_dvs1_null>, ++ <&rk806_dvs2_null>, <&rk806_dvs3_null>; ++ spi-max-frequency = <1000000>; ++ system-power-controller; ++ ++ vcc1-supply = <&vcc5v0_sys>; ++ vcc2-supply = <&vcc5v0_sys>; ++ vcc3-supply = <&vcc5v0_sys>; ++ vcc4-supply = <&vcc5v0_sys>; ++ vcc5-supply = <&vcc5v0_sys>; ++ vcc6-supply = <&vcc5v0_sys>; ++ vcc7-supply = <&vcc5v0_sys>; ++ vcc8-supply = <&vcc5v0_sys>; ++ vcc9-supply = <&vcc5v0_sys>; ++ vcc10-supply = <&vcc5v0_sys>; ++ vcc11-supply = <&vcc_2v0_pldo_s3>; ++ vcc12-supply = <&vcc5v0_sys>; ++ vcc13-supply = <&vdd2_ddr_s3>; ++ vcc14-supply = <&vdd2_ddr_s3>; ++ vcca-supply = <&vcc5v0_sys>; ++ ++ gpio-controller; ++ #gpio-cells = <2>; ++ ++ rk806_dvs1_null: dvs1-null-pins { ++ pins = "gpio_pwrctrl1"; ++ function = "pin_fun0"; ++ }; ++ ++ rk806_dvs2_null: dvs2-null-pins { ++ pins = "gpio_pwrctrl2"; ++ function = "pin_fun0"; ++ }; ++ ++ rk806_dvs3_null: dvs3-null-pins { ++ pins = "gpio_pwrctrl3"; ++ function = "pin_fun0"; ++ }; ++ ++ regulators { ++ vdd_gpu_s0: dcdc-reg1 { ++ regulator-name = "vdd_gpu_s0"; ++ regulator-boot-on; ++ regulator-enable-ramp-delay = <400>; ++ regulator-min-microvolt = <550000>; ++ regulator-max-microvolt = <950000>; ++ regulator-ramp-delay = <12500>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_cpu_lit_s0: dcdc-reg2 { ++ regulator-name = "vdd_cpu_lit_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <550000>; ++ regulator-max-microvolt = <950000>; ++ regulator-ramp-delay = <12500>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_log_s0: dcdc-reg3 { ++ regulator-name = "vdd_log_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <675000>; ++ regulator-max-microvolt = <825000>; ++ regulator-ramp-delay = <12500>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ regulator-suspend-microvolt = <750000>; ++ }; ++ }; ++ ++ vdd_vdenc_s0: dcdc-reg4 { ++ regulator-name = "vdd_vdenc_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <550000>; ++ regulator-max-microvolt = <825000>; ++ regulator-ramp-delay = <12500>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_ddr_s0: dcdc-reg5 { ++ regulator-name = "vdd_ddr_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <675000>; ++ regulator-max-microvolt = <900000>; ++ regulator-ramp-delay = <12500>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ regulator-suspend-microvolt = <850000>; ++ }; ++ }; ++ ++ vdd2_ddr_s3: dcdc-reg6 { ++ regulator-name = "vdd2_ddr_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ }; ++ }; ++ ++ vcc_2v0_pldo_s3: dcdc-reg7 { ++ regulator-name = "vdd_2v0_pldo_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <2000000>; ++ regulator-max-microvolt = <2000000>; ++ regulator-ramp-delay = <12500>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <2000000>; ++ }; ++ }; ++ ++ vcc_3v3_s3: dcdc-reg8 { ++ regulator-name = "vcc_3v3_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <3300000>; ++ }; ++ }; ++ ++ vddq_ddr_s0: dcdc-reg9 { ++ regulator-name = "vddq_ddr_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_1v8_s3: dcdc-reg10 { ++ regulator-name = "vcc_1v8_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++ }; ++ ++ avcc_1v8_s0: pldo-reg1 { ++ regulator-name = "avcc_1v8_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++ }; ++ ++ /* shorted to avcc_1v8_s0 on the board */ ++ vcc_1v8_s0: pldo-reg2 { ++ regulator-name = "vcc_1v8_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++ }; ++ ++ avdd_1v2_s0: pldo-reg3 { ++ regulator-name = "avdd_1v2_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1200000>; ++ regulator-max-microvolt = <1200000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vcc_3v3_s0: pldo-reg4 { ++ regulator-name = "vcc_3v3_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-ramp-delay = <12500>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vccio_sd_s0: pldo-reg5 { ++ regulator-name = "vccio_sd_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-ramp-delay = <12500>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ pldo6_s3: pldo-reg6 { ++ regulator-name = "pldo6_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <1800000>; ++ }; ++ }; ++ ++ vdd_0v75_s3: nldo-reg1 { ++ regulator-name = "vdd_0v75_s3"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <750000>; ++ regulator-max-microvolt = <750000>; ++ ++ regulator-state-mem { ++ regulator-on-in-suspend; ++ regulator-suspend-microvolt = <750000>; ++ }; ++ }; ++ ++ vdd_ddr_pll_s0: nldo-reg2 { ++ regulator-name = "vdd_ddr_pll_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <850000>; ++ regulator-max-microvolt = <850000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ regulator-suspend-microvolt = <850000>; ++ }; ++ }; ++ ++ avdd_0v75_s0: nldo-reg3 { ++ regulator-name = "avdd_0v75_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ /* ++ * The schematic mentions that actual setting ++ * should be 0.8375V. RK3588 datasheet specifies ++ * maximum as 0.825V. So we set datasheet max ++ * here. ++ */ ++ regulator-min-microvolt = <825000>; ++ regulator-max-microvolt = <825000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_0v85_s0: nldo-reg4 { ++ regulator-name = "vdd_0v85_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <850000>; ++ regulator-max-microvolt = <850000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ ++ vdd_0v75_s0: nldo-reg5 { ++ regulator-name = "vdd_0v75_s0"; ++ regulator-always-on; ++ regulator-boot-on; ++ regulator-min-microvolt = <750000>; ++ regulator-max-microvolt = <750000>; ++ ++ regulator-state-mem { ++ regulator-off-in-suspend; ++ }; ++ }; ++ }; ++ }; ++}; ++ ++&tsadc { ++ status = "okay"; ++}; ++ ++&u2phy2 { ++ status = "okay"; ++}; ++ ++&u2phy3 { ++ status = "okay"; ++}; ++ ++&u2phy2_host { ++ phy-supply = <&vcc5v0_usb20>; ++ status = "okay"; ++}; ++ ++&u2phy3_host { ++ phy-supply = <&vcc5v0_usb20>; ++ status = "okay"; ++}; ++ ++&uart2 { ++ pinctrl-0 = <&uart2m0_xfer>; ++ status = "okay"; ++}; ++ ++&usb_host0_ehci { ++ status = "okay"; ++}; ++ ++&usb_host0_ohci { ++ status = "okay"; ++}; ++ ++&usb_host1_ehci { ++ status = "okay"; ++}; ++ ++&usb_host1_ohci { ++ status = "okay"; ++}; ++ ++&vop_mmu { ++ status = "okay"; ++}; ++ ++&vop { ++ status = "okay"; ++}; ++ ++&vp0 { ++ vp0_out_hdmi0: endpoint@ROCKCHIP_VOP2_EP_HDMI0 { ++ reg = ; ++ remote-endpoint = <&hdmi0_in_vp0>; ++ }; ++}; +-- +2.34.1 + + +From 2e45a4f7b71a0221a3966ec551a1295ea27c46d6 Mon Sep 17 00:00:00 2001 +From: Jimmy Hon +Date: Sun, 10 Nov 2024 22:53:25 -0600 +Subject: [PATCH 2/3] dt-bindings: arm: rockchip: Add Xunlong Orange Pi 5 Max + +Add devicetree binding for the Xunlong Orange Pi 5 Max board. + +The Orange Pi 5 Max is a single board computer powered by the Rockchip +RK3588 similar to the Orange Pi 5 Plus. + +Signed-off-by: Jimmy Hon +Acked-by: Conor Dooley +--- + Documentation/devicetree/bindings/arm/rockchip.yaml | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/Documentation/devicetree/bindings/arm/rockchip.yaml b/Documentation/devicetree/bindings/arm/rockchip.yaml +index 753199a12923..2a141d99c533 100644 +--- a/Documentation/devicetree/bindings/arm/rockchip.yaml ++++ b/Documentation/devicetree/bindings/arm/rockchip.yaml +@@ -1075,9 +1075,11 @@ properties: + - const: xunlong,orangepi-3b + - const: rockchip,rk3566 + +- - description: Xunlong Orange Pi 5 Plus ++ - description: Xunlong Orange Pi 5 Max/Plus + items: +- - const: xunlong,orangepi-5-plus ++ - enum: ++ - xunlong,orangepi-5-max ++ - xunlong,orangepi-5-plus + - const: rockchip,rk3588 + + - description: Xunlong Orange Pi R1 Plus / LTS +-- +2.34.1 + + +From 9636d3a4ff8ec4d07127ee1b67d71561c932a1fe Mon Sep 17 00:00:00 2001 +From: Jimmy Hon +Date: Sun, 10 Nov 2024 22:53:27 -0600 +Subject: [PATCH 3/3] arm64: dts: rockchip: Add Orange Pi 5 Max board + +The RK3588 Single Board Computer includes +- eMMC +- microSD +- UART +- 2 PWM LEDs +- RTC +- RTL8125 network controller on PCIe 2.0x1. +- M.2 M-key connector routed to PCIe 3.0x4 +- PWM controlled heat sink fan. +- 2 USB2 ports +- lower USB3 port +- upper USB3 port with OTG capability +- Mali GPU +- SPI NOR flash +- Mask Rom button +- Analog audio using es8388 codec via the headset jack and onboard mic +- HDMI0 + +the vcc5v0_usb30 regulator shares the same enable gpio pin as the +vcc5v0_usb20 regulator. + +Signed-off-by: Jimmy Hon +--- + arch/arm64/boot/dts/rockchip/Makefile | 1 + + .../dts/rockchip/rk3588-orangepi-5-max.dts | 130 ++++++++++++++++++ + .../boot/dts/rockchip/rk3588-orangepi-5.dtsi | 8 ++ + 3 files changed, 139 insertions(+) + create mode 100644 arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-max.dts + +diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile +index 86cc418a2255..83ad11650f0b 100644 +--- a/arch/arm64/boot/dts/rockchip/Makefile ++++ b/arch/arm64/boot/dts/rockchip/Makefile +@@ -142,6 +142,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-jaguar.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-nanopc-t6.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-nanopc-t6-lts.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-ok3588-c.dtb ++dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-orangepi-5-max.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-orangepi-5-plus.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-quartzpro64.dtb + dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588-rock-5-itx.dtb +diff --git a/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-max.dts b/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-max.dts +new file mode 100644 +index 000000000000..c9f17bb31710 +--- /dev/null ++++ b/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5-max.dts +@@ -0,0 +1,130 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++ ++/dts-v1/; ++ ++#include ++#include ++#include "rk3588-orangepi-5.dtsi" ++ ++/ { ++ model = "Xunlong Orange Pi 5 Max"; ++ compatible = "xunlong,orangepi-5-max", "rockchip,rk3588"; ++}; ++ ++&headphone_amp { ++ /* PHONE_CTL */ ++ enable-gpios = <&gpio4 RK_PB0 GPIO_ACTIVE_HIGH>; ++}; ++ ++&analog_sound { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&hp_detect>; ++ simple-audio-card,aux-devs = <&headphone_amp>; ++ simple-audio-card,hp-det-gpios = <&gpio3 RK_PD2 GPIO_ACTIVE_HIGH>; ++ ++ simple-audio-card,routing = ++ "Headphones", "LOUT1", ++ "Headphones", "ROUT1", ++ "LINPUT1", "Microphone Jack", ++ "RINPUT1", "Microphone Jack", ++ "LINPUT2", "Onboard Microphone", ++ "RINPUT2", "Onboard Microphone"; ++ simple-audio-card,widgets = ++ "Microphone", "Microphone Jack", ++ "Microphone", "Onboard Microphone", ++ "Headphone", "Headphones"; ++}; ++ ++&fan { ++ /* FAN_CTL_H */ ++ pwms = <&pwm9 0 50000 0>; ++}; ++ ++&hym8563 { ++ interrupt-parent = <&gpio0>; ++ interrupts = ; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&rtc_int_l>; ++}; ++ ++&led_blue_pwm { ++ /* PWM_LED1 */ ++ pwms = <&pwm4 0 25000 0>; ++ status = "okay"; ++}; ++ ++&led_green_pwm { ++ /* PWM_LED2 */ ++ pwms = <&pwm5 0 25000 0>; ++}; ++ ++/* phy2 */ ++&pcie2x1l1 { ++ reset-gpios = <&gpio4 RK_PD4 GPIO_ACTIVE_HIGH>; ++ vpcie3v3-supply = <&vcc3v3_pcie_eth>; ++ status = "okay"; ++}; ++ ++&pinctrl { ++ hym8563 { ++ rtc_int_l: hym8563-int { ++ rockchip,pins = <0 RK_PC4 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ sound { ++ hp_detect: hp-detect { ++ rockchip,pins = <3 RK_PD2 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++ ++ usb { ++ usb_host_pwren: usb-host-pwren { ++ rockchip,pins = <3 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ ++ usb_otg_pwren: usb-otg-pwren { ++ rockchip,pins = <4 RK_PB3 RK_FUNC_GPIO &pcfg_pull_none>; ++ }; ++ }; ++}; ++ ++&pwm4 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm4m0_pins>; ++ status = "okay"; ++}; ++ ++&pwm5 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm5m1_pins>; ++ status = "okay"; ++}; ++ ++&pwm9 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pwm9m2_pins>; ++ status = "okay"; ++}; ++ ++&sfc { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&fspim2_pins>; ++}; ++ ++/* pcie eth. not a real regulator. 33VAUX */ ++&vcc3v3_pcie_eth { ++ /* Ethernet_power_en */ ++ gpios = <&gpio0 RK_PD3 GPIO_ACTIVE_LOW>; ++}; ++ ++/* ++ * Represents the vcc5v0_usb20 and vcc5v0_usb30 in the schematic, ++ * both regulators share the same enable gpio ++ */ ++&vcc5v0_usb20 { ++ /* USB_HOST_PWREN */ ++ gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&usb_host_pwren>; ++}; +diff --git a/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi +index 3c6e1321f13f..6459a277f973 100644 +--- a/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi ++++ b/arch/arm64/boot/dts/rockchip/rk3588-orangepi-5.dtsi +@@ -95,6 +95,14 @@ fan: pwm-fan { + pwm-leds { + compatible = "pwm-leds"; + ++ led_blue_pwm: led-1 { ++ color = ; ++ function = LED_FUNCTION_STATUS; ++ linux,default-trigger = "heartbeat"; ++ max-brightness = <255>; ++ status = "disabled"; ++ }; ++ + led_green_pwm: led-2 { + color = ; + function = LED_FUNCTION_INDICATOR; +-- +2.34.1 +