* [PATCH 0/2] arm64: dts: rockchip: add USB-C PD and DP altmode to LubanCat 4
@ 2026-11-10 19:30 Pufan Jin
2026-11-10 19:30 ` [PATCH 1/2] arm64: dts: rockchip: add USB-C PD support " Pufan Jin
2026-11-10 19:30 ` [PATCH 2/2] arm64: dts: rockchip: add USB-C DP altmode " Pufan Jin
0 siblings, 2 replies; 3+ messages in thread
From: Pufan Jin @ 2026-11-10 19:30 UTC (permalink / raw)
To: Conor Dooley, Heiko Stuebner, Krzysztof Kozlowski, Rob Herring
Cc: devicetree, linux-arm-kernel, linux-kernel, linux-rockchip
This series enables the front-panel USB Type-C port on the EmbedFire
LubanCat 4 single-board computer, covering USB Power Delivery, dual-role
data/power, and DisplayPort alternate mode.
The port is backed by a Fairchild FUSB302 controller on I2C1 (0x22),
a fixed 5V VBUS regulator enabled by GPIO1_C1 (limited to 2A by an
LPW5209 switch), the RK3588 combo PHY usbdp_phy0, and two DC switches
on GPIO4_B3/B4 for the SBU1/SBU2 lines.
The series is organized into two steps:
1. Basic Type-C and USB PD support:
Adds the FUSB302 node, VBUS regulator, dual-role power (source 5V/2A,
sink 5V/1A) and dual-role data connector. Sets usb_host0_xhci to
OTG mode with usb-role-switch, wires HS data to the host controller
and SS data to usbdp_phy0, and adds orientation-switch on the PHY.
2. DisplayPort alternate mode:
Adds the DisplayPort altmode entry (SVID 0xff01) to the connector,
wires connector SBU (port@2) to usbdp_phy0 (port@3), and connects
the display pipeline: VOP2 VP1 -> dp0 -> usbdp_phy0 (port@2).
Validation and hardware test status:
- 'make dtbs' builds cleanly without warnings.
- 'make dtbs_check' against usb-connector, phy-rockchip-usbdp,
rockchip,dw-dp, and fcs,fusb302 schemas passes with 0 warnings.
- Patch 1 has been verified on a physical LubanCat 4 board:
* tcpm and fusb302 probe cleanly;
* Host mode: USB 2.0 and USB 3.0 peripherals enumerate; USB 3.0
operates at SuperSpeed in normal orientation (reverse-orientation
SuperSpeed is subject to the known upstream phy-rockchip-usbdp bug);
* Device mode: ConfigFS CDC ACM serial gadget successfully enumerates
on a host PC at high-speed with bidirectional data communication;
* VBUS power switch correctly enables in source mode and remains
disabled in sink mode with reverse current blocked.
- Patch 2 driver stack registration has been verified on board:
dw_dp binds to the display subsystem, DRM connector card2-DP-1 is
registered, usbdp phy-mux and phy-switch are registered, and
typec_displayport binds to the altmode. Display output / link
training is disclosed as pending physical verification due to lack
of a USB-C to DP monitor/cable at this time.
Pufan Jin (2):
arm64: dts: rockchip: add USB-C PD support to LubanCat 4
arm64: dts: rockchip: add USB-C DP altmode support to LubanCat 4
.../boot/dts/rockchip/rk3588s-lubancat-4.dts | 172 +++++++++++++++++-
1 file changed, 171 insertions(+), 1 deletion(-)
--
2.56.0
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH 1/2] arm64: dts: rockchip: add USB-C PD support to LubanCat 4
2026-11-10 19:30 [PATCH 0/2] arm64: dts: rockchip: add USB-C PD and DP altmode to LubanCat 4 Pufan Jin
@ 2026-11-10 19:30 ` Pufan Jin
2026-11-10 19:30 ` [PATCH 2/2] arm64: dts: rockchip: add USB-C DP altmode " Pufan Jin
1 sibling, 0 replies; 3+ messages in thread
From: Pufan Jin @ 2026-11-10 19:30 UTC (permalink / raw)
To: Conor Dooley, Heiko Stuebner, Krzysztof Kozlowski, Rob Herring
Cc: devicetree, linux-arm-kernel, linux-kernel, linux-rockchip
The EmbedFire LubanCat 4 has a Type-C port on the front panel backed by
a Fairchild FUSB302 Type-C controller connected to I2C1 (at 0x22).
VBUS 5V power is supplied through a fixed regulator enabled by
GPIO1_C1 (active high), current-limited to 2A by an LPW5209 switch.
Add the FUSB302 node, the fixed VBUS regulator, and the USB-C connector
with dual-role power (source 5V/2A, sink 5V/1A) and dual-role data.
Wire the HighSpeed data endpoint to usb_host0_xhci and the SuperSpeed
data endpoint to usbdp_phy0. Set usb_host0_xhci to OTG mode with
usb-role-switch enabled, and add orientation-switch on usbdp_phy0.
DisplayPort alternate mode support is added in a subsequent patch.
Tested on LubanCat 4 hardware:
- fusb302 and tcpm probe cleanly;
- USB host mode verified with USB 2.0 and USB 3.0 peripherals;
- USB 2.0 devices enumerate and transfer data in both orientations;
- USB 3.0 devices enumerate at SuperSpeed (5Gbps) in normal orientation;
reverse-orientation SuperSpeed is subject to the known upstream
phy-rockchip-usbdp driver reinit limitation;
- USB device mode verified via ConfigFS CDC ACM serial gadget connected
to a host PC with successful high-speed enumeration and bidirectional
data communication;
- VBUS switch (LPW5209) enables in source mode and remains disabled in
sink mode with reverse current blocked.
Signed-off-by: Pufan Jin <cyan2254650260@gmail.com>
---
.../boot/dts/rockchip/rk3588s-lubancat-4.dts | 115 +++++++++++++++++-
1 file changed, 114 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-lubancat-4.dts b/arch/arm64/boot/dts/rockchip/rk3588s-lubancat-4.dts
index 0d28c6165..a94aaddb2 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588s-lubancat-4.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-lubancat-4.dts
@@ -8,9 +8,11 @@
/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 "rk3588s.dtsi"
/ {
@@ -116,6 +118,18 @@ vcc5v0_usb30_host: regulator-vcc5v0-usb30-host {
vin-supply = <&vcc5v0_sys>;
};
+ vbus5v0_typec: regulator-vbus5v0-typec {
+ compatible = "regulator-fixed";
+ regulator-name = "vbus5v0_typec";
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ enable-active-high;
+ gpio = <&gpio1 RK_PC1 GPIO_ACTIVE_HIGH>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&typec_vbus_en>;
+ vin-supply = <&vcc5v0_sys>;
+ };
+
fan: pwm-fan {
compatible = "pwm-fan";
cooling-levels = <0 100 150 200 255>;
@@ -286,6 +300,51 @@ regulator-state-mem {
regulator-off-in-suspend;
};
};
+
+ usbc0: usb-typec@22 {
+ compatible = "fcs,fusb302";
+ reg = <0x22>;
+ interrupt-parent = <&gpio0>;
+ interrupts = <RK_PC6 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&fusb302_int>;
+ vbus-supply = <&vbus5v0_typec>;
+ status = "okay";
+
+ usb_con: connector {
+ compatible = "usb-c-connector";
+ label = "USB-C";
+ data-role = "dual";
+ power-role = "dual";
+ try-power-role = "source";
+ op-sink-microwatt = <1000000>;
+ sink-pdos =
+ <PDO_FIXED(5000, 1000, PDO_FIXED_USB_COMM)>;
+ source-pdos =
+ <PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ usbc0_hs: endpoint {
+ remote-endpoint = <&usb_host0_xhci_hs>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ usbc0_ss: endpoint {
+ remote-endpoint = <&usbdp_phy0_ss_out>;
+ };
+ };
+ };
+ };
+ };
};
&mdio1 {
@@ -346,6 +405,16 @@ usb30_host_pwr_en: usb30-host-pwr-en {
rockchip,pins = <1 RK_PC4 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
+
+ usb-typec {
+ fusb302_int: fusb302-int {
+ rockchip,pins = <0 RK_PC6 RK_FUNC_GPIO &pcfg_pull_up>;
+ };
+
+ typec_vbus_en: typec-vbus-en {
+ rockchip,pins = <1 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;
+ };
+ };
};
&pwm0 {
@@ -748,8 +817,30 @@ &usb_host0_ohci {
};
&usb_host0_xhci {
- dr_mode = "host";
+ dr_mode = "otg";
+ usb-role-switch;
status = "okay";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ usb_host0_xhci_hs: endpoint {
+ remote-endpoint = <&usbc0_hs>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ usb_host0_xhci_ss: endpoint {
+ remote-endpoint = <&usbdp_phy0_ss_in>;
+ };
+ };
+ };
};
&usb_host1_ehci {
@@ -765,7 +856,29 @@ &usb_host2_xhci {
};
&usbdp_phy0 {
+ orientation-switch;
status = "okay";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ usbdp_phy0_ss_out: endpoint {
+ remote-endpoint = <&usbc0_ss>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ usbdp_phy0_ss_in: endpoint {
+ remote-endpoint = <&usb_host0_xhci_ss>;
+ };
+ };
+ };
};
&vop {
--
2.56.0
^ permalink raw reply [flat|nested] 3+ messages in thread* [PATCH 2/2] arm64: dts: rockchip: add USB-C DP altmode support to LubanCat 4
2026-11-10 19:30 [PATCH 0/2] arm64: dts: rockchip: add USB-C PD and DP altmode to LubanCat 4 Pufan Jin
2026-11-10 19:30 ` [PATCH 1/2] arm64: dts: rockchip: add USB-C PD support " Pufan Jin
@ 2026-11-10 19:30 ` Pufan Jin
1 sibling, 0 replies; 3+ messages in thread
From: Pufan Jin @ 2026-11-10 19:30 UTC (permalink / raw)
To: Conor Dooley, Heiko Stuebner, Krzysztof Kozlowski, Rob Herring
Cc: devicetree, linux-arm-kernel, linux-kernel, linux-rockchip
The Type-C port on the EmbedFire LubanCat 4 supports DisplayPort
alternate mode through the RK3588 usbdp combo PHY (usbdp_phy0).
The sideband use (SBU1/SBU2) AUX signals are routed through two DC
switches controlled by GPIO4_B3 and GPIO4_B4.
Add the DisplayPort alternate mode entry (SVID 0xff01) to the USB-C
connector and connect connector port@2 (SBU) to usbdp_phy0 port@3.
Configure usbdp_phy0 with mode-switch and sbu{1,2}-dc-gpios. Enable
dp0 and connect dp0_out to usbdp_phy0 port@2, with dp0_in fed from
VOP2 VP1.
Tested driver stack registration on LubanCat 4 hardware:
- dw_dp bounds successfully to display-subsystem;
- DRM DP connector card2-DP-1 is registered and reports disconnected;
- typec_displayport registers the DisplayPort altmode driver;
- usbdp_phy0 registers the phy-switch and phy-mux.
Physical DisplayPort link training and monitor video output are pending
verification with a physical USB-C to DP sink/cable.
Signed-off-by: Pufan Jin <cyan2254650260@gmail.com>
---
.../boot/dts/rockchip/rk3588s-lubancat-4.dts | 57 +++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/arch/arm64/boot/dts/rockchip/rk3588s-lubancat-4.dts b/arch/arm64/boot/dts/rockchip/rk3588s-lubancat-4.dts
index a94aaddb2..6c5a942df 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588s-lubancat-4.dts
+++ b/arch/arm64/boot/dts/rockchip/rk3588s-lubancat-4.dts
@@ -323,6 +323,13 @@ usb_con: connector {
source-pdos =
<PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)>;
+ altmodes {
+ displayport {
+ svid = /bits/ 16 <0xff01>;
+ vdo = <0xffffffff>;
+ };
+ };
+
ports {
#address-cells = <1>;
#size-cells = <0>;
@@ -342,6 +349,14 @@ usbc0_ss: endpoint {
remote-endpoint = <&usbdp_phy0_ss_out>;
};
};
+
+ port@2 {
+ reg = <2>;
+
+ usbc0_sbu: endpoint {
+ remote-endpoint = <&usbdp_phy0_dp_out>;
+ };
+ };
};
};
};
@@ -857,6 +872,9 @@ &usb_host2_xhci {
&usbdp_phy0 {
orientation-switch;
+ mode-switch;
+ sbu1-dc-gpios = <&gpio4 RK_PB3 GPIO_ACTIVE_HIGH>;
+ sbu2-dc-gpios = <&gpio4 RK_PB4 GPIO_ACTIVE_HIGH>;
status = "okay";
ports {
@@ -878,6 +896,22 @@ usbdp_phy0_ss_in: endpoint {
remote-endpoint = <&usb_host0_xhci_ss>;
};
};
+
+ port@2 {
+ reg = <2>;
+
+ usbdp_phy0_dp_in: endpoint {
+ remote-endpoint = <&dp0_out_con>;
+ };
+ };
+
+ port@3 {
+ reg = <3>;
+
+ usbdp_phy0_dp_out: endpoint {
+ remote-endpoint = <&usbc0_sbu>;
+ };
+ };
};
};
@@ -895,3 +929,26 @@ vp0_out_hdmi0: endpoint@ROCKCHIP_VOP2_EP_HDMI0 {
remote-endpoint = <&hdmi0_in_vp0>;
};
};
+
+&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@a {
+ reg = <ROCKCHIP_VOP2_EP_DP0>;
+ remote-endpoint = <&dp0_in_vp1>;
+ };
+};
--
2.56.0
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-11-10 19:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-10 19:30 [PATCH 0/2] arm64: dts: rockchip: add USB-C PD and DP altmode to LubanCat 4 Pufan Jin
2026-11-10 19:30 ` [PATCH 1/2] arm64: dts: rockchip: add USB-C PD support " Pufan Jin
2026-11-10 19:30 ` [PATCH 2/2] arm64: dts: rockchip: add USB-C DP altmode " Pufan Jin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®