[PATCH v2 3/3] arm64: dts: qcom: shikra: Wire up usb-role-switch for USB Type-C ports

From: Akash Kumar

Date: Fri Aug 21 2026 - 10:08:17 EST


On Shikra CQS/CQM platforms, usb-role-switch is handled by PM4125 on
the primary Type-C port and Cypress PD controller CYPD6129 on the
second Type-C port. On Shikra IQS platform, usb-role-switch is
handled by Cypress PD controller CYPD6129 on both Type-C ports.

Add the CYPD6129 typec node under i2c3, wire its connector endpoints
to the corresponding DWC3 controller ports via remote-endpoint
phandles, and switch the associated USB controllers to OTG mode so
role switching can take effect.

Signed-off-by: Akash Kumar <akash.kumar@xxxxxxxxxxxxxxxx>
---
arch/arm64/boot/dts/qcom/shikra-cqm-evk.dts | 84 ++++++++++++++++++++-
arch/arm64/boot/dts/qcom/shikra-cqm-som.dtsi | 45 +++++++++++
arch/arm64/boot/dts/qcom/shikra-cqs-evk.dts | 84 ++++++++++++++++++++-
arch/arm64/boot/dts/qcom/shikra-iqs-evk.dts | 107 ++++++++++++++++++++++++++-
4 files changed, 309 insertions(+), 11 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/shikra-cqm-evk.dts b/arch/arm64/boot/dts/qcom/shikra-cqm-evk.dts
index 3866ab8b0faa..41290b562fa3 100644
--- a/arch/arm64/boot/dts/qcom/shikra-cqm-evk.dts
+++ b/arch/arm64/boot/dts/qcom/shikra-cqm-evk.dts
@@ -42,6 +42,51 @@ &remoteproc_mpss {
status = "okay";
};

+&i2c3 {
+ status = "okay";
+
+ typec@40 {
+ compatible = "cypress,cypd6129";
+ reg = <0x40>;
+ interrupts-extended = <&tlmm 136 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-0 = <&usb0_intr_state>;
+ pinctrl-names = "default";
+ wakeup-source;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ccg_typec_con0: connector@0 {
+ compatible = "usb-c-connector";
+ reg = <0>;
+ label = "USB-C";
+ data-role = "dual";
+ power-role = "dual";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ ucsi_ccg_port: endpoint {
+ remote-endpoint = <&usb_2_dwc3_hs>;
+ };
+ };
+ };
+ };
+ };
+};
+
+&pm4125_hs_in {
+ remote-endpoint = <&usb_1_dwc3_hs>;
+};
+
+&pm4125_ss_in {
+ remote-endpoint = <&usb_qmpphy_out>;
+};
+
&sdhc_1 {
vmmc-supply = <&pm4125_l20>;
vqmmc-supply = <&pm4125_l14>;
@@ -58,6 +103,23 @@ &sdhc_1 {
status = "okay";
};

+&tlmm {
+ usb0_intr_state: usb0-intr-state {
+ pins = "gpio136";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+};
+
+&usb_1 {
+ /delete-property/ dr_mode;
+};
+
+&usb_1_dwc3_hs {
+ remote-endpoint = <&pm4125_hs_in>;
+};
+
&usb_1_hsphy {
vdd-supply = <&pm4125_l12>;
vdda-pll-supply = <&pm4125_l13>;
@@ -66,11 +128,14 @@ &usb_1_hsphy {
status = "okay";
};

-&usb_qmpphy {
- vdda-phy-supply = <&pm4125_l8>;
- vdda-pll-supply = <&pm4125_l13>;
+&usb_2 {
+ /delete-property/ dr_mode;

- status = "okay";
+ port {
+ usb_2_dwc3_hs: endpoint {
+ remote-endpoint = <&ucsi_ccg_port>;
+ };
+ };
};

&usb_2_hsphy {
@@ -80,3 +145,14 @@ &usb_2_hsphy {

status = "okay";
};
+
+&usb_qmpphy_out {
+ remote-endpoint = <&pm4125_ss_in>;
+};
+
+&usb_qmpphy {
+ vdda-phy-supply = <&pm4125_l8>;
+ vdda-pll-supply = <&pm4125_l13>;
+
+ status = "okay";
+};
diff --git a/arch/arm64/boot/dts/qcom/shikra-cqm-som.dtsi b/arch/arm64/boot/dts/qcom/shikra-cqm-som.dtsi
index 8ac42ff625a0..e4dd793c882b 100644
--- a/arch/arm64/boot/dts/qcom/shikra-cqm-som.dtsi
+++ b/arch/arm64/boot/dts/qcom/shikra-cqm-som.dtsi
@@ -85,6 +85,51 @@ &pm4125_resin {
status = "okay";
};

+&pm4125_typec {
+ status = "okay";
+
+ connector {
+ compatible = "usb-c-connector";
+
+ power-role = "dual";
+ data-role = "dual";
+ self-powered;
+
+ typec-power-opmode = "default";
+ pd-disable;
+
+ vbus-supply = <&pm4125_vbus>;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ pm4125_hs_in: endpoint {
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ pm4125_ss_in: endpoint {
+ };
+ };
+ };
+ };
+};
+
+&pm4125_vbus {
+ regulator-min-microvolt = <5000000>;
+ regulator-max-microvolt = <5000000>;
+ regulator-min-microamp = <500000>;
+ regulator-max-microamp = <500000>;
+
+ status = "okay";
+};
+
&pm8005_regulators {
status = "disabled";
};
diff --git a/arch/arm64/boot/dts/qcom/shikra-cqs-evk.dts b/arch/arm64/boot/dts/qcom/shikra-cqs-evk.dts
index 34568f1c7b63..36514a31d66e 100644
--- a/arch/arm64/boot/dts/qcom/shikra-cqs-evk.dts
+++ b/arch/arm64/boot/dts/qcom/shikra-cqs-evk.dts
@@ -42,6 +42,51 @@ &remoteproc_mpss {
status = "okay";
};

+&i2c3 {
+ status = "okay";
+
+ typec@40 {
+ compatible = "cypress,cypd6129";
+ reg = <0x40>;
+ interrupts-extended = <&tlmm 136 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-0 = <&usb0_intr_state>;
+ pinctrl-names = "default";
+ wakeup-source;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ccg_typec_con0: connector@0 {
+ compatible = "usb-c-connector";
+ reg = <0>;
+ label = "USB-C";
+ data-role = "dual";
+ power-role = "dual";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ ucsi_ccg_port: endpoint {
+ remote-endpoint = <&usb_2_dwc3_hs>;
+ };
+ };
+ };
+ };
+ };
+};
+
+&pm4125_hs_in {
+ remote-endpoint = <&usb_1_dwc3_hs>;
+};
+
+&pm4125_ss_in {
+ remote-endpoint = <&usb_qmpphy_out>;
+};
+
&sdhc_1 {
vmmc-supply = <&pm4125_l20>;
vqmmc-supply = <&pm4125_l14>;
@@ -58,6 +103,23 @@ &sdhc_1 {
status = "okay";
};

+&tlmm {
+ usb0_intr_state: usb0-intr-state {
+ pins = "gpio136";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+};
+
+&usb_1 {
+ /delete-property/ dr_mode;
+};
+
+&usb_1_dwc3_hs {
+ remote-endpoint = <&pm4125_hs_in>;
+};
+
&usb_1_hsphy {
vdd-supply = <&pm4125_l12>;
vdda-pll-supply = <&pm4125_l13>;
@@ -66,11 +128,14 @@ &usb_1_hsphy {
status = "okay";
};

-&usb_qmpphy {
- vdda-phy-supply = <&pm4125_l8>;
- vdda-pll-supply = <&pm4125_l13>;
+&usb_2 {
+ /delete-property/ dr_mode;

- status = "okay";
+ port {
+ usb_2_dwc3_hs: endpoint {
+ remote-endpoint = <&ucsi_ccg_port>;
+ };
+ };
};

&usb_2_hsphy {
@@ -80,3 +145,14 @@ &usb_2_hsphy {

status = "okay";
};
+
+&usb_qmpphy_out {
+ remote-endpoint = <&pm4125_ss_in>;
+};
+
+&usb_qmpphy {
+ vdda-phy-supply = <&pm4125_l8>;
+ vdda-pll-supply = <&pm4125_l13>;
+
+ status = "okay";
+};
diff --git a/arch/arm64/boot/dts/qcom/shikra-iqs-evk.dts b/arch/arm64/boot/dts/qcom/shikra-iqs-evk.dts
index 543d769125ef..ee0b55b2c462 100644
--- a/arch/arm64/boot/dts/qcom/shikra-iqs-evk.dts
+++ b/arch/arm64/boot/dts/qcom/shikra-iqs-evk.dts
@@ -42,6 +42,72 @@ &remoteproc_mpss {
status = "okay";
};

+&i2c3 {
+ status = "okay";
+
+ typec@40 {
+ compatible = "cypress,cypd6229", "cypress,cypd6129";
+ reg = <0x40>;
+ interrupts-extended = <&tlmm 50 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-0 = <&usb0_intr_state>;
+ pinctrl-names = "default";
+ wakeup-source;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ ccg_typec_con0: connector@0 {
+ compatible = "usb-c-connector";
+ reg = <0>;
+ label = "USB2-Type-C";
+ data-role = "dual";
+ power-role = "dual";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ ucsi_ccg_port0_hs: endpoint {
+ remote-endpoint = <&usb_2_dwc3_hs>;
+ };
+ };
+ };
+ };
+
+ ccg_typec_con1: connector@1 {
+ compatible = "usb-c-connector";
+ reg = <1>;
+ label = "USB3-Type-C";
+ data-role = "dual";
+ power-role = "dual";
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ ucsi_ccg_port_1_hs: endpoint {
+ remote-endpoint = <&usb_1_dwc3_hs>;
+ };
+ };
+
+ port@1 {
+ reg = <1>;
+
+ ucsi_ccg_port_1_ss: endpoint {
+ remote-endpoint = <&usb_qmpphy_out>;
+ };
+ };
+ };
+ };
+ };
+};
+
&sdhc_1 {
vmmc-supply = <&pm8150_l17>;
vqmmc-supply = <&pm8150_s4>;
@@ -58,6 +124,25 @@ &sdhc_1 {
status = "okay";
};

+&tlmm {
+ usb0_intr_state: usb0-intr-state {
+ pins = "gpio50";
+ function = "gpio";
+ drive-strength = <2>;
+ bias-pull-up;
+ };
+};
+
+&usb_1 {
+ /delete-property/ dr_mode;
+
+ status = "okay";
+};
+
+&usb_1_dwc3_hs {
+ remote-endpoint = <&ucsi_ccg_port_1_hs>;
+};
+
&usb_1_hsphy {
vdd-supply = <&pm8150_l4>;
vdda-pll-supply = <&pm8150_l12>;
@@ -66,11 +151,16 @@ &usb_1_hsphy {
status = "okay";
};

-&usb_qmpphy {
- vdda-phy-supply = <&pm8150_l6>;
- vdda-pll-supply = <&pm8150_l12>;
+&usb_2 {
+ /delete-property/ dr_mode;

status = "okay";
+
+ port {
+ usb_2_dwc3_hs: endpoint {
+ remote-endpoint = <&ucsi_ccg_port0_hs>;
+ };
+ };
};

&usb_2_hsphy {
@@ -80,3 +170,14 @@ &usb_2_hsphy {

status = "okay";
};
+
+&usb_qmpphy {
+ vdda-phy-supply = <&pm8150_l6>;
+ vdda-pll-supply = <&pm8150_l12>;
+
+ status = "okay";
+};
+
+&usb_qmpphy_out {
+ remote-endpoint = <&ucsi_ccg_port_1_ss>;
+};

--
2.43.0