# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/phy/allwinner,sun9i-a80-usb-phy.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Allwinner A80 USB PHY

maintainers:
  - Chen-Yu Tsai <wens@csie.org>
  - Maxime Ripard <mripard@kernel.org>

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

  compatible:
    const: allwinner,sun9i-a80-usb-phy

  reg:
    maxItems: 1

  clocks:
    anyOf:
      - maxItems: 1
        description: Main PHY Clock

      - items:
          - description: Main PHY clock
          - description: HSIC 12MHz clock
          - description: HSIC 480MHz clock

  clock-names:
    oneOf:
      - const: phy

      - items:
          - const: phy
          - const: hsic_12M
          - const: hsic_480M

  resets:
    minItems: 1
    items:
      - description: Normal USB PHY reset
      - description: HSIC Reset

  reset-names:
    minItems: 1
    items:
      - const: phy
      - const: hsic

  phy_type:
    const: hsic
    description:
      When absent, the PHY type will be assumed to be normal USB.

  phy-supply:
    description:
      Regulator that powers VBUS

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

additionalProperties: false

if:
  properties:
    phy_type:
      const: hsic

  required:
    - phy_type

then:
  properties:
    clocks:
      maxItems: 3

    clock-names:
      maxItems: 3

    resets:
      maxItems: 2

    reset-names:
      maxItems: 2

examples:
  - |
    #include <dt-bindings/clock/sun9i-a80-usb.h>
    #include <dt-bindings/reset/sun9i-a80-usb.h>

    usbphy1: phy@a00800 {
        compatible = "allwinner,sun9i-a80-usb-phy";
        reg = <0x00a00800 0x4>;
        clocks = <&usb_clocks CLK_USB0_PHY>;
        clock-names = "phy";
        resets = <&usb_clocks RST_USB0_PHY>;
        reset-names = "phy";
        phy-supply = <&reg_usb1_vbus>;
        #phy-cells = <0>;
    };

  - |
    #include <dt-bindings/clock/sun9i-a80-usb.h>
    #include <dt-bindings/reset/sun9i-a80-usb.h>

    usbphy3: phy@a02800 {
        compatible = "allwinner,sun9i-a80-usb-phy";
        reg = <0x00a02800 0x4>;
        clocks = <&usb_clocks CLK_USB2_PHY>,
                 <&usb_clocks CLK_USB_HSIC>,
                 <&usb_clocks CLK_USB2_HSIC>;
        clock-names = "phy",
                      "hsic_12M",
                      "hsic_480M";
        resets = <&usb_clocks RST_USB2_PHY>,
                 <&usb_clocks RST_USB2_HSIC>;
        reset-names = "phy",
                      "hsic";
        phy_type = "hsic";
        phy-supply = <&reg_usb3_vbus>;
        #phy-cells = <0>;
    };
