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