[PATCH 2/2] arm64: dts: rockchip: Add LCKFB Taishan Pi 3M

Alexey Charkov alchark at gmail.com
Thu May 7 07:56:30 PDT 2026


On Thu, May 7, 2026 at 5:28 PM Liu Changjie <liucj1228 at outlook.com> wrote:
>
> Add the device tree for LCKFB Taishan Pi 3M, a board based on
> the Rockchip RK3576 SoC.

Hi Liu Changjie,

Is the below link the correct source for the schematic for this board?
It would be helpful to add in the commit description. I'm assuming
that it is for the purposes of the comments below.

Link: https://oshwhub.com/li-chuang-kai-fa-ban/project_gzzvrwqn

> Signed-off-by: Liu Changjie <liucj1228 at outlook.com>
> ---
>  arch/arm64/boot/dts/rockchip/Makefile         |   1 +
>  .../dts/rockchip/rk3576-lckfb-tspi-3m.dts     | 711 ++++++++++++++++++
>  2 files changed, 712 insertions(+)
>  create mode 100644 arch/arm64/boot/dts/rockchip/rk3576-lckfb-tspi-3m.dts
>
> diff --git a/arch/arm64/boot/dts/rockchip/Makefile b/arch/arm64/boot/dts/rockchip/Makefile
> index cb55c6b70d0e..dedadc22d15a 100644
> --- a/arch/arm64/boot/dts/rockchip/Makefile
> +++ b/arch/arm64/boot/dts/rockchip/Makefile
> @@ -171,6 +171,7 @@ dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-evb1-v10.dtb
>  dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-evb1-v10-pcie1.dtbo
>  dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-evb2-v10.dtb
>  dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-khadas-edge-2l.dtb
> +dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-lckfb-tspi-3m.dtb
>  dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-luckfox-omni3576.dtb
>  dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-nanopi-m5.dtb
>  dtb-$(CONFIG_ARCH_ROCKCHIP) += rk3576-nanopi-r76s.dtb
> diff --git a/arch/arm64/boot/dts/rockchip/rk3576-lckfb-tspi-3m.dts b/arch/arm64/boot/dts/rockchip/rk3576-lckfb-tspi-3m.dts
> new file mode 100644
> index 000000000000..2eaa6969b33f
> --- /dev/null
> +++ b/arch/arm64/boot/dts/rockchip/rk3576-lckfb-tspi-3m.dts
> @@ -0,0 +1,711 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Copyright (c) 2026 LCKFB
> + */
> +
> +/dts-v1/;
> +
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/interrupt-controller/irq.h>
> +#include <dt-bindings/leds/common.h>
> +#include <dt-bindings/pinctrl/rockchip.h>
> +#include <dt-bindings/soc/rockchip,vop2.h>
> +#include <dt-bindings/usb/pd.h>
> +#include "rk3576.dtsi"
> +
> +/ {
> +       model = "LCKFB TaishanPi 3M";
> +       compatible = "lckfb,tspi-3m-rk3576", "rockchip,rk3576";
> +
> +       aliases {
> +               mmc0 = &sdhci;
> +               mmc1 = &sdmmc;
> +               mmc2 = &sdio;
> +       };
> +
> +       chosen {
> +               stdout-path = "serial0:1500000n8";
> +       };

What about adc-keys for SARADC channel 1 serving the RECOVERY key?

> +       hdmi-con {
> +               compatible = "hdmi-connector";
> +               hdmi-pwr-supply = <&vcc5v0_hdmi>;

I'm pretty sure that this is not the power supply, but rather the
driving pin for the FRL mode level shifter. Please refer to the recent
patch series [1] by Cristian.

[1] https://lore.kernel.org/linux-rockchip/177800595582.3294944.15259294512505640833.b4-ty@sntech.de/T/#m8c2aca86588ae1e32506c4b6302bb6232c5cd14e

> +               type = "a";
> +
> +               port {
> +                       hdmi_con_in: endpoint {
> +                               remote-endpoint = <&hdmi_out_con>;
> +                       };
> +               };
> +       };
> +
> +       leds {
> +               compatible = "gpio-leds";
> +
> +               led-0 {
> +                       color = <LED_COLOR_ID_GREEN>;
> +                       function = LED_FUNCTION_HEARTBEAT;
> +                       gpios = <&gpio0 RK_PA0 GPIO_ACTIVE_LOW>;
> +                       linux,default-trigger = "heartbeat";
> +               };
> +       };
> +
> +       vcc5v_dcin: regulator-vcc5v-dcin {
> +               compatible = "regulator-fixed";
> +               regulator-name = "vcc5v_dcin";
> +               regulator-always-on;
> +               regulator-boot-on;
> +               regulator-min-microvolt = <5000000>;
> +               regulator-max-microvolt = <5000000>;
> +       };
> +
> +       vcc_sys: regulator-vcc5v0-sys {
> +               compatible = "regulator-fixed";
> +               regulator-name = "vcc_sys";
> +               regulator-always-on;
> +               regulator-boot-on;
> +               regulator-min-microvolt = <5000000>;
> +               regulator-max-microvolt = <5000000>;
> +               vin-supply = <&vcc5v_dcin>;
> +       };
> +
> +       vcc_1v1_nldo_s3: regulator-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 = <&vcc_sys>;
> +       };
> +
> +       vcc_2v0_pldo_s3: regulator-vcc-2v0-pldo-s3 {
> +               compatible = "regulator-fixed";
> +               regulator-name = "vcc_2v0_pldo_s3";
> +               regulator-always-on;
> +               regulator-boot-on;
> +               regulator-min-microvolt = <2000000>;
> +               regulator-max-microvolt = <2000000>;
> +               vin-supply = <&vcc_sys>;
> +       };
> +
> +       vcc_3v3_sdcard: regulator-vcc-3v3-sdcard {
> +               compatible = "regulator-fixed";
> +               regulator-name = "vcc_3v3_sdcard";
> +               regulator-always-on;
> +               regulator-boot-on;
> +               regulator-min-microvolt = <3300000>;
> +               regulator-max-microvolt = <3300000>;
> +               vin-supply = <&vcc_3v3_s3>;

>From the schematic, the SD card is powered directly from VCC_3V3_S0.
No need to define a separate regulator, and please make sure you refer
to the right supply (*S0 is a different line from *S3 with a separate
load switch - although they are still enabled together as the EN pin
of the load switch is hard wired to its VIN)

> +       };
> +
> +       vcc5v0_typec_vbus: regulator-vcc5v0-typec-vbus {
> +               compatible = "regulator-fixed";
> +               regulator-name = "vcc5v0_typec_vbus";
> +               regulator-min-microvolt = <5000000>;
> +               regulator-max-microvolt = <5000000>;
> +               enable-active-high;
> +               gpio = <&gpio0 RK_PB6 GPIO_ACTIVE_HIGH>;
> +               vin-supply = <&vcc_sys>;
> +               pinctrl-names = "default";
> +               pinctrl-0 = <&typec_vbus_en>;
> +       };
> +
> +       vcc5v0_hdmi: regulator-vcc5v0-hdmi {
> +               compatible = "regulator-fixed";
> +               regulator-name = "vcc5v0_hdmi";
> +               regulator-min-microvolt = <5000000>;
> +               regulator-max-microvolt = <5000000>;
> +               enable-active-high;
> +               gpio = <&gpio4 RK_PC6 GPIO_ACTIVE_HIGH>;

This line goes to the FRL level shifter, so it shouldn't be modeled as
a regulator

> +               vin-supply = <&vcc_sys>;
> +               pinctrl-names = "default";
> +               pinctrl-0 = <&hdmi_con_en>;
> +       };
> +
> +       vcc5v0_usb20_host: regulator-vcc5v0-usb20-host {
> +               compatible = "regulator-fixed";
> +               regulator-name = "vcc5v0_usb20_host";
> +               regulator-always-on;
> +               regulator-boot-on;

Do they have to be always-on, boot-on? You can define a Type-A
connector node and list this regulator as its VBUS supply.

> +               regulator-min-microvolt = <5000000>;
> +               regulator-max-microvolt = <5000000>;
> +               enable-active-high;
> +               gpio = <&gpio2 RK_PB5 GPIO_ACTIVE_HIGH>;
> +               vin-supply = <&vcc_sys>;
> +               pinctrl-names = "default";
> +               pinctrl-0 = <&usb20_host_pwr_en>;
> +       };
> +
> +       vcc5v0_usb30_host: regulator-vcc5v0-usb30-host {
> +               compatible = "regulator-fixed";
> +               regulator-name = "vcc5v0_usb30_host";
> +               regulator-always-on;
> +               regulator-boot-on;

Ditto here.

> +               regulator-min-microvolt = <5000000>;
> +               regulator-max-microvolt = <5000000>;
> +               enable-active-high;
> +               gpio = <&gpio0 RK_PC3 GPIO_ACTIVE_HIGH>;
> +               vin-supply = <&vcc_sys>;
> +               pinctrl-names = "default";
> +               pinctrl-0 = <&usb30_host_pwr_en>;
> +       };
> +
> +       sdio_pwrseq: sdio-pwrseq {
> +               compatible = "mmc-pwrseq-simple";
> +               pinctrl-names = "default";
> +               pinctrl-0 = <&wifi_poweren_gpio>;
> +               post-power-on-delay-ms = <200>;
> +               reset-gpios = <&gpio1 RK_PC6 GPIO_ACTIVE_LOW>;

What about the 32 kHz clock? See also below under I2C2 - you'll need
an RTC node which is in fact easy to add.

> +       };
> +};
> +
> +&combphy1_psu {
> +       status = "okay";
> +};
> +
> +&cpu_b0 {
> +       cpu-supply = <&vdd_cpu_big_s0>;
> +};
> +
> +&cpu_b1 {
> +       cpu-supply = <&vdd_cpu_big_s0>;
> +};
> +
> +&cpu_b2 {
> +       cpu-supply = <&vdd_cpu_big_s0>;
> +};
> +
> +&cpu_b3 {
> +       cpu-supply = <&vdd_cpu_big_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>;
> +};

Don't you want to add &gmac0? And wire it up to the MAE0621A-Q3C RGMII
PHY (you'll probably have to rely on the generic PHY driver). You'll
probably also need to configure the GMAC for RGMII clock input from
the PHY, which is unlike other RK3576 boards but there are other
Rockchip-based examples upstream.

> +&hdmi {
> +       status = "okay";
> +};
> +
> +&hdmi_in {
> +       hdmi_in_vp0: endpoint {
> +               remote-endpoint = <&vp0_out_hdmi>;
> +       };
> +};
> +
> +&hdmi_out {
> +       hdmi_out_con: endpoint {
> +               remote-endpoint = <&hdmi_con_in>;
> +       };
> +};

What about &hdmi_sound? And &sai6 for it to work.

> +&hdptxphy {
> +       status = "okay";
> +};
> +
> +&i2c1 {
> +       status = "okay";
> +
> +       pmic at 23 {
> +               compatible = "rockchip,rk806";
> +               reg = <0x23>;
> +               #gpio-cells = <2>;
> +               gpio-controller;
> +               interrupt-parent = <&gpio0>;
> +               interrupts = <6 IRQ_TYPE_LEVEL_LOW>;
> +               pinctrl-names = "default";
> +               pinctrl-0 = <&pmic_pins
> +                            &rk806_dvs1_null
> +                            &rk806_dvs2_null
> +                            &rk806_dvs3_null>;
> +               system-power-controller;
> +               vcc1-supply = <&vcc_sys>;
> +               vcc2-supply = <&vcc_sys>;
> +               vcc3-supply = <&vcc_sys>;
> +               vcc4-supply = <&vcc_sys>;
> +               vcc5-supply = <&vcc_sys>;
> +               vcc6-supply = <&vcc_sys>;
> +               vcc7-supply = <&vcc_sys>;
> +               vcc8-supply = <&vcc_sys>;
> +               vcc9-supply = <&vcc_sys>;
> +               vcc10-supply = <&vcc_sys>;
> +               vcc11-supply = <&vcc_2v0_pldo_s3>;
> +               vcc12-supply = <&vcc_sys>;
> +               vcc13-supply = <&vcc_1v1_nldo_s3>;
> +               vcc14-supply = <&vcc_1v1_nldo_s3>;
> +               vcca-supply = <&vcc_sys>;
> +
> +               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_cpu_big_s0: dcdc-reg1 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-enable-ramp-delay = <400>;
> +                               regulator-min-microvolt = <550000>;
> +                               regulator-max-microvolt = <950000>;
> +                               regulator-name = "vdd_cpu_big_s0";
> +                               regulator-ramp-delay = <12500>;
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       vdd_npu_s0: dcdc-reg2 {
> +                               regulator-boot-on;
> +                               regulator-enable-ramp-delay = <400>;
> +                               regulator-min-microvolt = <550000>;
> +                               regulator-max-microvolt = <950000>;
> +                               regulator-name = "vdd_npu_s0";
> +                               regulator-ramp-delay = <12500>;
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       vdd_cpu_lit_s0: dcdc-reg3 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <550000>;
> +                               regulator-max-microvolt = <950000>;
> +                               regulator-name = "vdd_cpu_lit_s0";
> +                               regulator-ramp-delay = <12500>;
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                                       regulator-suspend-microvolt = <750000>;
> +                               };
> +                       };
> +
> +                       vcc_3v3_s3: dcdc-reg4 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <3300000>;
> +                               regulator-max-microvolt = <3300000>;
> +                               regulator-name = "vcc_3v3_s3";
> +                               regulator-state-mem {
> +                                       regulator-on-in-suspend;
> +                                       regulator-suspend-microvolt = <3300000>;
> +                               };
> +                       };
> +
> +                       vdd_gpu_s0: dcdc-reg5 {
> +                               regulator-boot-on;
> +                               regulator-enable-ramp-delay = <400>;
> +                               regulator-min-microvolt = <550000>;
> +                               regulator-max-microvolt = <900000>;
> +                               regulator-name = "vdd_gpu_s0";
> +                               regulator-ramp-delay = <12500>;
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                                       regulator-suspend-microvolt = <850000>;
> +                               };
> +                       };
> +
> +                       vddq_ddr_s0: dcdc-reg6 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-name = "vddq_ddr_s0";
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       vdd_logic_s0: dcdc-reg7 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <550000>;
> +                               regulator-max-microvolt = <800000>;
> +                               regulator-name = "vdd_logic_s0";
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       vcc_1v8_s3: dcdc-reg8 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <1800000>;
> +                               regulator-max-microvolt = <1800000>;
> +                               regulator-name = "vcc_1v8_s3";
> +                               regulator-state-mem {
> +                                       regulator-on-in-suspend;
> +                                       regulator-suspend-microvolt = <1800000>;
> +                               };
> +                       };
> +
> +                       vdd2_ddr_s3: dcdc-reg9 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-name = "vdd2_ddr_s3";
> +                               regulator-state-mem {
> +                                       regulator-on-in-suspend;
> +                               };
> +                       };
> +
> +                       vdd_ddr_s0: dcdc-reg10 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <550000>;
> +                               regulator-max-microvolt = <1200000>;
> +                               regulator-name = "vdd_ddr_s0";
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       vcca_1v8_s0: pldo-reg1 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <1800000>;
> +                               regulator-max-microvolt = <1800000>;
> +                               regulator-name = "vcca_1v8_s0";
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       vcca1v8_pldo2_s0: pldo-reg2 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <1800000>;
> +                               regulator-max-microvolt = <1800000>;
> +                               regulator-name = "vcca1v8_pldo2_s0";
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       vdda_1v2_s0: pldo-reg3 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <1200000>;
> +                               regulator-max-microvolt = <1200000>;
> +                               regulator-name = "vdda_1v2_s0";
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       vcca_3v3_s0: pldo-reg4 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <3300000>;
> +                               regulator-max-microvolt = <3300000>;
> +                               regulator-name = "vcca_3v3_s0";
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       vccio_sd_s0: pldo-reg5 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <1800000>;
> +                               regulator-max-microvolt = <3300000>;
> +                               regulator-name = "vccio_sd_s0";
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       vcca1v8_pldo6_s3: pldo-reg6 {

This regulator is not listed on the schematic and doesn't seem to be
used. Delete?

> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <1800000>;
> +                               regulator-max-microvolt = <1800000>;
> +                               regulator-name = "vcca1v8_pldo6_s3";
> +                               regulator-state-mem {
> +                                       regulator-on-in-suspend;
> +                                       regulator-suspend-microvolt = <1800000>;
> +                               };
> +                       };
> +
> +                       vdd_0v75_s3: nldo-reg1 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <750000>;
> +                               regulator-max-microvolt = <750000>;
> +                               regulator-name = "vdd_0v75_s3";
> +                               regulator-state-mem {
> +                                       regulator-on-in-suspend;
> +                                       regulator-suspend-microvolt = <750000>;
> +                               };
> +                       };
> +
> +                       vdda_ddr_pll_s0: nldo-reg2 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <850000>;
> +                               regulator-max-microvolt = <850000>;
> +                               regulator-name = "vdda_ddr_pll_s0";
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       vdda0v75_hdmi_s0: nldo-reg3 {

This one is called just VDDA_HDMI_S0 (without 0v75) on the schematic -
consider renaming?

> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <837500>;
> +                               regulator-max-microvolt = <837500>;
> +                               regulator-name = "vdda0v75_hdmi_s0";
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       vdda_0v85_s0: nldo-reg4 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <850000>;
> +                               regulator-max-microvolt = <850000>;
> +                               regulator-name = "vdda_0v85_s0";
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       vdda_0v75_s0: nldo-reg5 {
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-min-microvolt = <750000>;
> +                               regulator-max-microvolt = <750000>;
> +                               regulator-name = "vdda_0v75_s0";
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +               };
> +       };
> +};
> +
> +&i2c2 {
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&i2c2m0_xfer>;
> +       status = "okay";
> +
> +       usbc0: usb-typec at 22 {
> +               compatible = "fcs,fusb302";
> +               reg = <0x22>;
> +               interrupt-parent = <&gpio0>;
> +               interrupts = <RK_PB4 IRQ_TYPE_LEVEL_LOW>;
> +               pinctrl-names = "default";
> +               pinctrl-0 = <&fusb302_int>;
> +               vbus-supply = <&vcc5v0_typec_vbus>;
> +
> +               ports {
> +                       #address-cells = <1>;
> +                       #size-cells = <0>;
> +
> +                       port at 0 {
> +                               reg = <0>;
> +
> +                               usbc0_role_sw: endpoint {
> +                                       remote-endpoint = <&usb_drd0_role_switch>;
> +                               };
> +                       };
> +               };
> +
> +               connector {
> +                       compatible = "usb-c-connector";
> +                       data-role = "dual";
> +                       label = "USB-C";
> +                       power-role = "dual";

It's definitely not dual-role. Your VBUS is the output of a load
switch, not routed to any consumers on board. Is the load switch even
reverse current blocking? Consider changing to "source".

> +                       sink-pdos = <PDO_FIXED(5000, 1000, PDO_FIXED_USB_COMM)>;

Don't think this is helpful for your board.

> +                       source-pdos = <PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>;
> +                       try-power-role = "sink";

This doesn't make much sense for your board either. Just keep it
source-only, which would match your hardware.

> +               };
> +       };

Don't you want to define the HYM8563 RTC which sits on the same I2C
bus? You need its 32kHz clock output for the WiFi/BT module to work
correctly.

> +};

What about &i2c3 for the ES8388 audio codec? And &sai1 for it to work.

What about &pcie0 for the miniPCIe slot? And &combphy0_ps for it to
work, along with a fixed regulator to model the 3v3 DCDC buck
converter controlled by the minipcie_pwr_en pin a.k.a. &gpio1 RK_PD6.

> +&pinctrl {
> +       hdmi {
> +               hdmi_con_en: hdmi-con-en {
> +                       rockchip,pins = <4 RK_PC6 RK_FUNC_GPIO &pcfg_pull_none>;
> +               };
> +       };
> +
> +       wireless-wlan {
> +               wifi_host_wake_irq: wifi-host-wake-irq {
> +                       rockchip,pins = <0 RK_PB0 RK_FUNC_GPIO &pcfg_pull_down>;
> +               };
> +
> +               wifi_poweren_gpio: wifi-poweren-gpio {
> +                       rockchip,pins = <1 RK_PC6 RK_FUNC_GPIO &pcfg_pull_up>;
> +               };
> +       };
> +
> +       usb {
> +               fusb302_int: fusb302-int {
> +                       rockchip,pins = <0 RK_PB4 RK_FUNC_GPIO &pcfg_pull_up>;
> +               };
> +
> +               typec_vbus_en: typec-vbus-en {
> +                       rockchip,pins = <0 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>;
> +               };
> +
> +               usb20_host_pwr_en: usb20-host-pwr-en {
> +                       rockchip,pins = <2 RK_PB5 RK_FUNC_GPIO &pcfg_pull_none>;
> +               };
> +
> +               usb30_host_pwr_en: usb30-host-pwr-en {
> +                       rockchip,pins = <0 RK_PC3 RK_FUNC_GPIO &pcfg_pull_none>;
> +               };
> +       };
> +};
> +
> +&saradc {
> +       vref-supply = <&vcca_1v8_s0>;

The schematic says VCCA_1V8_PLDO2_S0, which is a different regulator.

> +       status = "okay";
> +};
> +
> +&sdhci {
> +       bus-width = <8>;
> +       full-pwr-cycle-in-suspend;
> +       mmc-hs400-1_8v;
> +       mmc-hs400-enhanced-strobe;
> +       no-sd;
> +       no-sdio;
> +       non-removable;
> +       status = "okay";

It might be good to list the supplies explicitly (vcc_3v3_s3 for vcc,
vcc_1v8_s3 for vccq)

> +};
> +
> +&sdio {
> +       #address-cells = <1>;
> +       #size-cells = <0>;
> +       bus-width = <4>;
> +       cap-sd-highspeed;
> +       cap-sdio-irq;
> +       keep-power-in-suspend;
> +       max-frequency = <150000000>;

Is the default frequency unstable? This might warrant a comment.

> +       mmc-pwrseq = <&sdio_pwrseq>;
> +       no-mmc;
> +       no-sd;
> +       non-removable;
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&sdmmc1m0_bus4 &sdmmc1m0_clk &sdmmc1m0_cmd>;

Don't repeat the defaults which are already set in rk3576.dtsi

> +       sd-uhs-sdr104;
> +       status = "okay";
> +
> +       wifi at 1 {
> +               compatible = "brcm,bcm43456-fmac", "brcm,bcm4329-fmac";
> +               reg = <1>;
> +               interrupt-parent = <&gpio0>;
> +               interrupts = <RK_PB0 IRQ_TYPE_LEVEL_HIGH>;
> +               interrupt-names = "host-wake";
> +               pinctrl-names = "default";
> +               pinctrl-0 = <&wifi_host_wake_irq>;
> +       };
> +};
> +
> +&sdmmc {
> +       bus-width = <4>;
> +       cap-mmc-highspeed;
> +       cap-sd-highspeed;
> +       cd-gpios = <&gpio0 RK_PA7 GPIO_ACTIVE_LOW>;
> +       disable-wp;
> +       no-mmc;
> +       no-sdio;
> +       sd-uhs-sdr104;
> +       vmmc-supply = <&vcc_3v3_sdcard>;
> +       vqmmc-supply = <&vccio_sd_s0>;
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&sdmmc0_clk &sdmmc0_cmd &sdmmc0_det
> +                    &sdmmc0_bus4>;

Might be good to add a comment above this line saying that the
&sdmmc_pwren is not wired up on this board, and instead the SD card
power is hard wired, thus it's dropped from the pinctrl group.

> +       status = "okay";
> +};
> +
> +&tsadc {
> +       status = "okay";
> +};
> +
> +&u2phy0 {
> +       status = "okay";
> +};
> +
> +&u2phy0_otg {
> +       rockchip,typec-vbus-det;

Do you need this? You have FUSB302 to negotiate data roles and request
them explicitly, so no need to rely on VBUS sensing. Furthermore, your
VBUS is not even routed to this PHY, so this doesn't make sense with
the hardware you have.

> +       status = "okay";
> +};
> +
> +&u2phy1 {
> +       status = "okay";
> +};
> +
> +&u2phy1_otg {
> +       dr_mode = "host";
> +       phy-supply = <&vcc5v0_usb20_host>;

It's not a PHY supply, but a VBUS supply for the port. Please reflect
that accordingly.

> +       status = "okay";
> +};
> +
> +&uart0 {
> +       pinctrl-0 = <&uart0m0_xfer>;

Isn't that the default pinctrl for this UART?

> +       status = "okay";
> +};

How about &uart6 with m1 pin config including RTS/CTS and a Bluetooth
node under it?

> +&usbdp_phy {
> +       status = "okay";
> +};
> +
> +&usb_drd0_dwc3 {
> +       dr_mode = "otg";

Don't repeat the defaults which are already set in rk3576.dtsi

> +       snps,dis_u2_susphy_quirk;
> +       snps,dis_u3_susphy_quirk;
> +       snps,parkmode-disable-hs-quirk;
> +       snps,parkmode-disable-ss-quirk;

Do you need all those quirks? Does it work without them?

> +       usb-role-switch;
> +       status = "okay";
> +
> +       port {
> +               usb_drd0_role_switch: endpoint {
> +                       remote-endpoint = <&usbc0_role_sw>;

This port schema won't let you enable DisplayPort AltMode over the
same Type-C connector - please see Sebastian's revised schema at [2]

[2] https://lore.kernel.org/linux-rockchip/20260428-rockchip-usbdp-cleanup-v4-1-7775671ece22@collabora.com/

> +               };
> +       };
> +};
> +
> +&usb_drd1_dwc3 {
> +       dr_mode = "host";
> +       snps,dis_u2_susphy_quirk;

Do you need all those quirks? Does it work without them?

> +       status = "okay";
> +};
> +
> +&vop {
> +       status = "okay";
> +};
> +
> +&vop_mmu {
> +       status = "okay";
> +};
> +
> +&vp0 {
> +       vp0_out_hdmi: endpoint at ROCKCHIP_VOP2_EP_HDMI0 {
> +               reg = <ROCKCHIP_VOP2_EP_HDMI0>;
> +               remote-endpoint = <&hdmi_in_vp0>;
> +       };
> +};
> --
> 2.47.3

Best regards,
Alexey



More information about the Linux-rockchip mailing list