[PATCH 2/2] arm64: dts: rockchip: add ALIENTEK QuarkPi-CA2
BG9OXA
bg9oxa at 163.com
Sun Sep 27 05:37:06 PDT 2026
Add a device tree for the ALIENTEK QuarkPi-CA2, an RK3588S based single
board computer.
Tested on hardware: UART console, eMMC, microSD, gigabit Ethernet, HDMI
video and audio, ES8388 analog audio, the USB 2.0 host ports and the
USB 3.0 (Type-A) host port.
Signed-off-by: BG9OXA <bg9oxa at 163.com>
---
diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile
--- a/arch/arm64/boot/dts/rockchip/Makefile
+++ b/arch/arm64/boot/dts/rockchip/Makefile
@@ -236,6 +236,7 @@
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-orangepi-5b.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-orangepi-5-pro.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-orangepi-cm5-base.dtb
+dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-quarkpi-ca2.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-radxa-cm5-io.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-roc-pc.dtb
dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3588s-rock-5a.dtb
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-quarkpi-ca2.dts b/arch/arm64/boot/dts/rockchip/rk3588s-quarkpi-ca2.dts
new file mode 100644
--- /dev/null
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-quarkpi-ca2.dts
@@ -0,0 +1,1508 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/leds/common.h>
+#include <dt-bindings/media/video-interfaces.h>
+#include <dt-bindings/pinctrl/rockchip.h>
+#include <dt-bindings/soc/rockchip,vop2.h>
+#include <dt-bindings/thermal/thermal.h>
+#include "rk3588s.dtsi"
+/ {
+ model = "Alientek QuarkPI-CA2";
+ compatible = "alientek,quarkpi-ca2", "rockchip,rk3588s";
+
+ /* Crash log retention (pstore/ramoops). The shared rk3588-ramoops.dtsi
+ * used by the vendor BSP is not part of mainline, so the node is inlined
+ * here. The reserved region layout follows the vendor BSP device tree.
+ */
+ reserved-memory {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ ranges;
+
+ ramoops: ramoops at 118000 {
+ compatible = "ramoops";
+ reg = <0 0x118000 0 0xd8000>;
+ console-size = <0x80000>;
+ ftrace-size = <0x00000>;
+ pmsg-size = <0x30000>;
+ record-size = <0x14000>;
+ };
+ };
+
+ aliases {
+ mmc0 = &sdhci;
+ mmc1 = &sdmmc;
+ ethernet0 = &gmac1;
+ };
+
+ chosen {
+ stdout-path = "serial2:1500000n8";
+ };
+
+ adc_keys: adc-keys {
+ compatible = "adc-keys";
+ io-channels = <&saradc 1>;
+ io-channel-names = "buttons";
+ keyup-threshold-microvolt = <1800000>;
+ poll-interval = <100>;
+
+ button-vol-up {
+ label = "volume up";
+ linux,code = <KEY_VOLUMEUP>;
+ press-threshold-microvolt = <17000>;
+ };
+
+ button-vol-down {
+ label = "volume down";
+ linux,code = <KEY_VOLUMEDOWN>;
+ press-threshold-microvolt = <417000>;
+ };
+ };
+
+ leds: leds {
+ compatible = "gpio-leds";
+
+ work_led: led-0 {
+ /* 主线已åºå¼ labelï¼dtbs_check æ¥ Unevaluated propertiesï¼ï¼ç¨ function å代 */
+ function = LED_FUNCTION_HEARTBEAT;
+ gpios = <&gpio1 RK_PD7 GPIO_ACTIVE_HIGH>;
+ linux,default-trigger = "heartbeat";
+ pinctrl-names = "default";
+ pinctrl-0 = <&work_led_pin>;
+ };
+ };
+
+ fan: pwm-fan {
+ compatible = "pwm-fan";
+ #cooling-cells = <2>;
+ pwms = <&pwm7 0 50000 0>;
+ cooling-levels = <0 50 100 150 200 255>;
+ };
+
+ vcc12v_dcin: vcc12v-dcin {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc12v_dcin";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <12000000>;
+ regulator-max-microvolt = <12000000>;
+ };
+
+ vcc5v0_sys: vcc5v0-sys {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc5v0_sys";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ vin-supply = <&vcc12v_dcin>;
+ };
+
+ vcc5v0_usb: vcc5v0-usb {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc5v0_usb";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ vin-supply = <&vcc5v0_sys>;
+ };
+
+ vcc_1v1_nldo_s3: vcc-1v1-nldo-s3 {
+ compatible = "regulator-fixed";
+ regulator-name = "vcc_1v1_nldo_s3";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <1100000>;
+ regulator-max-microvolt = <1100000>;
+ vin-supply = <&vcc5v0_sys>;
+ };
+
+ vcc_3v3_sd_s0: vcc-3v3-sd-s0-regulator {
+ compatible = "regulator-fixed";
+ gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_LOW>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&sd_s0_pwr>;
+ regulator-name = "vcc_3v3_sd_s0";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ vin-supply = <&vcc_3v3_s3>;
+ };
+};
+
+&spi2 {
+ status = "okay";
+ assigned-clocks = <&cru CLK_SPI2>;
+ assigned-clock-rates = <200000000>;
+ num-cs = <1>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi2m2_cs0 &spi2m2_pins>;
+
+ pmic at 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;
+
+ gpio-controller;
+ #gpio-cells = <2>;
+
+ 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 = <&vcc_1v1_nldo_s3>;
+ vcc14-supply = <&vcc_1v1_nldo_s3>;
+ vcca-supply = <&vcc5v0_sys>;
+
+ rk806_dvs1_null: dvs1-null-pins {
+ pins = "gpio_pwrctrl2";
+ 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-min-microvolt = <550000>;
+ regulator-max-microvolt = <950000>;
+ regulator-ramp-delay = <12500>;
+ regulator-enable-ramp-delay = <400>;
+
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ vdd_cpu_lit_s0: vdd_cpu_lit_mem_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 = <750000>;
+ regulator-ramp-delay = <12500>;
+
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ regulator-suspend-microvolt = <750000>;
+ };
+ };
+
+ vdd_vdenc_s0: vdd_vdenc_mem_s0: dcdc-reg4 {
+ regulator-name = "vdd_vdenc_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_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 = "vcc_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;
+ };
+ };
+
+ 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-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;
+ regulator-min-microvolt = <837500>;
+ regulator-max-microvolt = <837500>;
+
+ 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;
+ };
+ };
+ };
+ };
+};
+
+&i2c0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c0m2_xfer>;
+ status = "okay";
+
+ vdd_cpu_big0_s0: regulator at 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 at 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;
+ };
+ };
+};
+
+&i2c2 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c2m0_xfer>;
+ status = "okay";
+
+ vdd_npu_s0: vdd_npu_mem_s0: regulator at 42 {
+ compatible = "rockchip,rk8602";
+ reg = <0x42>;
+ fcs,suspend-voltage-selector = <1>;
+ regulator-name = "vdd_npu_s0";
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-min-microvolt = <550000>;
+ regulator-max-microvolt = <950000>;
+ regulator-ramp-delay = <2300>;
+ vin-supply = <&vcc5v0_sys>;
+
+ regulator-state-mem {
+ regulator-off-in-suspend;
+ };
+ };
+
+ /*
+ * Type-C PD æ§å¶å¨ HUSB311 ââ 2026-09-26 ä»åå 6.1 宿¹ dtb ç§»æ¤
+ * ï¼å®æ¹ï¼i2c2 at 0x4eï¼status = "okay"ï¼ã
+ *
+ * â ï¸ compatible å¿
é¡»å**两个**ï¼ä¸»çº¿ tcpci_rt1711h.c ç of_match é
+ * 并没æ "hynetek,husb311"ï¼å®é
é fallback ç "richtek,rt1711h" å¹é
ã
+ * 便® Documentation/devicetree/bindings/usb/richtek,rt1711h.yaml
+ * ï¼hynetek,husb311 åå¿
é¡»è· richtek,rt1711hï¼ï¼
+ * 主线 rk3588-hlink-h88k-v31.dts æ¯å䏿¬¾è¯ççç°æèä¾ã
+ *
+ * 䏿ï¼å®æ¹ pinctrl usbc0-int = <0x01 0x04 0x00> â gpio1 PA4ï¼
+ * 宿¹ interrupts = <0x04 0x08> â pin 4 + IRQ_TYPE_LEVEL_LOWã
+ * VBUSï¼vbus-supply = <&vbus5v0_typec>ï¼gpio1 PD5 å¼å
³ï¼ã
+ *
+ * æ°æ®éè·¯ï¼orientation switch / DP altmode muxï¼**å·²æ¥**ï¼2026-09-26ï¼ï¼
+ * è§æä»¶æ«å°¾ DP 段 ââ usbdp_phy0 å äº orientation-switch / mode-switch
+ * ä¸ SBU1/SBU2 ç´æµå¼å
³èï¼gpio4-6/7ï¼ååæ å¼ï¼ï¼è¿æ¥å¨ä¾§å port at 2(SBU)ã
+ * 宿µï¼DP åºå¾ 1920x1080 æ£å¸¸ï¼ä¸ HDMIï¼èµ° vp0ï¼äºä¸å½±åã
+ */
+ husb311: husb311 at 4e {
+ status = "okay";
+ compatible = "hynetek,husb311", "richtek,rt1711h";
+ reg = <0x4e>;
+ interrupt-parent = <&gpio1>;
+ interrupts = <RK_PA4 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&usbc0_int>;
+ vbus-supply = <&vbus5v0_typec>;
+
+ /* 宿¹ connector ç PD åæ°ï¼åå¼ç
§æ¬ï¼ */
+ usb_con: connector {
+ compatible = "usb-c-connector";
+ label = "USB-C";
+ power-role = "dual";
+ data-role = "dual";
+ try-power-role = "sink";
+ source-pdos = <0x401912c>;
+ sink-pdos = <0x4019064>;
+ op-sink-microwatt = <1000000>;
+
+ /* â DP alt modeï¼2026-09-26 æç¨æ·è¦æ±è¯ä¸æ¬¡ï¼ï¼
+ * è¿æ¥å¨ SBU ââ usbdp_phy0 ç dp_outï¼DP é¾è·¯æç®æ¥éã
+ * åªè¡¥ port at 2ï¼SBUï¼ï¼ä¸å¨ HS/SSï¼é¿å
å½±åå·²éªè¯ç USB3 hostã */
+ altmodes {
+ displayport {
+ svid = /bits/ 16 <0xff01>;
+ vdo = <0xffffffff>;
+ };
+ };
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port at 0 {
+ reg = <0>;
+ usbc0_hs: endpoint {
+ remote-endpoint = <&usb_host0_hs_ep>;
+ };
+ };
+
+ port at 1 {
+ reg = <1>;
+ usbc0_ss: endpoint {
+ remote-endpoint = <&usb_host0_ss_ep>;
+ };
+ };
+
+ port at 2 {
+ reg = <2>;
+ usbc0_sbu: endpoint {
+ remote-endpoint = <&usbdp_phy0_dp_out>;
+ };
+ };
+ };
+ };
+ };
+ };
+
+ &cpu_l0 {
+ cpu-supply = <&vdd_cpu_lit_s0>;
+ mem-supply = <&vdd_cpu_lit_mem_s0>;
+};
+
+&cpu_l1 {
+ cpu-supply = <&vdd_cpu_lit_s0>;
+ mem-supply = <&vdd_cpu_lit_mem_s0>;
+};
+
+&cpu_l2 {
+ cpu-supply = <&vdd_cpu_lit_s0>;
+ mem-supply = <&vdd_cpu_lit_mem_s0>;
+};
+
+&cpu_l3 {
+ cpu-supply = <&vdd_cpu_lit_s0>;
+ mem-supply = <&vdd_cpu_lit_mem_s0>;
+};
+
+&cpu_b0 {
+ cpu-supply = <&vdd_cpu_big0_s0>;
+ mem-supply = <&vdd_cpu_big0_s0>;
+};
+
+&cpu_b1 {
+ cpu-supply = <&vdd_cpu_big0_s0>;
+ mem-supply = <&vdd_cpu_big0_s0>;
+};
+
+&cpu_b2 {
+ cpu-supply = <&vdd_cpu_big1_s0>;
+ mem-supply = <&vdd_cpu_big1_s0>;
+};
+
+&cpu_b3 {
+ cpu-supply = <&vdd_cpu_big1_s0>;
+ mem-supply = <&vdd_cpu_big1_s0>;
+};
+
+&gpu {
+ mali-supply = <&vdd_gpu_s0>;
+ status = "okay";
+};
+
+&rknn_core_0 {
+ npu-supply = <&vdd_npu_s0>;
+ sram-supply = <&vdd_npu_mem_s0>;
+ status = "okay";
+};
+
+&rknn_core_1 {
+ npu-supply = <&vdd_npu_s0>;
+ sram-supply = <&vdd_npu_mem_s0>;
+ status = "okay";
+};
+
+&rknn_core_2 {
+ npu-supply = <&vdd_npu_s0>;
+ sram-supply = <&vdd_npu_mem_s0>;
+ status = "okay";
+};
+
+&sdhci {
+ bus-width = <8>;
+ no-sdio;
+ no-sd;
+ non-removable;
+ max-frequency = <200000000>;
+ mmc-hs400-1_8v;
+ mmc-hs400-enhanced-strobe;
+ vmmc-supply = <&vcc_3v3_s3>;
+ vqmmc-supply = <&vcc_1v8_s3>;
+ status = "okay";
+};
+
+&sdmmc {
+ max-frequency = <150000000>;
+ no-sdio;
+ no-mmc;
+ bus-width = <4>;
+ cap-mmc-highspeed;
+ cap-sd-highspeed;
+ disable-wp;
+ sd-uhs-sdr104;
+ vmmc-supply = <&vcc_3v3_sd_s0>;
+ vqmmc-supply = <&vccio_sd_s0>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdmmc_bus4 &sdmmc_clk &sdmmc_cmd &sdmmc_det>;
+ status = "okay";
+};
+
+&uart2 {
+ pinctrl-0 = <&uart2m0_xfer>;
+ status = "okay";
+};
+
+&gmac1 {
+ /* Use rgmii-rxid mode to disable rx delay inside Soc */
+ phy-mode = "rgmii-rxid";
+ clock_in_out = "input";
+
+ snps,reset-gpio = <&gpio0 RK_PD5 GPIO_ACTIVE_LOW>;
+ snps,reset-active-low;
+ /* Reset time is 20ms, 100ms for rtl8211f */
+ snps,reset-delays-us = <0 20000 100000>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&gmac1_miim
+ &gmac1_tx_bus2
+ &gmac1_rx_bus2
+ &gmac1_rgmii_clk
+ &gmac1_rgmii_bus
+ &gmac1_clkinout>;
+
+ tx_delay = <0x2f>;
+ rx_delay = <0x00>;
+
+ phy-handle = <&rgmii_phy1>;
+ status = "okay";
+};
+
+&mdio1 {
+ rgmii_phy1: ethernet-phy at 1 {
+ compatible = "ethernet-phy-ieee802.3-c22";
+ reg = <0x1>;
+
+ /*
+ * gmac1 å·¥ä½å¨ clock_in_out = "input"ï¼MAC ç 125M æ¶éç± PHY ç
+ * CLKOUT å¼èæä¾ï¼ç» gmac1_clkinout å¼èè·¯ç±ï¼ã主线 motorcomm 驱å¨
+ * é»è®¤å
³éæ¶éè¾åºï¼clk-out-frequency-hz é»è®¤ 0ï¼ï¼å¿
é¡»æ¾å¼æå¼ï¼
+ * å¦å MAC æ¿ä¸å°æ¶é ââ 表ç°ä¸º MDIO æ£å¸¸ãé¾è·¯ Upãä½ä¸ open å°±
+ * DMA/VLAN_TAG è¶
æ¶å¹¶è§¦å TX watchdogã
+ */
+ motorcomm,clk-out-frequency-hz = <125000000>;
+ /* é¾è·¯æªèµ·æ¶ä¹ä¿æ PLL/æ¶éè¾åºï¼ä¾ MAC åå§åä½¿ç¨ */
+ motorcomm,keep-pll-enabled;
+ };
+};
+
+/* USB2.0 HOST0 (PHY2) */
+&u2phy2 {
+ status = "okay";
+};
+
+&u2phy2_host {
+ phy-supply = <&vcc5v0_usb>;
+ status = "okay";
+};
+
+&usb_host0_ehci {
+ status = "okay";
+};
+
+&usb_host0_ohci {
+ status = "okay";
+};
+
+/* USB2.0 HOST1 (PHY3) */
+&u2phy3 {
+ status = "okay";
+};
+
+&u2phy3_host {
+ phy-supply = <&vcc5v0_usb>;
+ status = "okay";
+};
+
+&usb_host1_ehci {
+ status = "okay";
+};
+
+&usb_host1_ohci {
+ status = "okay";
+};
+
+&pwm7 {
+ pinctrl-0 = <&pwm7m0_pins>;
+ status = "okay";
+};
+
+&saradc {
+ status = "okay";
+ vref-supply = <&vcc_1v8_s0>;
+};
+
+&tsadc {
+ status = "okay";
+};
+
+&pinctrl {
+ sdmmc {
+ sd_s0_pwr: sd-s0-pwr {
+ rockchip,pins = <0 RK_PA0 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ pcie {
+ pcie2x1l2_perstn: pcie2x1l2-perstn {
+ /* åå dtsi åªç» reset-gpiosï¼æªç» muxï¼è¿éæ¾å¼è¡¥ GPIO åè½ */
+ rockchip,pins = <3 RK_PB2 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+
+ usb-typec {
+ typec5v_pwren: typec5v-pwren {
+ /* åååå§å¼ <0x01 0x1d 0x00>ï¼bank1 pin 0x1d=29 â PD5
+ * â ï¸ æ©å
è¯¯ç®æ PC5(21)ï¼ä¸ i2s0_lrck(PC5) æ¢å¼èï¼
+ * å¯¼è´ vbus5v0-typec 请æ±å¤±è´¥ â xhci æ æ³ä¸çµï¼VBUS 仿ªçæ£æå¼ï¼
+ */
+ rockchip,pins = <1 RK_PD5 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+
+ usbc0_int: usbc0-int {
+ /* åååå§å¼ <0x01 0x04 0x00>ï¼bank1 pin 4 â PA4ï¼HUSB311 䏿èï¼ */
+ rockchip,pins = <1 RK_PA4 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+
+ leds {
+ work_led_pin: work-led-pin {
+ rockchip,pins = <1 RK_PD7 RK_FUNC_GPIO &pcfg_pull_down>;
+ };
+ };
+};
+
+/*
+ * é£ææ¸©æ§
+ *
+ * åå BSP ç¨ç§æå±æ§ rockchip,temp-trips å¨é©±å¨å
è°éï¼ä¸»çº¿ pwm-fan ä¸è®¤ï¼ï¼
+ * è¿éæ¹ç¨ä¸»çº¿æ ååæ³ï¼æé£ææå° package çåºç trips + cooling-mapsã
+ * é弿²¿ç¨åå dtsi ç 50/55/60/65/70°Cï¼æ¡£ä½å¯¹åº cooling-levels
+ * <0 50 100 150 200 255>ï¼duty 0/50/100/150/200/255ï¼ã
+ *
+ * â ï¸ SoC dtsi é polling-delay é»è®¤ 0ï¼ä¸è½®è¯¢ï¼ï¼æ¿çº§å¿
é¡»æ¾å¼æå¼ï¼
+ * å¦å温度ååä¸è§¦åè°é ââ 表ç°ä¸ºé£ææå®è½¬éãcur_state å¡å¨ maxã
+ */
+&package_thermal {
+ polling-delay = <1000>;
+
+ trips {
+ fan_trip0: fan-trip0 {
+ temperature = <50000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+
+ fan_trip1: fan-trip1 {
+ temperature = <55000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+
+ fan_trip2: fan-trip2 {
+ temperature = <60000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+
+ fan_trip3: fan-trip3 {
+ temperature = <65000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+
+ fan_trip4: fan-trip4 {
+ temperature = <70000>;
+ hysteresis = <2000>;
+ type = "active";
+ };
+ };
+
+ cooling-maps {
+ map0 {
+ trip = <&fan_trip0>;
+ cooling-device = <&fan THERMAL_NO_LIMIT 1>;
+ };
+
+ map1 {
+ trip = <&fan_trip1>;
+ cooling-device = <&fan 1 2>;
+ };
+
+ map2 {
+ trip = <&fan_trip2>;
+ cooling-device = <&fan 2 3>;
+ };
+
+ map3 {
+ trip = <&fan_trip3>;
+ cooling-device = <&fan 3 4>;
+ };
+
+ map4 {
+ trip = <&fan_trip4>;
+ cooling-device = <&fan 4 THERMAL_NO_LIMIT>;
+ };
+ };
+};
+
+/*
+ * HDMI0 è¾åºï¼VOP VP0 -> hdmi0 -> hdptxphy0ï¼
+ *
+ * å¼èæ å°æ¥èªåå BSP dtb åç¼è¯å®æµï¼å
¨é¨ mux 5ï¼
+ * CEC = gpio4 PC1 HPD = gpio1 PA5
+ * SCL = gpio4 PB7 SDA = gpio4 PC0
+ * ä¸ä¸»çº¿ stock ç hdmim0_tx0_* å¼èç»éä½ä¸è´ï¼æ
ç´æ¥å¼ç¨ï¼æ éèªå®ä¹ç»ã
+ *
+ * 使è½èï¼åå dtsi å enable-gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>ï¼
+ * 主线 dw-hdmi-qp 驱å¨åªè®¤ frl-enable-gpiosï¼ä¸ä»
å䏿¬¡
+ * gpiod_set_value(..., 0)ï¼å»æè¨ï¼ââ é
GPIO_ACTIVE_LOW æ¶è¯¥èç©ççµå¹³ä¸ºé«ï¼
+ * ä¸åå ACTIVE_HIGH ç使è½è¯ä¹ä¸è´ãmainline ä¸åèä½ç rk3588s æ¿
+ * ï¼indiedroid-novaãcoolpi-4bï¼å³æ¤åæ³ã
+ */
+&hdmi0 {
+ frl-enable-gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_LOW>;
+ pinctrl-0 = <&hdmim0_tx0_cec &hdmim0_tx0_hpd
+ &hdmim0_tx0_scl &hdmim0_tx0_sda>;
+ pinctrl-names = "default";
+ status = "okay";
+};
+
+&hdmi0_in {
+ hdmi0_in_vp0: endpoint {
+ remote-endpoint = <&vp0_out_hdmi0>;
+ };
+};
+
+&hdmi0_out {
+ hdmi0_out_con: endpoint {
+ remote-endpoint = <&hdmi0_con_in>;
+ };
+};
+
+&hdptxphy0 {
+ status = "okay";
+};
+
+&vop {
+ status = "okay";
+};
+
+&vop_mmu {
+ status = "okay";
+};
+
+&vp0 {
+ vp0_out_hdmi0: endpoint at ROCKCHIP_VOP2_EP_HDMI0 {
+ reg = <ROCKCHIP_VOP2_EP_HDMI0>;
+ remote-endpoint = <&hdmi0_in_vp0>;
+ };
+};
+
+/*
+ * HDMI0 é³é¢
+ *
+ * 主线 rk3588-base.dtsi å·²å
ç½®ç°æç hdmi0_sound å¡ï¼é»è®¤ disabledï¼ï¼
+ * åªéæå¼å® + æå¼ i2s5_8chï¼ä¸å¿
èªå»º simple-audio-cardã
+ *
+ * å¯¹è´¦ä¾æ®ï¼åå 6.1 dtb vs 主线ï¼ï¼
+ * åå hdmi0-sound: cpu = i2s at fddf0000 = 主线 i2s5_8ch â
+ * codec = hdmi at fde80000 = 主线 hdmi0 â
+ * mclk-fs = 0x80 = 128 = 主线 128 â
+ * å SoC(RK3588S) åç
§åæ³ä¸è´ï¼
+ * rk3588s-orangepi-5.dtsi:127/214ãrk3588s-nanopi-r6.dtsi:258/346
+ * ââ ååªæ¯æè¿ä¸¤ä¸ªèç¹ status æ¹ä¸º okayã
+ */
+&i2s5_8ch {
+ status = "okay";
+};
+
+&hdmi0_sound {
+ status = "okay";
+};
+
+/*
+ * PCIe 2.0 x1 ââ M.2 座ï¼èµ° combphy0_psï¼
+ *
+ * â ï¸ sata0 ä¸ pcie2x1l2 å¤ç¨ combphy0_psï¼å¿
é¡»ä¿æ sata0 ç¦ç¨ï¼åå dtsi åæ ·å¤çï¼ï¼
+ * å¦å两è
æ¢åä¸ä¸ª PHYã
+ * å¤ä½è gpio3 RK_PB2ï¼åå dtb 宿µå¼ï¼ï¼æ¿ä¸ 3.3V 常ä¾ï¼å¼ vcc_3v3_s3ã
+ */
+&sata0 {
+ status = "disabled";
+};
+
+&combphy0_ps {
+ status = "okay";
+};
+
+&pcie2x1l2 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&pcie2x1l2_perstn>;
+ reset-gpios = <&gpio3 RK_PB2 GPIO_ACTIVE_HIGH>;
+ vpcie3v3-supply = <&vcc_3v3_s3>;
+ status = "okay";
+};
+
+/*
+ * USB3 ââ Type-C å£ï¼èµ° usbdp_phy0 + u2phy0ï¼
+ *
+ * 主线没æ HUSB311ï¼TCPCï¼é©±å¨ï¼Type-C çæå
¥æ¹å/è§è²åæ¢ï¼CC æ£æµï¼æ¿ä¸å°ï¼
+ * æ
æ rock-5c çåæ³åºå®æ host 模å¼ï¼ä¸å OTG/DP altmodeã
+ * VBUS ç± vbus5v0_typec æ§å¶ï¼GPIO = gpio1 PC5ï¼åå dtb 宿µå¼ï¼ã
+ */
+&u2phy0 {
+ status = "okay";
+};
+
+&u2phy0_otg {
+ phy-supply = <&vbus5v0_typec>;
+ status = "okay";
+};
+
+/*
+ * USB3.0 Type-A host port (the blue, upper connector).
+ * The SuperSpeed lanes are wired to usb_host2_xhci through combphy2_psu.
+ * The vendor BSP enables both; without them the port's SS lanes have no
+ * driver and the connector only ever links at 480M (USB2).
+ * combphy2_psu is free here: this board uses pcie2x1l2 (combphy0_ps) for M.2.
+ */
+&combphy2_psu {
+ status = "okay";
+};
+
+&usb_host2_xhci {
+ status = "okay";
+};
+
+&usb_host0_xhci {
+ dr_mode = "host";
+ status = "okay";
+
+ /* USB-C è¿æ¥å¨ç HS/SS 端å£å¾ï¼ç»å®è¦æ± port at 0ï¼ä¸ SS å£åºæ port at 1ï¼ */
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port at 0 {
+ reg = <0>;
+ usb_host0_hs_ep: endpoint {
+ remote-endpoint = <&usbc0_hs>;
+ };
+ };
+
+ port at 1 {
+ reg = <1>;
+ usb_host0_ss_ep: endpoint {
+ remote-endpoint = <&usbc0_ss>;
+ };
+ };
+ };
+};
+
+/ {
+ hdmi0-con {
+ compatible = "hdmi-connector";
+ type = "a";
+
+ port {
+ hdmi0_con_in: endpoint {
+ remote-endpoint = <&hdmi0_out_con>;
+ };
+ };
+ };
+
+ /*
+ * Type-C å£ VBUS 5V ââ åå dtb åæ gpio = <&gpio1 0x1d 0> â gpio1 PD5
+ * ï¼enable-active-highï¼ACTIVE_HIGH 为ç价表达ï¼ã
+ * â ï¸ æ©å
è¯¯åæ PC5ï¼è PC5 æ£æ¯ i2s0_lrckï¼é³é¢ LRCLKï¼ââ稳å卿¢äºé³é¢å¼èï¼
+ * çæ£ç PD5 仿ªè¢«é©±å¨ â VBUS å®é
仿ªæå¼ï¼èªä¾çµè®¾å¤ä»å¯ç¨ï¼æ
é¿ææªæ´é²ï¼ã
+ * 2026-09-26 对ç
§å®æ¹ dtb ä¿®æ£ã
+ */
+ vbus5v0_typec: vbus5v0-typec {
+ compatible = "regulator-fixed";
+ regulator-name = "vbus5v0_typec";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ gpios = <&gpio1 RK_PD5 GPIO_ACTIVE_HIGH>;
+ vin-supply = <&vcc5v0_sys>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&typec5v_pwren>;
+ };
+};
+
+/*
+ * ===== ES8388 é³é¢ï¼2026-09-26 ä»åå BSP ç§»æ¤ï¼=====
+ *
+ * å¼èï¼åå BSP ç i2s0 ç»ä¸ä¸»çº¿ rk3588-base-pinctrl èªå¸¦ç» **1:1 å»å**
+ * mclk=PC2 m1 sclk=PC3 m1 lrck=PC5 m1 sdo0=PC7 m1 sdi0=PD4 m2
+ * i2c1(fea90000)ï¼ååç¨ i2c1m4 = PD2/PD3 mux9
+ * è³æºæ£æµ PC4ãåæ¾ä½¿è½ PC6ï¼åå hp-det-gpio / hp-con-gpioï¼å为 mux0=GPIOï¼
+ *
+ * â ï¸ ååç¨ç§æ rockchip,multicodecs-cardï¼ä¸»çº¿æ æ¤é©±å¨ â æ¹ç¨æ å simple-audio-card
+ * â ï¸ ååç ADC è³æºæ£æµ / play-pause é®ä¸»çº¿ä¸æ¯æï¼çç¥
+ * â ï¸ é©±å¨å·²å
ç½®ï¼CONFIG_SND_SOC_ES8328_I2C=yï¼es8328 驱å¨ç»å® everest,es8388ï¼
+ */
+&i2c1 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c1m4_xfer>;
+ status = "okay";
+
+ es8388: audio-codec at 11 {
+ /* âââ 2026-09-26 å
³é®ä¿®æ£ï¼æ everest,es8323 æ¾å¨**第ä¸ä½**ã
+ * åå ï¼è¯»é©±å¨æºç + æ¿ä¸æ¨¡åå®è¯ï¼ï¼
+ * - 主线 es8328.c æ¯**ç®åç**ï¼888 è¡ï¼ï¼es8323.c æ¯**宿´ç**ï¼791 è¡ï¼
+ * æ set_dai_fmt / set_dai_sysclk / pcm_hw_params + coeff_div ç³»æ°è¡¨ï¼ã
+ * - compatible å表**æé¡ºåºå¹é
**ï¼'everest,es8388' æåé¢ä¼è¢« es8328 æ¢èµ°ï¼
+ * æä»¥å¿
é¡»æ es8323 æå°ç¬¬ä¸ä½æè½è®©å®æ´ç驱å¨ç»å®ã
+ * - æ¿ä¸å·²ç¡®è®¤åå¨è¯¥æ¨¡åï¼/lib/modules/6.18.53-ophub/kernel/sound/soc/codecs/
+ * snd-soc-es8323.koï¼æ¨¡åå«å of:N*T*Ceverest,es8323 â
+ * - åç
§ä¸æ¸¸å codec çæ¿å rk3588-youyeetoo-yy3588.dtsï¼PR #9534ï¼ä¹æ¯åå es8323ã
+ * - 宿¹ 6.1 BSP dtb ç compatible åæ ·æ¯ "everest,es8388","everest,es8323"ã
+ */
+ compatible = "everest,es8323", "everest,es8388";
+ reg = <0x11>;
+ /* â å
³é®ï¼ç» codec çæ¶é奿å¿
é¡»ç¨ _TO_IO åä½ï¼å°å¼èçé£ä¸æ®µï¼ï¼
+ * ç¨ä¸å¸¦åç¼çå
鍿®µä¼å¯¼è´ i2s0_8ch_mclkout_to_io ä¿æ deviceless/æªä½¿è½
+ * â MCLK å°ä¸äº codec å¼è â å¯åå¨/DAPM/é³éå
¨å¯¹ä½å®å
¨æ 声ã
+ * 对é½ä¸»çº¿å codec æ¿ rk3588-youyeetoo-yy3588.dts çåæ³ï¼
+ * assigned-clocks ç¨å
鍿®µè®¾é¢çï¼clocks ç¨ _TO_IO 段驱å¨å¼èã
+ */
+ clocks = <&cru I2S0_8CH_MCLKOUT_TO_IO>;
+ /* âââ 2026-09-26 å
³é®ä¿®æ£ï¼**å¿
é¡»æ clock-names**ã
+ * 宿´çé©±å¨ es8323.c:618 ç¨çæ¯æåååæ¶éï¼
+ * es8323->mclk = devm_clk_get_optional(component->dev, "mclk");
+ * 没æ clock-names æ¶å®æ¿å° NULL â åé¢ hw_params é
+ * coeff = get_coeff(es8323->sysclk, rate)
+ * æ¥ç³»æ°è¡¨æ¿ä¸å°æ£ç¡®ç MCLK/LRCK åé¢ â codec æ¶å°é误æ¶é â æ 声ã
+ * 宿¹ 6.1 BSP dtb ç codec èç¹åæ ·å¸¦ clock-names = "mclk"ï¼è¿æ¯ä¸¤ä¾§ä¸è´çå
³é®é¡¹ã
+ */
+ clock-names = "mclk";
+ assigned-clocks = <&cru I2S0_8CH_MCLKOUT>;
+ assigned-clock-rates = <12288000>;
+ AVDD-supply = <&vcc_3v3_s0>;
+ DVDD-supply = <&vcc_1v8_s0>;
+ HPVDD-supply = <&vcc_3v3_s0>;
+ PVDD-supply = <&vcc_3v3_s0>;
+ #sound-dai-cells = <0>;
+ };
+
+ /*
+ * â æå头ï¼CAM3 å£ï¼D-PHY0 è·¯å¾ï¼
+ *
+ * ã为ä»ä¹æ¯ CAM3ã主线 6.18 ç rk3588-base.dtsi éï¼ä¸¤ä¸ª CSI host ç¡¬ç» D-PHYï¼
+ * csi2 at fdd30000 phys = <&csi_dphy0>
+ * csi4 at fdd50000 phys = <&csi_dphy1>
+ * è两个 DC-PHY åªç»ç»äº DSIï¼
+ * dsi0 at fde20000 phys = <&mipidcphy0 PHY_TYPE_DPHY>
+ * dsi1 at fde30000 phys = <&mipidcphy1 PHY_TYPE_DPHY>
+ * â 主线**没æ** DC-PHYâCSI éè·¯ï¼å
¨æ 0 å
ä¾ï¼ä¸»çº¿äº¦æ ä»»ä½ DC-PHY æ¥ sensor çæ¿åï¼
+ * â èµ° DC-PHY ç CAM1/CAM2 å£å¨ 6.18 ä¸ä¸å¯ç¨ï¼æ¬æ¿ä¸å£éåªæ CAM3 èµ° D-PHY0ã
+ *
+ * ãæ¥çº¿ãåå 6.1 dtb 宿µï¼GPIO 为线æ§ç¼å·ï¼pin8=PB0ï¼ï¼
+ * CAM3 = i2c1(fea90000)ãreset = gpio1 PB4(ACTIVE_LOW)ãpower = gpio1 PB5(ACTIVE_HIGH)ã
+ * MCLK pinctrl = mipim0_camera3_clkãDPHY = csi2_dphy0
+ * ãä¸»çº¿åæ³å¯¹é½ã宿¹å sensor overlayï¼
+ * rk3588-rock-5b-plus-radxa-cam4k-cam0.dtsoï¼IMX415 + csi_dphy0 + csi2 + vicapï¼
+ * ââ 该 overlay ç MCLK 乿£å¥½æ¯ CLK_MIPI_CAMARAOUT_M3ï¼ä¸æ¬å£ä¸è´ã
+ */
+ imx415: camera-sensor at 1a {
+ compatible = "sony,imx415";
+ reg = <0x1a>;
+ clocks = <&cru CLK_MIPI_CAMARAOUT_M3>;
+ assigned-clocks = <&cru CLK_MIPI_CAMARAOUT_M3>;
+ assigned-clock-rates = <37125000>;
+ avdd-supply = <&cam_pwr>;
+ dvdd-supply = <&cam_pwr>;
+ ovdd-supply = <&cam_pwr>;
+ reset-gpios = <&gpio1 RK_PB4 GPIO_ACTIVE_LOW>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&mipim0_camera3_clk>;
+
+ port {
+ imx415_out: endpoint {
+ data-lanes = <1 2 3 4>;
+ link-frequencies = /bits/ 64 <445500000>;
+ remote-endpoint = <&csi2_input>;
+ };
+ };
+ };
+};
+
+&i2s0_8ch {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2s0_lrck &i2s0_mclk &i2s0_sclk &i2s0_sdi0 &i2s0_sdo0>;
+ status = "okay";
+};
+
+&pinctrl {
+ headphone {
+ hp_det: hp-det {
+ rockchip,pins = <1 RK_PC4 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+
+ hp_con: hp-con {
+ rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
+};
+
+/ {
+ analog_sound: analog-sound {
+ compatible = "simple-audio-card";
+ pinctrl-names = "default";
+ pinctrl-0 = <&hp_det &hp_con>;
+ simple-audio-card,name = "QuarkPi-CA2 ES8388";
+ simple-audio-card,format = "i2s";
+ simple-audio-card,bitclock-master = <&sound_cpu>;
+ simple-audio-card,frame-master = <&sound_cpu>;
+ simple-audio-card,mclk-fs = <256>;
+ simple-audio-card,aux-devs = <&hp_amp>;
+ /* åå <0x13d 0x14 0x00>ï¼flags=0 â ACTIVE_HIGHï¼æ¿è½½æ£æµçµè·¯ä¸ºæ£é»è¾ï¼ã
+ * â ï¸ æ©å
ç
§æ roc-pc åæ ACTIVE_LOW â æçè³æºä¹è¢«å¤å®ä¸º"æªæ" â
+ * pin-switches æå¼ â å®å
¨æ 声ã宿µ gpio-20 读 hiï¼æ HIGH ææå³"å·²æ"ã
+ */
+ simple-audio-card,hp-det-gpios = <&gpio1 RK_PC4 GPIO_ACTIVE_HIGH>;
+ /*
+ * â ï¸ å
³é®ï¼å¡ç级æ§ä»¶å¿
é¡»å
å¨è¿é声æï¼å¦å routing éçååä¸åå¨
+ * ï¼roc-pc åæ³ï¼ç¬¬ä¸é¡¹æ¯æ§ä»¶ç±»å Headphone/Microphoneï¼ç¬¬äºé¡¹æ¯æ§ä»¶åï¼
+ */
+ simple-audio-card,pin-switches = "Headphones";
+ simple-audio-card,widgets =
+ "Headphone", "Headphones",
+ "Microphone", "Headset Mic",
+ "Microphone", "Main Mic";
+ simple-audio-card,routing =
+ /* â åå BSP è·¯ç±éæãç´è¿ã两è¡ï¼"Headphone","LOUT1" / "Headphone","ROUT1"ã
+ * è¡¥ä¸å®ä»¬ï¼å³ä½¿åæ¾/忢å¼å
³æé®é¢ï¼è³æºå£ä¹è½ä» LOUT1/ROUT1 æ¿å°ä¿¡å·ã
+ */
+ "Headphones", "LOUT1",
+ "Headphones", "ROUT1",
+ /* åå "Headphone Power" ééï¼DAPM éå
¶ä¸çµï¼ */
+ "Headphones", "Headphone Power OUTL",
+ "Headphones", "Headphone Power OUTR",
+ "Headphone Power INL", "LOUT1",
+ "Headphone Power INR", "ROUT1",
+ /* å
åºï¼LOUT2/ROUT2 ä¸å¹¶æ¥å
¥ï¼å®æ¹åèæ¿ Speaker èµ°è¿å¯¹è¾åºï¼
+ * æ¬æ¿æ ååï¼è¥è³æºåº§å®é
æ¥å¨ 2 è·¯åé è¿ä¸¤è¡æåï¼ */
+ "Headphone Power INL", "LOUT2",
+ "Headphone Power INR", "ROUT2",
+ "LINPUT1", "Headset Mic",
+ "LINPUT2", "Main Mic",
+ "RINPUT1", "Headset Mic",
+ "RINPUT2", "Main Mic";
+
+ sound_cpu: simple-audio-card,cpu {
+ sound-dai = <&i2s0_8ch>;
+ };
+
+ sound_codec: simple-audio-card,codec {
+ sound-dai = <&es8388>;
+ system-clock-frequency = <12288000>;
+ };
+ };
+
+ /* è³æºåæ¾ä½¿è½ï¼åå hp-con-gpio = gpio1 PC6ï¼ */
+ hp_amp: audio-amplifier-hp {
+ compatible = "simple-audio-amplifier";
+ /* â ä¸åå BSP ç "Headphone Power" æ§ä»¶ååï¼åæ¾å¿
须串å
¥ DAPM è·¯ç±æä¼è¢«ä¸çµï¼
+ * ä»
æ aux-devs ä¸å¤ï¼å®æµ aux-devs ä¸ amp ç INL/OUTL 仿ªéçµ â æåº§æ ä¿¡å·ï¼ã
+ */
+ sound-name-prefix = "Headphone Power";
+ /* â 宿¹ææ¡£ï¼æè³æºèªå¨åå°è³æºãåå忢 â hp-con æ¯"è³æºéè·¯å¼å
³"ã
+ * åå dtb flags=0 å¨ç§æ multicodecs 驱å¨éè¯ä¹å¯è½ç¸åï¼éæ å enable-gpiosï¼ã
+ * è¥ä¸º ACTIVE_HIGH æ¶åæ¾/é路被å
³ï¼å°±ä¼åºç°"DAPM å
¨ On å´å®å
¨æ 声"ã
+ */
+ /* â 宿¹ææ¡£ï¼æè³æºèªå¨åå°è³æºãåå忢 â hp-con æ¯"è³æº/ååéè·¯éæ©"å¼å
³ã
+ * â ï¸ 2026-09-26 宿µä¿®æ£ï¼åå BSP 为 hp-con-gpio = <&gpio1 22 0>ï¼flags=0 â **ACTIVE_HIGH**ã
+ * æ¤åç
§æ roc-pc åæ ACTIVE_LOW æ¯éçï¼ææ¾æ¶ DAPM å¤å®"使è½"伿å¼èæä½ï¼
+ * æååå®ä¹"ä½=å
³é" â é³é¢è¢«åå°åæ¾/ååä¾§ï¼è³æºå£å®å
¨æ 声
+ * ï¼å®æµ /sys/kernel/debug/gpio: ææ¾æ¶ gpio-22 = out lo ACTIVE LOWï¼ã
+ */
+ enable-gpios = <&gpio1 RK_PC6 GPIO_ACTIVE_HIGH>;
+ };
+};
+
+/*
+ * æå头模åä¾çµï¼gpio1 PB5 æ§å¶çåºå®ç¨³åå¨ï¼æ¨¡åèªå¸¦ LDOï¼æ
ä¸è·¯ supply å
±ç¨è¿ä¸è·¯ 3.3Vï¼
+ *
+ * â ï¸ å¿
é¡»æå¨æ ¹èç¹ä¸ï¼**ä¸è½**å¡è¿ i2c æ»çº¿é ââ i2c åèç¹é½è¦æ± reg 屿§ï¼
+ * å¦å dtc æ¥ "missing or empty reg property"ï¼å®æµè¸©è¿ï¼ã
+ * 宿¹ overlay rk3588-rock-5b-plus-radxa-cam4k-cam0.dtso æ£æ¯æ regulator æå¨ &{/} ä¸ã
+ */
+&{/} {
+ cam_pwr: regulator-cam-pwren {
+ compatible = "regulator-fixed";
+ regulator-name = "cam_pwr";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+ gpio = <&gpio1 RK_PB5 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+ vin-supply = <&vcc_3v3_s3>;
+ };
+};
+
+/*
+ * æå头é¾è·¯ï¼sensor â csi_dphy0(D-PHY0) â csi2(host) â vicap
+ *
+ * è¿æ¡é¾å¨ä¸»çº¿ rk3588-base.dtsi éèç¹/端å£é½æ¯ç°æçï¼åªéæå¼ + è¡¥ä¸¤æ¡ endpointï¼
+ * csi2 ç port at 0 = csi2_inï¼sensor ä¾§è¾å
¥ï¼ï¼port at 1 = csi2_out â vicap_mipi2_input
+ * ç»æå®å
¨å¯¹é½å®æ¹ overlay rk3588-rock-5b-plus-radxa-cam4k-cam0.dtsoã
+ *
+ * å
æ ¸ä¾§å·²å°±ä½ï¼æ¬æ¿ 6.18.53-ophub 宿µï¼ï¼
+ * PHY_ROCKCHIP_INNO_CSIDPHY=yï¼å
å»ºï¼æ¯æ rockchip,rk3588-csi-dphyï¼ã
+ * VIDEO_ROCKCHIP_CIF=mãVIDEO_DW_MIPI_CSI2RX=mãVIDEO_IMX415=m
+ */
+&csi_dphy0 {
+ status = "okay";
+};
+
+&csi2 {
+ status = "okay";
+};
+
+&csi2_in {
+ csi2_input: endpoint {
+ bus-type = <MEDIA_BUS_TYPE_CSI2_DPHY>;
+ data-lanes = <1 2 3 4>;
+ link-frequencies = /bits/ 64 <445500000>;
+ remote-endpoint = <&imx415_out>;
+ };
+};
+
+&vicap {
+ status = "okay";
+};
+
+&vicap_mmu {
+ status = "okay";
+};
+
+/* ==========================================================================
+ * 40pin æéï¼J11ï¼å¾çº¸è§æ RPI40pin å
¼å®¹ï¼ç**å¤ç¨åè½è** ââ 2026-09-26
+ *
+ * è¿äºæ§å¶å¨å¨ rk3588-base.dtsi éé»è®¤ disabledï¼æ¬æ¿æ¤å仿ªå¯ç¨ â
+ * æéä¸è¿å æ ¹èä¸ç´åªè½å½ GPIO ç¨ãå¾çº¸ä¸ç½åèªå¸¦ mux åç¼ï¼_M1/_M2/_M3ï¼ï¼
+ * ç´æ¥é对åºä¸»çº¿ mux ç»å³å¯ãç»åä¸å¼è已鿡坹 rk3588-base-pinctrl.dtsi æ ¸åï¼
+ * I2C3_M1 : gpio3-15(SCL) / gpio3-16(SDA) â æé pin5 / pin3
+ * I2C5_M2 : gpio4-6(SCL) / gpio4-7(SDA) â æé pin28/ pin27
+ * UART5_M1: gpio3-20(TX) / gpio3-21(RX) â æé pin8 / pin10
+ * SPI0_M3 : gpio3-27(CLK)/gpio3-25(MISO)/gpio3-26(MOSI)
+ * gpio3-28(CS0)/gpio3-29(CS1) â æé pin23/21/19/24/26
+ * â ï¸ å¼ç¨ç»åæ¶å¡å¿
确认æä»¶æ¯ rk3588-*-pinctrl.dtsi ââ
+ * éé
grep ä¼å½ä¸ rk3528/rk3576 çååç»ï¼è¸©è¿ï¼å¼èå®å
¨ä¸åï¼ã
+ * ========================================================================== */
+&i2c3 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&i2c3m1_xfer>;
+ status = "okay";
+};
+
+/* â ï¸ è¿é忬æä¸æ¡ &i2c5ï¼i2c5m2_xfer ç» = gpio4-6/7ï¼ï¼**å·²å é¤**ï¼2026-09-26ï¼ï¼
+ * â åå 6.1 æ é i2c at fead0000(i2c5) æ¯ status="disabled"ï¼ä»æªå¯ç¨ï¼
+ * â¡ è gpio4-6 / gpio4-7 å¨å䏿£µååæ éæ¯ usbdp_phy0 ç
+ * sbu1-dc-gpios / sbu2-dc-gpiosï¼SBU ç´æµå¼å
³æ§å¶èï¼DP alt mode ç¨ï¼â ç©çå²çªï¼
+ * ⢠åçå¾ J11 å¼è表é pin27/pin28 ç½åæ¯ SDA0/SCL0ï¼I2C0ï¼ï¼ä¹ä¸æ¯ i2c5m2ã
+ * â æè®ï¼æéå¤ç¨åè½çå¼èä¸è¦ååç徿 æ³¨æ¨æï¼ä»¥å®æµä¸ºåã
+ */
+
+&uart5 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&uart5m1_xfer>;
+ status = "okay";
+};
+
+&spi0 {
+ pinctrl-names = "default";
+ pinctrl-0 = <&spi0m3_pins>, <&spi0m3_cs0>, <&spi0m3_cs1>;
+ num-cs = <2>;
+ status = "okay";
+
+};
+
+/* ==========================================================================
+ * RGA3 2D å é ââ rk3588-base.dtsi:1265/1287 å·²æ rga at fdb60000 / rga at fdb70000
+ * ï¼compatible = "rockchip,rk3588-rga3"ï¼ï¼å
æ ¸ CONFIG_VIDEO_ROCKCHIP_RGA=m å·²å¨ï¼
+ * åªå·®æ status æå¼ãæ¤å /dev/rga* ä¸åå¨ â ç°å¨è¡¥ä¸ã
+ * ========================================================================== */
+&rga3_core0 {
+ status = "okay";
+};
+
+&rga3_core1 {
+ status = "okay";
+};
+
+/* ==========================================================================
+ * IR çº¢å¤æ¥æ¶ ââ 2026-09-26
+ *
+ * 硬件é¾è·¯ï¼æ¿è½½çº¢å¤æ¶å¤´è¾åº â ç½ç» PWM_IR â SoC **GPIO0_D4ï¼= gpio0-28ï¼**ï¼
+ * åå BSP æå®å½ PWM3_M0 ç¨ï¼ä¸»çº¿çå¼èç»æ³¨éå°±å« `pwm3_ir_m0`ï¼ã
+ *
+ * 为ä»ä¹èµ° GPIO 路线ï¼ä¸»çº¿ drivers/media/rc/ é **åªæ pwm-ir-txï¼åå°ï¼**ï¼
+ * 没æ PWM 红å¤"æ¥æ¶"驱å¨ï¼`rockchip,remotectl-pwm` æ¯ BSP ç§æ â
+ * ç´æ¥ç¨ä¸»çº¿ç gpio-ir-recvï¼æè¯¥è彿®é GPIO è¾å
¥ï¼é©±å¨éèå²å®½åº¦ï¼
+ * ç± rc-core 软件解 NECã
+ *
+ * å
æ ¸ä¾§**å·²å°±ç»ªï¼æ é任使¹å¨**ï¼æ¿ä¸ 6.18.53-ophub 宿µï¼ï¼
+ * CONFIG_IR_GPIO_CIR=m ââ æ¨¡å /lib/modules/6.18.53-ophub/kernel/drivers/media/rc/gpio-ir-recv.ko åå¨
+ * CONFIG_IR_NEC_DECODER=mãCONFIG_RC_CORE=yãCONFIG_RC_MAP=y åå¨
+ * â ï¸ Kconfig ç¬¦å·æ¯ **IR_GPIO_CIR**ãææåæ IR_GPIO_C_RECV 廿¥ â 误å¤"æªç¼"ã
+ * è¿å·®ç¹å»ç¼å
æ ¸æ¨¡å ââ è®°ç¢è¿ä¸ªç¬¦å·åã
+ * 驱å¨èªå¸¦ of_device_idï¼compatible = "gpio-ir-receiver"ï¼â ææ¬èç¹å³ç± udev
+ * èªå¨å è½½ï¼å¿
è¦æ¶æå·¥ `modprobe gpio-ir-recv`ã
+ * 饿§å¨é®è¡¨ç¨ç¨æ·æå è½½ï¼/etc/rc_keymaps + ir-keytableï¼åå表ï¼usercode 0xFF00ï¼20 é®ï¼ï¼
+ * æ
è¿éä¸å linux,rc-map-nameã
+ * ========================================================================== */
+&pinctrl {
+ /* â ï¸ å¿
é¡»åæãfunction èç¹ â group èç¹ãä¸¤çº§ç»æï¼
+ * rockchip_pinctrl_parse_dt() åªå¯¹ pinctrl çæ¯ä¸ªåèç¹è° parse_functions()ï¼
+ * åç±å®éå该åèç¹çåèç¹å½ groupï¼è§ pinctrl-rockchip.c:4440ï¼ã
+ * ç´æ¥æç»"æå¹³"åå¨ &pinctrl ä¸é¢ â of_get_child_count()=0 â ç»ä¸æ³¨åï¼
+ * 设å¤è¯·æ±æ¶å
æ ¸æ¥ "unable to find group for node xxx"ï¼2026-09-26 宿µè¸©åï¼ã
+ * æ¬æä»¶é leds / usb-typec / sdmmc / headphone çç»ç忳齿¯è¿ä¸ªä¸¤çº§å½¢å¼ã */
+ ir {
+ ir_receiver_pin: ir-receiver-pin {
+ /* gpio0-28 = GPIO0_D4ï¼åè½é GPIO(0)ï¼ä¸æï¼æ¶å¤´è¾åºå¤ä¸ºå¼æ¼ï¼ */
+ rockchip,pins = <0 RK_PD4 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+ };
+};
+
+/* ââ MIPI DSI0 / DSI1ï¼2 è·¯ï¼ââ 2026-09-26 宿µå**å³å®ä¸å¯ç¨** ââ
+ * æ¾æãç´æ¥ç§»æ¤ãæ &dsi0/&dsi1/&mipidcphy0/&mipidcphy1 å
¨é¨è®¾ä¸º okayï¼éå¯åï¼
+ * â
å个èç¹ç¶æç¡®å®å okayï¼rockchip,rk3588-mipi-dsi2 / mipi-dcphyï¼
+ * â **HDMI å½åºææ**ï¼/sys/class/drm/ é HDMI è¿æ¥å¨æ° 1â0ï¼å£°å¡ 2 å¼ â1 å¼ ï¼
+ * dmesg: "platform hdmi0-sound: deferred probe pending: asoc-simple-card: parse error"
+ * â RK3588S ç VOP2 è§é¢ç«¯å£(VP)被 DSI å èµ°ï¼HDMI0 失å»è¾åºã
+ * â æ¿ä¸æ²¡å±æ¶**ä¸è¦å¼ DSI**ï¼æ¢éªä¸äºåå¼åå·²éªè¯å¥½ç HDMIï¼ãçç¤¾åºæäººå¸¦å±æ¶ï¼
+ * åè¿å panel/bridge èç¹ä¸èµ·å ï¼å¹¶æ¥å HDMI è®©ä½ææ¹ VP åé
ã
+ */
+
+&{/} {
+ ir_receiver: ir-receiver {
+ compatible = "gpio-ir-receiver";
+ /* â ææ§å¿
é¡»æ¯ ACTIVE_LOWï¼çº¢å¤æ¶å¤´ç©ºé²è¾åºé«ãæ¶å°è½½æ³¢æ¶æä½ï¼
+ * è rc-core è¦çæ¯"ææçµå¹³ = èå²"ã主线ä¸ä¸ª gpio-ir-receiver
+ * æ¿çº§ç¤ºä¾ï¼rk3568-rock-3b / rk3328-roc-pc / rk3566-box-demoï¼
+ * ç¨çå
¨æ¯ GPIO_ACTIVE_LOWã */
+ gpios = <&gpio0 RK_PD4 GPIO_ACTIVE_LOW>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&ir_receiver_pin>;
+ };
+};
+
+/* ==========================================================================
+ * DP è¾åºï¼Type-C0 ç DP alt modeï¼ââ 2026-09-26 æç¨æ·è¦æ±è¯ä¸æ¬¡
+ *
+ * 便®ï¼å
¨é¨æ¥èªåå 6.1 æ + 主线å SoC åç
§æ¿ï¼ä¸æ¯æççï¼ï¼
+ * â ååæ dp at fde50000 = status "okay"ï¼phys = <&usbdp_phy0 ç dp-port>ï¼
+ * â¡ ååæ usbdp_phy0ï¼dp-port = okayãsbu1-dc-gpios = gpio4-6ãsbu2-dc-gpios = gpio4-7ï¼
+ * ⢠DP çè§é¢ç«¯å£ç¨ **vp1**ï¼ååæ vp1_out_dp0 = /vop/ports/port at 1/endpoint at 0ï¼
+ * ä¸ä¸»çº¿åç
§æ¿ rk3588s-indiedroid-nova åæ ·æ¯ vp1 â dp0ï¼â ä¸ HDMI0 ç¨ç vp0 ä¸å²çªã
+ * ⣠主线å
æ ¸é
ç½®é½å¤ï¼ROCKCHIP_DW_DP=y / PHY_ROCKCHIP_USBDP=y / TYPEC=y / TYPEC_TCPCI=yã
+ *
+ * â ï¸ è¥æ¤æ®µå¯¼è´ HDMI/é³é¢/USB å¼å¸¸ï¼ç´æ¥è¿å /root/qpi-dtb-backup/ éç dtb å³å¯ã
+ * ========================================================================== */
+
+&dp0 {
+ status = "okay";
+};
+
+&dp0_in {
+ dp0_in_vp1: endpoint {
+ remote-endpoint = <&vp1_out_dp0>;
+ };
+};
+
+&dp0_out {
+ dp0_out_con: endpoint {
+ remote-endpoint = <&usbdp_phy0_dp_in>;
+ };
+};
+
+&vp1 {
+ vp1_out_dp0: endpoint at a {
+ reg = <ROCKCHIP_VOP2_EP_DP0>;
+ remote-endpoint = <&dp0_in_vp1>;
+ };
+};
+
+&usbdp_phy0 {
+ orientation-switch;
+ mode-switch;
+ /* ååæ å®æµå¼ï¼SBU1/SBU2 ç´æµå¼å
³æ§å¶è = GPIO4_A6 / GPIO4_A7 */
+ sbu1-dc-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;
+ sbu2-dc-gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;
+ rockchip,dp-lane-mux = <2 3>;
+ status = "okay";
+
+ port {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ usbdp_phy0_dp_in: endpoint at 2 {
+ reg = <2>;
+ remote-endpoint = <&dp0_out_con>;
+ };
+
+ usbdp_phy0_dp_out: endpoint at 3 {
+ reg = <3>;
+ remote-endpoint = <&usbc0_sbu>;
+ };
+ };
+};
--
2.43.0
More information about the Linux-rockchip
mailing list