# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/usb/onnn,nb7vpq904m.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: ON Semiconductor Type-C DisplayPort ALT Mode Linear Redriver

maintainers:
  - Neil Armstrong <neil.armstrong@linaro.org>

properties:
  compatible:
    enum:
      - onnn,nb7vpq904m

  reg:
    maxItems: 1

  vcc-supply:
    description: power supply (1.8V)

  enable-gpios: true

  retimer-switch:
    description: Flag the port as possible handle of SuperSpeed signals retiming
    type: boolean

  orientation-switch:
    description: Flag the port as possible handler of orientation switching
    type: boolean

  ports:
    $ref: /schemas/graph.yaml#/properties/ports
    properties:
      port@0:
        $ref: /schemas/graph.yaml#/properties/port
        description: Super Speed (SS) Output endpoint to the Type-C connector

      port@1:
        $ref: /schemas/graph.yaml#/$defs/port-base
        description: Super Speed (SS) Input endpoint from the Super-Speed PHY
        unevaluatedProperties: false

        properties:
          endpoint:
            $ref: /schemas/graph.yaml#/$defs/endpoint-base
            unevaluatedProperties: false

            properties:
              data-lanes:
                $ref: /schemas/types.yaml#/definitions/uint32-array
                description: |
                  An array of physical data lane indexes. Position determines how
                  lanes are connected to the redriver, It is assumed the same order
                  is kept on the other side of the redriver.
                  Lane number represents the following
                  - 0 is RX2 lane
                  - 1 is TX2 lane
                  - 2 is TX1 lane
                  - 3 is RX1 lane
                  The position determines the physical port of the redriver, in the
                  order A, B, C & D.
                oneOf:
                  - items:
                      - const: 0
                      - const: 1
                      - const: 2
                      - const: 3
                    description: |
                      This is the lanes default layout
                      - Port A to RX2 lane
                      - Port B to TX2 lane
                      - Port C to TX1 lane
                      - Port D to RX1 lane
                  - items:
                      - const: 3
                      - const: 2
                      - const: 1
                      - const: 0
                    description: |
                      This is the USBRX2/USBTX2 and USBRX1/USBTX1 swapped lanes layout
                      - Port A to RX1 lane
                      - Port B to TX1 lane
                      - Port C to TX2 lane
                      - Port D to RX2 lane

      port@2:
        $ref: /schemas/graph.yaml#/properties/port
        description:
          Sideband Use (SBU) AUX lines endpoint to the Type-C connector for the purpose of
          handling altmode muxing and orientation switching.

required:
  - compatible
  - reg

additionalProperties: false

examples:
  - |
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        typec-mux@32 {
            compatible = "onnn,nb7vpq904m";
            reg = <0x32>;

            vcc-supply = <&vreg_l15b_1p8>;

            retimer-switch;
            orientation-switch;

            ports {
                #address-cells = <1>;
                #size-cells = <0>;

                port@0 {
                    reg = <0>;
                    usb_con_ss: endpoint {
                        remote-endpoint = <&typec_con_ss>;
                    };
                };
                port@1 {
                    reg = <1>;
                    phy_con_ss: endpoint {
                        remote-endpoint = <&usb_phy_ss>;
                        data-lanes = <3 2 1 0>;
                    };
                };
                port@2 {
                    reg = <2>;
                    usb_con_sbu: endpoint {
                        remote-endpoint = <&typec_dp_aux>;
                    };
                };
            };
        };
    };
...