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

title: Freescale i.MX8MQ USB3 PHY

maintainers:
  - Li Jun <jun.li@nxp.com>

properties:
  compatible:
    oneOf:
      - enum:
          - fsl,imx8mq-usb-phy
          - fsl,imx8mp-usb-phy
      - items:
          - const: fsl,imx95-usb-phy
          - const: fsl,imx8mp-usb-phy

  reg:
    minItems: 1
    maxItems: 2

  "#phy-cells":
    const: 0

  clocks:
    minItems: 1
    items:
      - description: PHY configuration clock
      - description: Alternate PHY reference clock

  clock-names:
    minItems: 1
    items:
      - const: phy
      - const: alt

  power-domains:
    maxItems: 1

  vbus-supply:
    description:
      A phandle to the regulator for USB VBUS.

  fsl,phy-tx-vref-tune-percent:
    description:
      Tunes the HS DC level relative to the nominal level
    minimum: 90
    maximum: 124

  fsl,phy-tx-rise-tune-percent:
    description:
      Adjusts the rise/fall time duration of the HS waveform relative to
      its nominal value
    minimum: 90
    maximum: 120

  fsl,phy-tx-preemp-amp-tune-microamp:
    description:
      Adjust amount of current sourced to DPn and DMn after a J-to-K
      or K-to-J transition. Default is 0 (disabled).
    minimum: 0
    maximum: 1800

  fsl,phy-tx-vboost-level-microvolt:
    description:
      Adjust the boosted transmit launch pk-pk differential amplitude
    enum: [844, 1008, 1156]

  fsl,phy-comp-dis-tune-percent:
    description:
      Adjust the voltage level used to detect a disconnect event at the host
      relative to the nominal value
    minimum: 91
    maximum: 115

  fsl,phy-pcs-tx-deemph-3p5db-attenuation-db:
    description:
      Adjust TX de-emphasis attenuation in dB at nominal
      3.5dB point as per USB specification
    minimum: 0
    maximum: 36

  fsl,phy-pcs-tx-swing-full-percent:
    description:
      Scaling of the voltage defined by fsl,phy-tx-vboost-level-microvolt
    minimum: 0
    maximum: 100

required:
  - compatible
  - reg
  - "#phy-cells"
  - clocks
  - clock-names

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - fsl,imx95-usb-phy
    then:
      properties:
        reg:
          items:
            - description: USB PHY Control range
            - description: USB PHY TCA Block range
    else:
      properties:
        reg:
          maxItems: 1

  - if:
      properties:
        compatible:
          enum:
            - fsl,imx8mq-usb-phy
            - fsl,imx8mp-usb-phy
    then:
      properties:
        fsl,phy-tx-vref-tune-percent:
          minimum: 94
        fsl,phy-tx-rise-tune-percent:
          minimum: 97
          maximum: 103

  - if:
      properties:
        compatible:
          contains:
            enum:
              - fsl,imx95-usb-phy
    then:
      properties:
        fsl,phy-tx-vref-tune-percent:
          maximum: 108
        fsl,phy-comp-dis-tune-percent:
          minimum: 94
          maximum: 104

  - if:
      required:
        - orientation-switch
    then:
      allOf:
        - $ref: /schemas/usb/usb-switch.yaml#
        - $ref: /schemas/usb/usb-switch-ports.yaml#

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/clock/imx8mq-clock.h>
    usb3_phy0: phy@381f0040 {
        compatible = "fsl,imx8mq-usb-phy";
        reg = <0x381f0040 0x40>;
        clocks = <&clk IMX8MQ_CLK_USB1_PHY_ROOT>;
        clock-names = "phy";
        #phy-cells = <0>;
    };