# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)

%YAML 1.2
---
$id: http://devicetree.org/schemas/phy/qcom,qusb2-phy.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Qualcomm QUSB2 phy controller

maintainers:
  - Wesley Cheng <quic_wcheng@quicinc.com>

description:
  QUSB2 controller supports LS/FS/HS usb connectivity on Qualcomm chipsets.

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - qcom,ipq6018-qusb2-phy
              - qcom,ipq8074-qusb2-phy
              - qcom,ipq9574-qusb2-phy
              - qcom,msm8953-qusb2-phy
              - qcom,msm8996-qusb2-phy
              - qcom,msm8998-qusb2-phy
              - qcom,qcm2290-qusb2-phy
              - qcom,sdm660-qusb2-phy
              - qcom,sm4250-qusb2-phy
              - qcom,sm6115-qusb2-phy
      - items:
          - enum:
              - qcom,sc7180-qusb2-phy
              - qcom,sdm670-qusb2-phy
              - qcom,sdm845-qusb2-phy
              - qcom,sm6350-qusb2-phy
          - const: qcom,qusb2-v2-phy
  reg:
    maxItems: 1

  "#phy-cells":
    const: 0

  clocks:
    minItems: 2
    items:
      - description: phy config clock
      - description: 19.2 MHz ref clk
      - description: phy interface clock (Optional)

  clock-names:
    minItems: 2
    items:
      - const: cfg_ahb
      - const: ref
      - const: iface

  vdd-supply:
    description:
      Phandle to 0.9V regulator supply to PHY digital circuit.

  vdda-pll-supply:
    description:
      Phandle to 1.8V regulator supply to PHY refclk pll block.

  vdda-phy-dpdm-supply:
    description:
      Phandle to 3.1V regulator supply to Dp/Dm port signals.

  resets:
    maxItems: 1
    description:
      Phandle to reset to phy block.

  nvmem-cells:
    maxItems: 1
    description:
      Phandle to nvmem cell that contains 'HS Tx trim'
      tuning parameter value for qusb2 phy.

  qcom,tcsr-syscon:
    description:
      Phandle to TCSR syscon register region.
    $ref: /schemas/types.yaml#/definitions/phandle

  qcom,imp-res-offset-value:
    description:
      It is a 6 bit value that specifies offset to be
      added to PHY refgen RESCODE via IMP_CTRL1 register. It is a PHY
      tuning parameter that may vary for different boards of same SOC.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 63
    default: 0

  qcom,bias-ctrl-value:
    description:
      It is a 6 bit value that specifies bias-ctrl-value. It is a PHY
      tuning parameter that may vary for different boards of same SOC.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 63
    default: 32

  qcom,charge-ctrl-value:
    description:
      It is a 2 bit value that specifies charge-ctrl-value. It is a PHY
      tuning parameter that may vary for different boards of same SOC.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 3
    default: 0

  qcom,hstx-trim-value:
    description:
      It is a 4 bit value that specifies tuning for HSTX
      output current.
      Possible range is - 15mA to 24mA (stepsize of 600 uA).
      See dt-bindings/phy/phy-qcom-qusb2.h for applicable values.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 15
    default: 3

  qcom,preemphasis-level:
    description:
      It is a 2 bit value that specifies pre-emphasis level.
      Possible range is 0 to 15% (stepsize of 5%).
      See dt-bindings/phy/phy-qcom-qusb2.h for applicable values.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 3
    default: 2

  qcom,preemphasis-width:
    description:
      It is a 1 bit value that specifies how long the HSTX
      pre-emphasis (specified using qcom,preemphasis-level) must be in
      effect. Duration could be half-bit of full-bit.
      See dt-bindings/phy/phy-qcom-qusb2.h for applicable values.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 1
    default: 0

  qcom,hsdisc-trim-value:
    description:
      It is a 2 bit value tuning parameter that control disconnect
      threshold and may vary for different boards of same SOC.
    $ref: /schemas/types.yaml#/definitions/uint32
    minimum: 0
    maximum: 3
    default: 0

required:
  - compatible
  - reg
  - "#phy-cells"
  - clocks
  - clock-names
  - vdd-supply
  - vdda-pll-supply
  - vdda-phy-dpdm-supply
  - resets

allOf:
  - if:
      not:
        properties:
          compatible:
            contains:
              const: qcom,qusb2-v2-phy
    then:
      properties:
        qcom,imp-res-offset-value: false
        qcom,bias-ctrl-value: false
        qcom,charge-ctrl-value: false
        qcom,hstx-trim-value: false
        qcom,preemphasis-level: false
        qcom,preemphasis-width: false
        qcom,hsdisc-trim-value: false

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/qcom,gcc-msm8996.h>
    hsusb_phy: phy@7411000 {
        compatible = "qcom,msm8996-qusb2-phy";
        reg = <0x7411000 0x180>;
        #phy-cells = <0>;

        clocks = <&gcc GCC_USB_PHY_CFG_AHB2PHY_CLK>,
                 <&gcc GCC_RX1_USB2_CLKREF_CLK>;
        clock-names = "cfg_ahb", "ref";

        vdd-supply = <&pm8994_l28>;
        vdda-pll-supply = <&pm8994_l12>;
        vdda-phy-dpdm-supply = <&pm8994_l24>;

        resets = <&gcc GCC_QUSB2PHY_PRIM_BCR>;
        nvmem-cells = <&qusb2p_hstx_trim>;
    };