* [PATCH 1/3] dt-bindings: usb: Add Cypress cypd6129/cypd6229 Type-C controller
2026-08-20 14:47 [PATCH 0/3] Add usb-role-switch support for USB Type-C ports on Shikra Akash Kumar
@ 2026-08-20 14:47 ` Akash Kumar
2026-08-20 18:09 ` Conor Dooley
2026-08-20 14:47 ` [PATCH 2/3] usb: typec: ucsi: ccg: Add support for cypd6129/cypd6229 Akash Kumar
2026-08-20 14:47 ` [PATCH 3/3] arm64: dts: qcom: shikra: Wire up usb-role-switch for USB Type-C ports Akash Kumar
2 siblings, 1 reply; 5+ messages in thread
From: Akash Kumar @ 2026-08-20 14:47 UTC (permalink / raw)
To: Greg Kroah-Hartman, Bjorn Andersson, Konrad Dybcio, Rob Herring,
Dmitry Baryshkov, Krzysztof Kozlowski, Conor Dooley
Cc: linux-usb, linux-kernel, linux-arm-msm, devicetree
Add the device-tree binding documentation for the Cypress cypd6129
and cypd6229 dual Type-C PD controllers. These are used on Shikra
CQM/CQS/IQS platforms to handle usb-role-switch for the USB Type-C
ports over an I2C interface, similarly to the existing cypd4226
binding.
cypd6229 is a variant of cypd6129 and is described with a
"cypress,cypd6129" fallback compatible string.
Signed-off-by: Akash Kumar <akash.kumar@oss.qualcomm.com>
---
.../bindings/usb/cypress,cypd6129.yaml | 99 +++++++++++++++++++
1 file changed, 99 insertions(+)
create mode 100644 Documentation/devicetree/bindings/usb/cypress,cypd6129.yaml
diff --git a/Documentation/devicetree/bindings/usb/cypress,cypd6129.yaml b/Documentation/devicetree/bindings/usb/cypress,cypd6129.yaml
new file mode 100644
index 000000000000..f709f82f2092
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/cypress,cypd6129.yaml
@@ -0,0 +1,99 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/usb/cypress,cypd6129.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Cypress cypd6129/cypd6229 Type-C Controller
+
+maintainers:
+ - Akash Kumar <akash.kumar@oss.qualcomm.com>
+
+description:
+ The Cypress cypd6129 and cypd6229 are dual Type-C PD controllers that are
+ controlled via an I2C interface.
+
+properties:
+ compatible:
+ oneOf:
+ - const: cypress,cypd6129
+ - items:
+ - const: cypress,cypd6229
+ - const: cypress,cypd6129
+
+ '#address-cells':
+ const: 1
+
+ '#size-cells':
+ const: 0
+
+ reg:
+ maxItems: 1
+
+ interrupts:
+ maxItems: 1
+
+ pinctrl-0: true
+ pinctrl-1: true
+
+ pinctrl-names:
+ minItems: 1
+ items:
+ - const: default
+ - const: sleep
+
+patternProperties:
+ '^connector@[01]$':
+ $ref: /schemas/connector/usb-connector.yaml#
+ required:
+ - reg
+
+required:
+ - compatible
+ - reg
+ - interrupts
+
+anyOf:
+ - required:
+ - connector@0
+ - required:
+ - connector@1
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/irq.h>
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ typec@40 {
+ compatible = "cypress,cypd6129";
+ reg = <0x40>;
+ interrupts-extended = <&tlmm 136 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-0 = <&usb0_intr_state>;
+ pinctrl-names = "default";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ connector@0 {
+ compatible = "usb-c-connector";
+ reg = <0>;
+ label = "USB-C";
+ data-role = "dual";
+ power-role = "dual";
+ wakeup-source;
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 {
+ reg = <0>;
+ endpoint {
+ remote-endpoint = <&usb_role_switch0>;
+ };
+ };
+ };
+ };
+ };
+ };
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* Re: [PATCH 1/3] dt-bindings: usb: Add Cypress cypd6129/cypd6229 Type-C controller
2026-08-20 14:47 ` [PATCH 1/3] dt-bindings: usb: Add Cypress cypd6129/cypd6229 Type-C controller Akash Kumar
@ 2026-08-20 18:09 ` Conor Dooley
0 siblings, 0 replies; 5+ messages in thread
From: Conor Dooley @ 2026-08-20 18:09 UTC (permalink / raw)
To: Akash Kumar
Cc: Greg Kroah-Hartman, Bjorn Andersson, Konrad Dybcio, Rob Herring,
Dmitry Baryshkov, Krzysztof Kozlowski, Conor Dooley, linux-usb,
linux-kernel, linux-arm-msm, devicetree
[-- Attachment #1: Type: text/plain, Size: 3663 bytes --]
On Thu, Aug 20, 2026 at 08:17:36PM +0530, Akash Kumar wrote:
> Add the device-tree binding documentation for the Cypress cypd6129
> and cypd6229 dual Type-C PD controllers. These are used on Shikra
> CQM/CQS/IQS platforms to handle usb-role-switch for the USB Type-C
> ports over an I2C interface, similarly to the existing cypd4226
> binding.
>
> cypd6229 is a variant of cypd6129 and is described with a
> "cypress,cypd6129" fallback compatible string.
>
> Signed-off-by: Akash Kumar <akash.kumar@oss.qualcomm.com>
> ---
> .../bindings/usb/cypress,cypd6129.yaml | 99 +++++++++++++++++++
> 1 file changed, 99 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/usb/cypress,cypd6129.yaml
>
> diff --git a/Documentation/devicetree/bindings/usb/cypress,cypd6129.yaml b/Documentation/devicetree/bindings/usb/cypress,cypd6129.yaml
> new file mode 100644
> index 000000000000..f709f82f2092
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/usb/cypress,cypd6129.yaml
> @@ -0,0 +1,99 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/usb/cypress,cypd6129.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Cypress cypd6129/cypd6229 Type-C Controller
> +
> +maintainers:
> + - Akash Kumar <akash.kumar@oss.qualcomm.com>
> +
> +description:
> + The Cypress cypd6129 and cypd6229 are dual Type-C PD controllers that are
> + controlled via an I2C interface.
> +
> +properties:
> + compatible:
> + oneOf:
> + - const: cypress,cypd6129
> + - items:
> + - const: cypress,cypd6229
> + - const: cypress,cypd6129
> +
> + '#address-cells':
> + const: 1
> +
> + '#size-cells':
> + const: 0
> +
> + reg:
> + maxItems: 1
> +
> + interrupts:
> + maxItems: 1
> +
> + pinctrl-0: true
> + pinctrl-1: true
> +
> + pinctrl-names:
> + minItems: 1
> + items:
> + - const: default
> + - const: sleep
> +
> +patternProperties:
> + '^connector@[01]$':
> + $ref: /schemas/connector/usb-connector.yaml#
> + required:
> + - reg
> +
> +required:
> + - compatible
> + - reg
> + - interrupts
> +
> +anyOf:
> + - required:
> + - connector@0
> + - required:
> + - connector@1
> +
> +additionalProperties: false
> +
> +examples:
> + - |
> + #include <dt-bindings/interrupt-controller/irq.h>
> + i2c {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + typec@40 {
> + compatible = "cypress,cypd6129";
> + reg = <0x40>;
> + interrupts-extended = <&tlmm 136 IRQ_TYPE_LEVEL_LOW>;
> + pinctrl-0 = <&usb0_intr_state>;
> + pinctrl-names = "default";
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + connector@0 {
> + compatible = "usb-c-connector";
> + reg = <0>;
> + label = "USB-C";
> + data-role = "dual";
> + power-role = "dual";
> + wakeup-source;
whitespace nitpickery, blank line here
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
and here
> + port@0 {
> + reg = <0>;
and here
Otherwise, this seems fine to me. With that,
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Cheers,
Conor.
pw-bot: changes-requested
> + endpoint {
> + remote-endpoint = <&usb_role_switch0>;
> + };
> + };
> + };
> + };
> + };
> + };
> --
> 2.43.0
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/3] usb: typec: ucsi: ccg: Add support for cypd6129/cypd6229
2026-08-20 14:47 [PATCH 0/3] Add usb-role-switch support for USB Type-C ports on Shikra Akash Kumar
2026-08-20 14:47 ` [PATCH 1/3] dt-bindings: usb: Add Cypress cypd6129/cypd6229 Type-C controller Akash Kumar
@ 2026-08-20 14:47 ` Akash Kumar
2026-08-20 14:47 ` [PATCH 3/3] arm64: dts: qcom: shikra: Wire up usb-role-switch for USB Type-C ports Akash Kumar
2 siblings, 0 replies; 5+ messages in thread
From: Akash Kumar @ 2026-08-20 14:47 UTC (permalink / raw)
To: Greg Kroah-Hartman, Bjorn Andersson, Konrad Dybcio, Rob Herring,
Dmitry Baryshkov, Krzysztof Kozlowski, Conor Dooley
Cc: linux-usb, linux-kernel, linux-arm-msm, devicetree
Add cypd6129 and cypd6229 compatible strings to the of_device_id
match table so the driver binds to boards describing these Cypress
PD controllers in their device tree. No other driver changes are
needed since the chip is accessed through the same generic UCSI/HPI
I2C register protocol as the existing cypd4226 support.
Signed-off-by: Akash Kumar <akash.kumar@oss.qualcomm.com>
---
drivers/usb/typec/ucsi/ucsi_ccg.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/usb/typec/ucsi/ucsi_ccg.c b/drivers/usb/typec/ucsi/ucsi_ccg.c
index d46ca942026e..37b96d662e59 100644
--- a/drivers/usb/typec/ucsi/ucsi_ccg.c
+++ b/drivers/usb/typec/ucsi/ucsi_ccg.c
@@ -1527,6 +1527,8 @@ static void ucsi_ccg_remove(struct i2c_client *client)
static const struct of_device_id ucsi_ccg_of_match_table[] = {
{ .compatible = "cypress,cypd4226", },
+ { .compatible = "cypress,cypd6129", },
+ { .compatible = "cypress,cypd6229", },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, ucsi_ccg_of_match_table);
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread* [PATCH 3/3] arm64: dts: qcom: shikra: Wire up usb-role-switch for USB Type-C ports
2026-08-20 14:47 [PATCH 0/3] Add usb-role-switch support for USB Type-C ports on Shikra Akash Kumar
2026-08-20 14:47 ` [PATCH 1/3] dt-bindings: usb: Add Cypress cypd6129/cypd6229 Type-C controller Akash Kumar
2026-08-20 14:47 ` [PATCH 2/3] usb: typec: ucsi: ccg: Add support for cypd6129/cypd6229 Akash Kumar
@ 2026-08-20 14:47 ` Akash Kumar
2 siblings, 0 replies; 5+ messages in thread
From: Akash Kumar @ 2026-08-20 14:47 UTC (permalink / raw)
To: Greg Kroah-Hartman, Bjorn Andersson, Konrad Dybcio, Rob Herring,
Dmitry Baryshkov, Krzysztof Kozlowski, Conor Dooley
Cc: linux-usb, linux-kernel, linux-arm-msm, devicetree
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@oss.qualcomm.com>
---
arch/arm64/boot/dts/qcom/shikra-cqm-evk.dts | 64 +++++++++++-
arch/arm64/boot/dts/qcom/shikra-cqs-evk.dts | 64 +++++++++++-
arch/arm64/boot/dts/qcom/shikra-iqs-evk.dts | 108 +++++++++++++++++++-
3 files changed, 223 insertions(+), 13 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..c92ab8e6cc0c 100644
--- a/arch/arm64/boot/dts/qcom/shikra-cqm-evk.dts
+++ b/arch/arm64/boot/dts/qcom/shikra-cqm-evk.dts
@@ -42,6 +42,43 @@ &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";
+
+ #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";
+ wakeup-source;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ ucsi_ccg_port: endpoint {
+ remote-endpoint = <&usb_1_dwc3_hs>;
+ };
+ };
+ };
+ };
+ };
+};
+
&sdhc_1 {
vmmc-supply = <&pm4125_l20>;
vqmmc-supply = <&pm4125_l14>;
@@ -58,6 +95,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 = <&ucsi_ccg_port>;
+};
+
&usb_1_hsphy {
vdd-supply = <&pm4125_l12>;
vdda-pll-supply = <&pm4125_l13>;
@@ -66,17 +120,17 @@ &usb_1_hsphy {
status = "okay";
};
-&usb_qmpphy {
- vdda-phy-supply = <&pm4125_l8>;
+&usb_2_hsphy {
+ vdd-supply = <&pm4125_l12>;
vdda-pll-supply = <&pm4125_l13>;
+ vdda-phy-dpdm-supply = <&pm4125_l21>;
status = "okay";
};
-&usb_2_hsphy {
- vdd-supply = <&pm4125_l12>;
+&usb_qmpphy {
+ vdda-phy-supply = <&pm4125_l8>;
vdda-pll-supply = <&pm4125_l13>;
- vdda-phy-dpdm-supply = <&pm4125_l21>;
status = "okay";
};
diff --git a/arch/arm64/boot/dts/qcom/shikra-cqs-evk.dts b/arch/arm64/boot/dts/qcom/shikra-cqs-evk.dts
index 34568f1c7b63..8a3d173568a1 100644
--- a/arch/arm64/boot/dts/qcom/shikra-cqs-evk.dts
+++ b/arch/arm64/boot/dts/qcom/shikra-cqs-evk.dts
@@ -42,6 +42,43 @@ &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";
+
+ #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";
+ wakeup-source;
+
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ port@0 {
+ reg = <0>;
+
+ ucsi_ccg_port: endpoint {
+ remote-endpoint = <&usb_1_dwc3_hs>;
+ };
+ };
+ };
+ };
+ };
+};
+
&sdhc_1 {
vmmc-supply = <&pm4125_l20>;
vqmmc-supply = <&pm4125_l14>;
@@ -58,6 +95,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 = <&ucsi_ccg_port>;
+};
+
&usb_1_hsphy {
vdd-supply = <&pm4125_l12>;
vdda-pll-supply = <&pm4125_l13>;
@@ -66,17 +120,17 @@ &usb_1_hsphy {
status = "okay";
};
-&usb_qmpphy {
- vdda-phy-supply = <&pm4125_l8>;
+&usb_2_hsphy {
+ vdd-supply = <&pm4125_l12>;
vdda-pll-supply = <&pm4125_l13>;
+ vdda-phy-dpdm-supply = <&pm4125_l21>;
status = "okay";
};
-&usb_2_hsphy {
- vdd-supply = <&pm4125_l12>;
+&usb_qmpphy {
+ vdda-phy-supply = <&pm4125_l8>;
vdda-pll-supply = <&pm4125_l13>;
- vdda-phy-dpdm-supply = <&pm4125_l21>;
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..bf09d199f2a3 100644
--- a/arch/arm64/boot/dts/qcom/shikra-iqs-evk.dts
+++ b/arch/arm64/boot/dts/qcom/shikra-iqs-evk.dts
@@ -42,6 +42,73 @@ &remoteproc_mpss {
status = "okay";
};
+&i2c3 {
+ status = "okay";
+
+ typec@40 {
+ compatible = "cypress,cypd6229";
+ reg = <0x40>;
+ interrupts-extended = <&tlmm 50 IRQ_TYPE_LEVEL_LOW>;
+ pinctrl-0 = <&usb0_intr_state>;
+ pinctrl-names = "default";
+
+ #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";
+ wakeup-source;
+
+ 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";
+ wakeup-source;
+
+ 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 +125,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 +152,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 +171,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
^ permalink raw reply related [flat|nested] 5+ messages in thread