1# SPDX-License-Identifier: GPL-2.0-only
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/connector/usb-connector.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: USB Connector
8
9maintainers:
10  - Rob Herring <robh@kernel.org>
11
12description:
13  A USB connector node represents a physical USB connector. It should be a child
14  of a USB interface controller or a separate node when it is attached to both
15  MUX and USB interface controller.
16
17properties:
18  compatible:
19    oneOf:
20      - enum:
21          - usb-a-connector
22          - usb-b-connector
23          - usb-c-connector
24
25      - items:
26          - const: gpio-usb-b-connector
27          - const: usb-b-connector
28
29      - items:
30          - const: samsung,usb-connector-11pin
31          - const: usb-b-connector
32
33  label:
34    description: Symbolic name for the connector.
35
36  type:
37    description: Size of the connector, should be specified in case of
38      non-fullsize 'usb-a-connector' or 'usb-b-connector' compatible
39      connectors.
40    $ref: /schemas/types.yaml#/definitions/string
41
42    enum:
43      - mini
44      - micro
45
46  self-powered:
47    description: Set this property if the USB device has its own power source.
48    type: boolean
49
50  # The following are optional properties for "usb-b-connector".
51  id-gpios:
52    description: An input gpio for USB ID pin.
53    maxItems: 1
54
55  vbus-gpios:
56    description: An input gpio for USB VBus pin, used to detect presence of
57      VBUS 5V.
58    maxItems: 1
59
60  vbus-supply:
61    description: A phandle to the regulator for USB VBUS if needed when host
62      mode or dual role mode is supported.
63      Particularly, if use an output GPIO to control a VBUS regulator, should
64      model it as a regulator. See bindings/regulator/fixed-regulator.yaml
65
66  # The following are optional properties for "usb-c-connector".
67  power-role:
68    description: Determines the power role that the Type C connector will
69      support. "dual" refers to Dual Role Port (DRP).
70    $ref: /schemas/types.yaml#/definitions/string
71
72    enum:
73      - source
74      - sink
75      - dual
76
77  try-power-role:
78    description: Preferred power role.
79    $ref: /schemas/types.yaml#/definitions/string
80
81    enum:
82      - source
83      - sink
84      - dual
85
86  data-role:
87    description: Data role if Type C connector supports USB data. "dual" refers
88      Dual Role Device (DRD).
89    $ref: /schemas/types.yaml#/definitions/string
90
91    enum:
92      - host
93      - device
94      - dual
95
96  typec-power-opmode:
97    description: Determines the power operation mode that the Type C connector
98      will support and will advertise through CC pins when it has no power
99      delivery support.
100      - "default" corresponds to default USB voltage and current defined by the
101        USB 2.0 and USB 3.2 specifications, 5V 500mA for USB 2.0 ports and
102        5V 900mA or 1500mA for USB 3.2 ports in single-lane or dual-lane
103        operation respectively.
104      - "1.5A" and "3.0A", 5V 1.5A and 5V 3.0A respectively, as defined in USB
105        Type-C Cable and Connector specification, when Power Delivery is not
106        supported.
107    $ref: /schemas/types.yaml#/definitions/string
108    enum:
109      - default
110      - 1.5A
111      - 3.0A
112
113  pd-disable:
114    description: Set this property if the Type-C connector has no power delivery support.
115    type: boolean
116
117  # The following are optional properties for "usb-c-connector" with power
118  # delivery support.
119  source-pdos:
120    description: An array of u32 with each entry providing supported power
121      source data object(PDO), the detailed bit definitions of PDO can be found
122      in "Universal Serial Bus Power Delivery Specification" chapter 6.4.1.2
123      Source_Capabilities Message, the order of each entry(PDO) should follow
124      the PD spec chapter 6.4.1. Required for power source and power dual role.
125      User can specify the source PDO array via PDO_FIXED/BATT/VAR/PPS_APDO()
126      defined in dt-bindings/usb/pd.h.
127    minItems: 1
128    maxItems: 7
129    $ref: /schemas/types.yaml#/definitions/uint32-array
130
131  sink-pdos:
132    description: An array of u32 with each entry providing supported power sink
133      data object(PDO), the detailed bit definitions of PDO can be found in
134      "Universal Serial Bus Power Delivery Specification" chapter 6.4.1.3
135      Sink Capabilities Message, the order of each entry(PDO) should follow the
136      PD spec chapter 6.4.1. Required for power sink and power dual role. User
137      can specify the sink PDO array via PDO_FIXED/BATT/VAR/PPS_APDO() defined
138      in dt-bindings/usb/pd.h.
139    minItems: 1
140    maxItems: 7
141    $ref: /schemas/types.yaml#/definitions/uint32-array
142
143  sink-vdos:
144    description: An array of u32 with each entry, a Vendor Defined Message Object (VDO),
145      providing additional information corresponding to the product, the detailed bit
146      definitions and the order of each VDO can be found in
147      "USB Power Delivery Specification Revision 3.0, Version 2.0 + ECNs 2020-12-10"
148      chapter 6.4.4.3.1 Discover Identity. User can specify the VDO array via
149      VDO_IDH/_CERT/_PRODUCT/_UFP/_DFP/_PCABLE/_ACABLE(1/2)/_VPD() defined in
150      dt-bindings/usb/pd.h.
151    minItems: 3
152    maxItems: 6
153    $ref: /schemas/types.yaml#/definitions/uint32-array
154
155  sink-vdos-v1:
156    description: An array of u32 with each entry, a Vendor Defined Message Object (VDO),
157      providing additional information corresponding to the product, the detailed bit
158      definitions and the order of each VDO can be found in
159      "USB Power Delivery Specification Revision 2.0, Version 1.3" chapter 6.4.4.3.1 Discover
160      Identity. User can specify the VDO array via VDO_IDH/_CERT/_PRODUCT/_CABLE/_AMA defined in
161      dt-bindings/usb/pd.h.
162    minItems: 3
163    maxItems: 6
164    $ref: /schemas/types.yaml#/definitions/uint32-array
165
166  op-sink-microwatt:
167    description: Sink required operating power in microwatt, if source can't
168      offer the power, Capability Mismatch is set. Required for power sink and
169      power dual role.
170
171  port:
172    $ref: /schemas/graph.yaml#/properties/port
173    description: OF graph bindings modeling a data bus to the connector, e.g.
174      there is a single High Speed (HS) port present in this connector. If there
175      is more than one bus (several port, with 'reg' property), they can be grouped
176      under 'ports'.
177
178  ports:
179    $ref: /schemas/graph.yaml#/properties/ports
180    description: OF graph bindings modeling any data bus to the connector
181      unless the bus is between parent node and the connector. Since a single
182      connector can have multiple data buses every bus has an assigned OF graph
183      port number as described below.
184
185    properties:
186      port@0:
187        $ref: /schemas/graph.yaml#/properties/port
188        description: High Speed (HS), present in all connectors.
189
190      port@1:
191        $ref: /schemas/graph.yaml#/properties/port
192        description: Super Speed (SS), present in SS capable connectors.
193
194      port@2:
195        $ref: /schemas/graph.yaml#/properties/port
196        description: Sideband Use (SBU), present in USB-C. This describes the
197          alternate mode connection of which SBU is a part.
198
199    required:
200      - port@0
201
202  new-source-frs-typec-current:
203    description: Initial current capability of the new source when vSafe5V
204      is applied during PD3.0 Fast Role Swap. "Table 6-14 Fixed Supply PDO - Sink"
205      of "USB Power Delivery Specification Revision 3.0, Version 1.2" provides the
206      different power levels and "6.4.1.3.1.6 Fast Role Swap USB Type-C Current"
207      provides a detailed description of the field. The sink PDO from current source
208      reflects the current source's(i.e. transmitter of the FRS signal) power
209      requirement during fr swap. The current sink (i.e. receiver of the FRS signal),
210      a.k.a new source, should check if it will be able to satisfy the current source's,
211      new sink's, requirement during frswap before enabling the frs signal reception.
212      This property refers to maximum current capability that the current sink can
213      satisfy. During FRS, VBUS voltage is at 5V, as the partners are in implicit
214      contract, hence, the power level is only a function of the current capability.
215      "1" refers to default USB power level as described by "Table 6-14 Fixed Supply PDO - Sink".
216      "2" refers to 1.5A@5V.
217      "3" refers to 3.0A@5V.
218    $ref: /schemas/types.yaml#/definitions/uint32
219    enum: [1, 2, 3]
220
221  slow-charger-loop:
222    description: Allows PMIC charger loops which are slow(i.e. cannot meet the 15ms deadline) to
223      still comply to pSnkStby i.e Maximum power that can be consumed by sink while in Sink Standby
224      state as defined in 7.4.2 Sink Electrical Parameters of USB Power Delivery Specification
225      Revision 3.0, Version 1.2. When the property is set, the port requests pSnkStby(2.5W -
226      5V@500mA) upon entering SNK_DISCOVERY(instead of 3A or the 1.5A, Rp current advertised, during
227      SNK_DISCOVERY) and the actual currrent limit after reception of PS_Ready for PD link or during
228      SNK_READY for non-pd link.
229    type: boolean
230
231dependencies:
232  sink-vdos-v1: [ 'sink-vdos' ]
233  sink-vdos: [ 'sink-vdos-v1' ]
234
235required:
236  - compatible
237
238allOf:
239  - if:
240      properties:
241        compatible:
242          contains:
243            const: gpio-usb-b-connector
244    then:
245      anyOf:
246        - required:
247            - vbus-gpios
248        - required:
249            - id-gpios
250
251  - if:
252      properties:
253        compatible:
254          contains:
255            const: samsung,usb-connector-11pin
256    then:
257      properties:
258        type:
259          const: micro
260
261anyOf:
262  - not:
263      required:
264        - typec-power-opmode
265        - new-source-frs-typec-current
266
267additionalProperties: true
268
269examples:
270  # Micro-USB connector with HS lines routed via controller (MUIC).
271  - |
272    muic-max77843 {
273        usb_con1: connector {
274            compatible = "usb-b-connector";
275            label = "micro-USB";
276            type = "micro";
277        };
278    };
279
280  # USB-C connector attached to CC controller (s2mm005), HS lines routed
281  # to companion PMIC (max77865), SS lines to USB3 PHY and SBU to DisplayPort.
282  # DisplayPort video lines are routed to the connector via SS mux in USB3 PHY.
283  - |
284    ccic: s2mm005 {
285        usb_con2: connector {
286            compatible = "usb-c-connector";
287            label = "USB-C";
288
289            ports {
290                #address-cells = <1>;
291                #size-cells = <0>;
292
293                port@0 {
294                    reg = <0>;
295                    usb_con_hs: endpoint {
296                        remote-endpoint = <&max77865_usbc_hs>;
297                    };
298                };
299                port@1 {
300                    reg = <1>;
301                    usb_con_ss: endpoint {
302                        remote-endpoint = <&usbdrd_phy_ss>;
303                    };
304                };
305                port@2 {
306                    reg = <2>;
307                    usb_con_sbu: endpoint {
308                        remote-endpoint = <&dp_aux>;
309                    };
310                };
311            };
312        };
313    };
314
315  # USB-C connector attached to a typec port controller(ptn5110), which has
316  # power delivery support and enables drp.
317  - |
318    #include <dt-bindings/usb/pd.h>
319    typec: ptn5110 {
320        usb_con3: connector {
321            compatible = "usb-c-connector";
322            label = "USB-C";
323            power-role = "dual";
324            try-power-role = "sink";
325            source-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)>;
326            sink-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)
327                         PDO_VAR(5000, 12000, 2000)>;
328            op-sink-microwatt = <10000000>;
329        };
330    };
331
332  # USB-C connector attached to SoC with a single High-Speed controller
333  - |
334    connector {
335        compatible = "usb-c-connector";
336        label = "USB-C";
337
338        port {
339            high_speed_ep: endpoint {
340                remote-endpoint = <&usb_hs_ep>;
341            };
342        };
343    };
344
345  # USB-C connector attached to SoC and USB3 typec port controller(hd3ss3220)
346  # with SS 2:1 MUX. HS lines routed to SoC, SS lines routed to the MUX and
347  # the output of MUX is connected to the SoC.
348  - |
349    connector {
350        compatible = "usb-c-connector";
351        label = "USB-C";
352        data-role = "dual";
353
354        ports {
355            #address-cells = <1>;
356            #size-cells = <0>;
357            port@0 {
358                reg = <0>;
359                hs_ep: endpoint {
360                    remote-endpoint = <&usb3_hs_ep>;
361                };
362            };
363            port@1 {
364                reg = <1>;
365                ss_ep: endpoint {
366                    remote-endpoint = <&hd3ss3220_in_ep>;
367                };
368            };
369        };
370    };
371
372  # USB connector with GPIO control lines
373  - |
374    #include <dt-bindings/gpio/gpio.h>
375
376    usb {
377        connector {
378            compatible = "gpio-usb-b-connector", "usb-b-connector";
379            type = "micro";
380            id-gpios = <&pio 12 GPIO_ACTIVE_HIGH>;
381            vbus-supply = <&usb_p0_vbus>;
382        };
383    };
384
385  # Micro-USB connector with HS lines routed via controller (MUIC) and MHL
386  # lines connected to HDMI-MHL bridge (sii8620) on Samsung Exynos5433-based
387  # mobile phone
388  - |
389    muic-max77843 {
390        usb_con4: connector {
391            compatible = "samsung,usb-connector-11pin", "usb-b-connector";
392            label = "micro-USB";
393            type = "micro";
394
395            ports {
396                #address-cells = <1>;
397                #size-cells = <0>;
398
399                port@0 {
400                    reg = <0>;
401                    muic_to_usb: endpoint {
402                        remote-endpoint = <&usb_to_muic>;
403                    };
404                };
405                port@3 {
406                    reg = <3>;
407                    usb_con_mhl: endpoint {
408                        remote-endpoint = <&sii8620_mhl>;
409                    };
410                };
411            };
412        };
413    };
414