[PATCH 1/4] dt-bindings: usb: Document ST UCPD

Marek Vasut marex at nabladev.com
Wed Aug 19 09:33:52 PDT 2026


Document ST UCPD Type-C block. The UCPD integrates the physical
layer of the Power Delivery (PD), with CC signaling method, for
operation with Type-C cables. Vbus and Vconn control is performed
using an external chip, usually ST TCPP01/TCPP02/TCPP03 or similar.

Signed-off-by: Marek Vasut <marex at nabladev.com>
---
Cc: Alexandre Torgue <alexandre.torgue at foss.st.com>
Cc: Conor Dooley <conor+dt at kernel.org>
Cc: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
Cc: Heikki Krogerus <heikki.krogerus at linux.intel.com>
Cc: Krzysztof Kozlowski <krzk+dt at kernel.org>
Cc: Maxime Coquelin <mcoquelin.stm32 at gmail.com>
Cc: Rob Herring <robh at kernel.org>
Cc: Sebastian Reichel <sebastian.reichel at collabora.com>
Cc: devicetree at vger.kernel.org
Cc: kernel at dh-electronics.com
Cc: linux-arm-kernel at lists.infradead.org
Cc: linux-kernel at vger.kernel.org
Cc: linux-stm32 at st-md-mailman.stormreply.com
Cc: linux-usb at vger.kernel.org
---
 .../bindings/usb/st,stm32mp25-ucpd.yaml       | 154 ++++++++++++++++++
 1 file changed, 154 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/usb/st,stm32mp25-ucpd.yaml

diff --git a/Documentation/devicetree/bindings/usb/st,stm32mp25-ucpd.yaml b/Documentation/devicetree/bindings/usb/st,stm32mp25-ucpd.yaml
new file mode 100644
index 0000000000000..9b13efdc90597
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/st,stm32mp25-ucpd.yaml
@@ -0,0 +1,154 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/usb/st,stm32mp25-ucpd.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: STMicroelectronics STM32MP25 UCPD Type-C controller
+
+maintainers:
+  - Marek Vasut <marex at nabladev.com>
+
+description:
+  The UCPD integrates the physical layer of the Power Delivery (PD),
+  with CC signaling method, for operation with Type-C cables. Vbus
+  and Vconn control is performed using an external chip, usually
+  ST TCPP01/TCPP02/TCPP03 or similar.
+
+properties:
+  compatible:
+    const: st,stm32mp25-ucpd
+
+  reg:
+    maxItems: 1
+
+  access-controllers:
+    maxItems: 1
+
+  clocks:
+    minItems: 2
+    maxItems: 2
+
+  clock-names:
+    items:
+      - const: apb
+      - const: ker
+
+  interrupts:
+    maxItems: 1
+
+  nvmem-cells:
+    maxItems: 1
+
+  nvmem-cell-names:
+    const: trim
+
+  power-domains:
+    maxItems: 1
+
+  resets:
+    maxItems: 1
+
+  reset-names:
+    const: phy
+
+  vconn-gpios:
+    description: GPIOs used to control CC1 and CC2 Vconn
+
+  vdd33-supply:
+    description: Regulator that supplies the CC lines driver
+
+  connector:
+    type: object
+    $ref: /schemas/connector/usb-connector.yaml#
+    unevaluatedProperties: false
+
+    properties:
+      compatible:
+        const: usb-c-connector
+
+      power-role: true
+
+      typec-power-opmode: true
+
+    required:
+      - compatible
+
+required:
+  - compatible
+  - reg
+  - clocks
+  - clock-names
+  - interrupts
+  - nvmem-cells
+  - nvmem-cell-names
+  - power-domains
+  - resets
+  - reset-names
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/clock/st,stm32mp25-rcc.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    #include <dt-bindings/reset/st,stm32mp25-rcc.h>
+
+    ucpd: phy at 480a0000 {
+        compatible = "st,stm32mp25-ucpd";
+        reg = <0x480a0000 0x1000>;
+        access-controllers = <&rifsc 69>;
+        clocks = <&rcc CK_BUS_USBTC>, <&rcc CK_KER_USBTC>;
+        clock-names = "apb", "ker";
+        interrupts = <46 IRQ_TYPE_LEVEL_HIGH>;
+        nvmem-cells = <&ucpdtrim>;
+        nvmem-cell-names = "trim";
+        power-domains = <&cluster_pd>;
+        resets = <&rcc USBTC_R>;
+        reset-names = "phy";
+
+        vconn-gpios = <&tcpp 0 0>, <&tcpp 1 0>;
+        vdd33-supply = <&scmi_vdd33ucpd>;
+
+        connector {
+            compatible = "usb-c-connector";
+            label = "USB-C";
+            data-role = "dual";
+            power-role = "source";
+            self-powered;
+            vbus-gpios = <&gpioa 10 0>;
+            vbus-supply = <&reg_usbc_vbus>;
+
+            altmodes {
+                displayport {
+                    svid = /bits/ 16 <0xff01>;
+                    vdo = <0xffffffff>;
+                };
+            };
+
+            ports {
+                #address-cells = <1>;
+                #size-cells = <0>;
+
+                port at 0 {
+                    reg = <0>;
+                    usbc0_hs_ep: endpoint {
+                        remote-endpoint = <&usb_drd0_hs_ep>;
+                    };
+                };
+                port at 1 {
+                    reg = <1>;
+                    usbc0_ss_ep: endpoint {
+                        remote-endpoint = <&usb_drd0_ss_ep>;
+                    };
+                };
+
+                port at 2 {
+                    reg = <2>;
+                    usbc0_sbu_ep: endpoint {
+                        remote-endpoint = <&usb_sbu_ep>;
+                    };
+                };
+            };
+        };
+    };
-- 
2.53.0




More information about the linux-arm-kernel mailing list