Rockchip USB Device Not Detected: Host, OTG, VBUS and PHY Checklist
A USB port that shows nothing in lsusb usually has a role, power or PHY problem. Here is the order to check them on Rockchip SoCs.
Step 1: Watch the kernel while plugging in
sudo dmesg -w # then plug the device in
lsusb -t # which bus/port, which speed
No message at all on plug-in means the port has no power, the controller is not in host mode, or the PHY/controller is disabled.
Step 2: Controller role (dr_mode)
Rockchip USB 3 controllers are DWC3 cores. A port wired as a host but configured as peripheral or otg without role switching will never enumerate devices.
&usb_host0_xhci {
dr_mode = "host"; /* "otg" needs role switching (Type-C, ID pin) */
status = "okay";
};
Check the current role on the vendor kernel via the controller's debugfs or sysfs mode/role entries, or look for "dwc3 ... role switch" messages in dmesg.
Step 3: VBUS
- Measure 5 V on the connector. Host ports usually get VBUS from a GPIO-controlled regulator (e.g.
vcc5v0_host), so the enable GPIO and its polarity must be right. - The regulator must be referenced from the PHY (
phy-supply) or beregulator-always-on; otherwise it may never switch on. - Current limit: a bus-powered HDD or LTE modem may brown out on weak VBUS switches.
Step 4: PHY nodes
Enabling the controller isn't enough. Its PHY must be enabled too:
- USB 2.0:
u2phyNand the per-port node (u2phyN_host/u2phyN_otg). - USB 3 on RK3588:
usbdp_phyN(USB3 + DisplayPort combo) or a combo PHY (combphy2_psu) for the extra USB 3 host. - On RK3568/RK3566:
combphy0/1in USB 3 mode for the USB 3 ports.
Step 5: USB 3 port only runs at USB 2 speed
If lsusb -t shows 480M for a USB 3 device, the SuperSpeed part isn't working: the combo/USBDP PHY is disabled or in the wrong mode, the SS lanes are swapped or damaged, or on Type-C the orientation/mux handling isn't configured.
Step 6: Type-C specifics
Type-C ports with a CC controller (e.g. FUSB302) need the controller node, its interrupt GPIO, the usb-role-switch link and orientation switch connections in the device tree. Without them the port may work in one plug orientation only, or not at all.
Spotted an error or have something to add? Suggest an improvement.