# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/phy/phy-rockchip-inno-usb2.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Rockchip USB2.0 phy with inno IP block

maintainers:
  - Heiko Stuebner <heiko@sntech.de>

properties:
  compatible:
    enum:
      - rockchip,px30-usb2phy
      - rockchip,rk1808-usb2phy
      - rockchip,rk3128-usb2phy
      - rockchip,rk3228-usb2phy
      - rockchip,rk3308-usb2phy
      - rockchip,rk3328-usb2phy
      - rockchip,rk3366-usb2phy
      - rockchip,rk3368-usb2phy
      - rockchip,rk3399-usb2phy
      - rockchip,rk3568-usb2phy
      - rockchip,rk3588-usb2phy
      - rockchip,rv1106-usb2phy
      - rockchip,rv1108-usb2phy

  reg:
    maxItems: 1

  clock-output-names:
    description:
      The usb 480m output clock name.

  "#clock-cells":
    const: 0

  "#phy-cells":
    const: 0

  clocks:
    maxItems: 1

  clock-names:
    const: phyclk

  assigned-clocks:
    description:
      Phandle of the usb 480m clock.

  assigned-clock-parents:
    description:
      Parent of the usb 480m clock.
      Select between usb-phy output 480m and xin24m.
      Refer to clk/clock-bindings.txt for generic clock consumer properties.

  extcon:
    description:
      Phandle to the extcon device providing the cable state for the otg phy.

  wakeup-source:
    description:
      Enable USB irq wakeup when suspend.
      Only work when suspend wakeup-config is not work.

  rockchip,usbgrf:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      Phandle to the syscon managing the 'usb general register files'.
      When set the driver will request its phandle as one companion-grf
      for some special SoCs (e.g rv1108).

  rockchip,usbctrl-grf:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      Phandle to the syscon managing the 'usb ctrl general register files'.
      When set the driver will request its phandle as the
      usb controller grf for some SoCs (e.g rk3588).

  rockchip,u2phy-tuning:
    $ref: /schemas/types.yaml#/definitions/flag
    description: when set, tuning u2phy to improve usb2 SI.

  host-port:
    type: object
    additionalProperties: false

    properties:
      "#phy-cells":
        const: 0

      interrupts:
        description: host linestate interrupt

      interrupt-names:
        const: linestate

      phy-supply:
        description:
          Phandle to a regulator that provides power to VBUS.
          See ./phy-bindings.txt for details.

    required:
      - "#phy-cells"
      - interrupts
      - interrupt-names

  otg-port:
    type: object
    additionalProperties: false

    properties:
      "#phy-cells":
        const: 0

      interrupts:
        minItems: 1
        maxItems: 3

      interrupt-names:
        oneOf:
          - const: linestate
          - const: otg-mux
          - items:
              - const: otg-bvalid
              - const: otg-id
              - const: linestate

      phy-supply:
        description:
          Phandle to a regulator that provides power to VBUS.
          See ./phy-bindings.txt for details.

      vbus-supply:
        description:
          Phandle to a fixed-regulator that provides power to VBUS.

      rockchip,utmi-bypass-uart:
        $ref: /schemas/types.yaml#/definitions/flag
        description: when set, indicates that support usb to bypass uart
          feature. This property can only be added in debug stage.

      rockchip,utmi-avalid:
        $ref: /schemas/types.yaml#/definitions/flag
        description: when set, the usb2 phy will use avalid status bit to
          get vbus status. If not, it will use bvalid status bit to get vbus
          status by default.

     rockchip,vbus-always-on:
       $ref: /schemas/types.yaml#/definitions/flag
       description: when set, indicates that the otg vbus is always powered on.

     rockchip,low-power-mode:
       $ref: /schemas/types.yaml#/definitions/flag
       description: when set, the port will enter low power state when suspend.

     rockchip,typec-vbus-det:
       $ref: /schemas/types.yaml#/definitions/flag
       description: when set, check the vbus status from grf con for Type-C
         interface. It's used when the vbusdet pin is always pulled up.

     rockchip,sel-pipe-phystatus:
       $ref: /schemas/types.yaml#/definitions/flag
       description: when set, select the pipe phy status from grf for usb
         controller. It's used when the usb3 phy is disabled, and it needs
         to combine with the usbctrl-grf.

     rockchip,dis-u2-susphy:
       $ref: /schemas/types.yaml#/definitions/flag
       description: when set, disable the usb2 phy enter suspend automatically.

    required:
      - "#phy-cells"
      - interrupts
      - interrupt-names

required:
  - compatible
  - reg
  - clock-output-names
  - "#clock-cells"
  - "#phy-cells"
  - host-port
  - otg-port

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/rk3399-cru.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/interrupt-controller/irq.h>
    u2phy0: usb2-phy@e450 {
      compatible = "rockchip,rk3399-usb2phy";
      reg = <0xe450 0x10>;
      clocks = <&cru SCLK_USB2PHY0_REF>;
      clock-names = "phyclk";
      clock-output-names = "clk_usbphy0_480m";
      #clock-cells = <0>;
      #phy-cells = <0>;

      u2phy0_host: host-port {
        #phy-cells = <0>;
        interrupts = <GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH 0>;
        interrupt-names = "linestate";
      };

      u2phy0_otg: otg-port {
        #phy-cells = <0>;
        interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH 0>,
                     <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH 0>,
                     <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH 0>;
        interrupt-names = "otg-bvalid", "otg-id", "linestate";
      };
    };
