Skip to content
Snippets Groups Projects
Commit 50614903 authored by Sebastian Reichel's avatar Sebastian Reichel Committed by Sebastian Reichel
Browse files

arm64: dts: rockchip: add USB-C support for ROCK 5B+


Add hardware description for the USB-C port in the Radxa ROCK 5 Model B+
This describes the OHCI, EHCI and XHCI USB parts, but not yet the DisplayPort
AltMode, since the bindings for that are not yet upstream.

Support for the ROCK 5B is prepared, but not exposed at the moment,
since it results in unreliable boot behavior due to hard resets killing
the supply voltage. Some further investigation and fixes in the kernel's
Type-C Port Manager (TCPM) state machine is needed before exposing the
port. The ROCK 5B+ has a dedicated port for powering the board and thus
is not affected.

Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent a9994b81
No related branches found
No related tags found
No related merge requests found
...@@ -99,12 +99,28 @@ pcie3x2_rst: pcie3x2-rst { ...@@ -99,12 +99,28 @@ pcie3x2_rst: pcie3x2-rst {
}; };
usb { usb {
usbc_sbu_dc: usbc-sbu-dc {
rockchip,pins = <0 RK_PC4 RK_FUNC_GPIO &pcfg_pull_none>,
<0 RK_PC5 RK_FUNC_GPIO &pcfg_pull_none>;
};
vcc5v0_host_en: vcc5v0-host-en { vcc5v0_host_en: vcc5v0-host-en {
rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>; rockchip,pins = <1 RK_PA1 RK_FUNC_GPIO &pcfg_pull_none>;
}; };
}; };
}; };
&usbc0 {
status = "okay";
};
&usbdp_phy0 {
pinctrl-names = "default";
pinctrl-0 = <&usbc_sbu_dc>;
sbu1-dc-gpios = <&gpio0 RK_PC4 GPIO_ACTIVE_HIGH>;
sbu2-dc-gpios = <&gpio0 RK_PC5 GPIO_ACTIVE_HIGH>;
};
&vcc5v0_host { &vcc5v0_host {
enable-active-high; enable-active-high;
gpio = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>; gpio = <&gpio1 RK_PA1 GPIO_ACTIVE_HIGH>;
......
...@@ -36,8 +36,20 @@ &uart6 { ...@@ -36,8 +36,20 @@ &uart6 {
status = "okay"; status = "okay";
}; };
&usbdp_phy0 {
pinctrl-names = "default";
pinctrl-0 = <&usbc_sbu_dc>;
sbu1-dc-gpios = <&gpio4 RK_PA6 GPIO_ACTIVE_HIGH>;
sbu2-dc-gpios = <&gpio4 RK_PA7 GPIO_ACTIVE_HIGH>;
};
&pinctrl { &pinctrl {
usb { usb {
usbc_sbu_dc: usbc-sbu-dc {
rockchip,pins = <4 RK_PA6 RK_FUNC_GPIO &pcfg_pull_none>,
<4 RK_PA7 RK_FUNC_GPIO &pcfg_pull_none>;
};
vcc5v0_host_en: vcc5v0-host-en { vcc5v0_host_en: vcc5v0-host-en {
rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>; rockchip,pins = <4 RK_PB0 RK_FUNC_GPIO &pcfg_pull_none>;
}; };
...@@ -50,3 +62,14 @@ &vcc5v0_host { ...@@ -50,3 +62,14 @@ &vcc5v0_host {
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&vcc5v0_host_en>; pinctrl-0 = <&vcc5v0_host_en>;
}; };
/*
* Do not yet offer USB-C support on the Rock 5B. The current U-Boot
* Linux setup is quite unstable and for many power-supplies needs multiple
* hard resets to boot to userspace. Let's enable this once the issues
* in the TCPM kernel code have been solved. Without this any automated
* boot tests will run into problems.
*/
/delete-node/ &usbc0;
/delete-node/ &usb_host0_xhci;
/delete-node/ &usbdp_phy0;
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include <dt-bindings/gpio/gpio.h> #include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/leds/common.h> #include <dt-bindings/leds/common.h>
#include <dt-bindings/soc/rockchip,vop2.h> #include <dt-bindings/soc/rockchip,vop2.h>
#include <dt-bindings/usb/pd.h>
#include "rk3588.dtsi" #include "rk3588.dtsi"
/ { / {
...@@ -92,6 +93,15 @@ rfkill-bt { ...@@ -92,6 +93,15 @@ rfkill-bt {
shutdown-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>; shutdown-gpios = <&gpio3 RK_PD5 GPIO_ACTIVE_HIGH>;
}; };
vcc12v_dcin: regulator-vcc12v-dcin {
compatible = "regulator-fixed";
regulator-name = "vcc12v_dcin";
regulator-always-on;
regulator-boot-on;
regulator-min-microvolt = <12000000>;
regulator-max-microvolt = <12000000>;
};
vcc3v3_pcie2x1l0: regulator-vcc3v3-pcie2x1l0 { vcc3v3_pcie2x1l0: regulator-vcc3v3-pcie2x1l0 {
compatible = "regulator-fixed"; compatible = "regulator-fixed";
enable-active-high; enable-active-high;
...@@ -146,6 +156,19 @@ vcc5v0_sys: regulator-vcc5v0-sys { ...@@ -146,6 +156,19 @@ vcc5v0_sys: regulator-vcc5v0-sys {
regulator-boot-on; regulator-boot-on;
regulator-min-microvolt = <5000000>; regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>; regulator-max-microvolt = <5000000>;
vin-supply = <&vcc12v_dcin>;
};
vbus5v0_typec: vbus5v0-typec {
compatible = "regulator-fixed";
enable-active-high;
gpio = <&gpio2 RK_PB6 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&vbus5v0_typec_en>;
regulator-name = "vbus5v0_typec";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
vin-supply = <&vcc5v0_sys>;
}; };
vcc_1v1_nldo_s3: regulator-vcc-1v1-nldo-s3 { vcc_1v1_nldo_s3: regulator-vcc-1v1-nldo-s3 {
...@@ -309,6 +332,67 @@ regulator-state-mem { ...@@ -309,6 +332,67 @@ regulator-state-mem {
}; };
}; };
&i2c4 {
pinctrl-names = "default";
pinctrl-0 = <&i2c4m1_xfer>;
status = "okay";
usbc0: usb-typec@22 {
compatible = "fcs,fusb302";
reg = <0x22>;
interrupt-parent = <&gpio3>;
interrupts = <RK_PB4 IRQ_TYPE_LEVEL_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&usbc0_int>;
vbus-supply = <&vbus5v0_typec>;
/*
* When the board is starting to send power-delivery messages
* too late (5 seconds according to the specification), the
* power-supply reacts with a hard-reset. That removes the
* power from VBUS for some time, which resets te whole board.
*/
status = "fail";
usb_con: connector {
compatible = "usb-c-connector";
label = "USB-C";
data-role = "dual";
power-role = "sink";
try-power-role = "sink";
op-sink-microwatt = <1000000>;
sink-pdos =
<PDO_FIXED(5000, 3000, PDO_FIXED_USB_COMM)>,
<PDO_VAR(5000, 20000, 5000)>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
usbc0_role_sw: endpoint {
remote-endpoint = <&dwc3_0_role_switch>;
};
};
port@1 {
reg = <1>;
usbc0_orien_sw: endpoint {
remote-endpoint = <&usbdp_phy0_orientation_switch>;
};
};
port@2 {
reg = <2>;
dp_altmode_mux: endpoint {
remote-endpoint = <&usbdp_phy0_dp_altmode_mux>;
};
};
};
};
};
};
&i2c6 { &i2c6 {
status = "okay"; status = "okay";
...@@ -481,6 +565,16 @@ pcie3_vcc3v3_en: pcie3-vcc3v3-en { ...@@ -481,6 +565,16 @@ pcie3_vcc3v3_en: pcie3-vcc3v3-en {
rockchip,pins = <1 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>; rockchip,pins = <1 RK_PA4 RK_FUNC_GPIO &pcfg_pull_none>;
}; };
}; };
usb {
usbc0_int: usbc0-int {
rockchip,pins = <3 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>;
};
vbus5v0_typec_en: vbus5v0-typec-en {
rockchip,pins = <2 RK_PB6 RK_FUNC_GPIO &pcfg_pull_none>;
};
};
}; };
&pwm1 { &pwm1 {
...@@ -866,6 +960,14 @@ &uart2 { ...@@ -866,6 +960,14 @@ &uart2 {
status = "okay"; status = "okay";
}; };
&u2phy0 {
status = "okay";
};
&u2phy0_otg {
status = "okay";
};
&u2phy1 { &u2phy1 {
status = "okay"; status = "okay";
}; };
...@@ -893,6 +995,27 @@ &u2phy3_host { ...@@ -893,6 +995,27 @@ &u2phy3_host {
status = "okay"; status = "okay";
}; };
&usbdp_phy0 {
mode-switch;
orientation-switch;
status = "okay";
port {
#address-cells = <1>;
#size-cells = <0>;
usbdp_phy0_orientation_switch: endpoint@0 {
reg = <0>;
remote-endpoint = <&usbc0_orien_sw>;
};
usbdp_phy0_dp_altmode_mux: endpoint@1 {
reg = <1>;
remote-endpoint = <&dp_altmode_mux>;
};
};
};
&usbdp_phy1 { &usbdp_phy1 {
status = "okay"; status = "okay";
}; };
...@@ -905,6 +1028,20 @@ &usb_host0_ohci { ...@@ -905,6 +1028,20 @@ &usb_host0_ohci {
status = "okay"; status = "okay";
}; };
&usb_host0_xhci {
usb-role-switch;
status = "okay";
port {
#address-cells = <1>;
#size-cells = <0>;
dwc3_0_role_switch: endpoint {
remote-endpoint = <&usbc0_role_sw>;
};
};
};
&usb_host1_ehci { &usb_host1_ehci {
status = "okay"; status = "okay";
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment