# Copyright 2022 The Chromium OS Authors
# SPDX-License-Identifier: Apache-2.0

description: |
    A USB Type-C connector node represents a physical USB Type-C connector.
    It should be a child of a USB-C interface controller or a separate node
    when it is attached to both MUX and USB-C interface controller.

    This is based on Linux, documentation:
      https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/connector/usb-connector.yaml?h=v5.19&id=3d7cb6b04c3f3115719235cc6866b10326de34cd

compatible: "usb-c-connector"

include: base.yaml

properties:
    tcpc:
        type: phandle
        required: true
        description: |
            Type-C Port Controller for this port.

    vbus:
        type: phandle
        required: true
        description: |
            VBUS measurement and control for this port.

    power-role:
        type: string
        required: true
        enum:
          - "sink"
          - "source"
          - "dual"
        description: |
          The Port power role. "dual" for Dual Role Port.

    try-power-role:
        type: string
        enum:
          - "sink"
          - "source"
          - "dual"
        description: |
          Preferred power role.

    data-role:
        type: string
        enum:
          - "host"
          - "device"
          - "dual"
        description: |
          The Port data role.
            * "host" for Downstream Facing Port (DFP)
            * "device" for Upstream Facing Port (UFP)
            * "dual" for Dual Role Data

    typec-power-opmode:
        type: string
        enum:
          - "default"
          - "1.5A"
          - "3.0A"
        description: |
          Initial Type C advertised power, determined by the Rp when
          operating as a Source.
          * "default" corresponds to default USB voltage and current
            defined by the  USB 2.0 and USB 3.2 specifications.
              * 5V@500mA for USB 2.0
              * 5V@900mA for USB 3.2 single-lane
              * 5V@1500mA for USB 3.2 dual-lane
          * "1.5A" and "3.0A", 5V@1.5A and 5V@3.0A.

    pd-disable:
        type: boolean
        description: |
          Disables power delivery when true

    source-pdos:
        type: array
        description: |
          An array of source Power Data Objects (PDOs).
          Use tht following macros to define the PDOs, defined in
          dt-bindings/usb-c/pd.h.
            * PDO_FIXED
            * PDO_BATT
            * PDO_VAR
            * PDO_PPS_APDO
          Valid range: 1 - 7

    sink-pdos:
        type: array
        description: |
          An array of sink Power Data Objects (PDOs).
          Use tht following macros to define the PDOs, defined in
          dt-bindings/usb-c/pd.h.
            * PDO_FIXED
            * PDO_BATT
            * PDO_VAR
            * PDO_PPS_APDO
          Valid range: 1 - 7

    sink-vdos:
        type: array
        description: |
          An array of sink Vendor Defined Objects (VDOs).
          Use tht following macros to define the VDOs, defined in
          dt-bindings/usb-c/pd.h.
            * VDO_IDH
            * VDO_CERT
            * VDO_PRODUCT
            * VDO_UFP
            * VDO_DFP
            * VDO_PCABLE
            * VDO_ACABLE
            * VDO_VPD
          Valid range: 3 - 6

    sink-vdos-v1:
        type: array
        description: |
          An array of sink Vendor Defined Objects (VDOs).
          Use tht following macros to define the VDOs, defined in
          dt-bindings/usb-c/pd.h.
            * VDO_IDH
            * VDO_CERT
            * VDO_PRODUCT
            * VDO_CABLE
            * VDO_AMA
          Valid range: 3 - 6

    op-sink-microwatt:
        type: int
        description: |
          Minimum power, in microwatts, needed by the sink. A Capability
          Mismatch is sent to the Source if the power can't be met.

  # EXAMPLE:
  #
  # USB-C connector attached to a STM32 UCPD typec port controller, which has
  # power delivery support and enables SINK.
  #
  # #include <dt-bindings/usb-c/pd.h>
  #
  # vbus1: vbus {
  #     compatible = "zephyr,usb-c-vbus-adc";
  #     io-channels = <&adc2 8>;
  #     output-ohms = <49900>;
  #     full-ohms = <(330000 + 49900)>;
  # };
  #
  # ports {
  #     #address-cells = <1>;
  #     #size-cells = <0>;
  #     port1: usb-c-port@1 {
  #         compatible = "usb-c-connector";
  #         reg = <1>;
  #         tcpc = <&ucpd1>;
  #         vbus = <&vbus1>;
  #         power-role = "SINK";
  #         sink-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_USB_COMM)
  #                      PDO_VAR(5000, 12000, 2000)>;
  #         op-sink-microwatt = <10000000>;
  #      };
  # };
