# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/usb/generic-ehci.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: USB EHCI Controller

maintainers:
  - Greg Kroah-Hartman <gregkh@linuxfoundation.org>

allOf:
  - $ref: usb-hcd.yaml
  - if:
      properties:
        compatible:
          not:
            contains:
              const: ibm,usb-ehci-440epx
    then:
      properties:
        reg:
          maxItems: 1

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - allwinner,sun4i-a10-ehci
              - allwinner,sun50i-a100-ehci
              - allwinner,sun50i-a64-ehci
              - allwinner,sun50i-h6-ehci
              - allwinner,sun50i-h616-ehci
              - allwinner,sun55i-a523-ehci
              - allwinner,sun5i-a13-ehci
              - allwinner,sun6i-a31-ehci
              - allwinner,sun7i-a20-ehci
              - allwinner,sun8i-a23-ehci
              - allwinner,sun8i-a83t-ehci
              - allwinner,sun8i-h3-ehci
              - allwinner,sun8i-r40-ehci
              - allwinner,sun8i-v3s-ehci
              - allwinner,sun9i-a80-ehci
              - allwinner,sun20i-d1-ehci
              - aspeed,ast2400-ehci
              - aspeed,ast2500-ehci
              - aspeed,ast2600-ehci
              - brcm,bcm3384-ehci
              - brcm,bcm63268-ehci
              - brcm,bcm6328-ehci
              - brcm,bcm6358-ehci
              - brcm,bcm6362-ehci
              - brcm,bcm6368-ehci
              - brcm,bcm7125-ehci
              - brcm,bcm7346-ehci
              - brcm,bcm7358-ehci
              - brcm,bcm7360-ehci
              - brcm,bcm7362-ehci
              - brcm,bcm7420-ehci
              - brcm,bcm7425-ehci
              - brcm,bcm7435-ehci
              - hpe,gxp-ehci
              - ibm,476gtr-ehci
              - nxp,lpc1850-ehci
              - qca,ar7100-ehci
              - rockchip,rk3588-ehci
              - snps,hsdk-v1.0-ehci
              - socionext,uniphier-ehci
          - const: generic-ehci
      - items:
          - enum:
              - atmel,at91sam9g45-ehci
              - cavium,octeon-6335-ehci
              - ibm,usb-ehci-440epx
              - ibm,usb-ehci-460ex
              - nintendo,hollywood-usb-ehci
              - st,spear600-ehci
          - const: usb-ehci
      - enum:
          - generic-ehci
          - marvell,ac5-ehci
          - marvell,armada-3700-ehci
          - marvell,orion-ehci
          - nuvoton,npcm750-ehci
          - nuvoton,npcm845-ehci
          - ti,ehci-omap
          - usb-ehci
          - via,vt8500-ehci

  reg:
    minItems: 1
    maxItems: 2

  interrupts:
    maxItems: 1

  resets:
    minItems: 1
    maxItems: 4

  clocks:
    minItems: 1
    maxItems: 4
    description: |
      In case the Renesas R-Car Gen3 SoCs:
        - if a host only channel: first clock should be host.
        - if a USB DRD channel: first clock should be host and second
          one should be peripheral

  power-domains:
    maxItems: 1

  big-endian:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Set this flag for HCDs with big endian descriptors and big
      endian registers.

  big-endian-desc:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Set this flag for HCDs with big endian descriptors.

  big-endian-regs:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Set this flag for HCDs with big endian registers.

  has-transaction-translator:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Set this flag if EHCI has a Transaction Translator built into
      the root hub.

  needs-reset-on-resume:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Set this flag to force EHCI reset after resume.

  spurious-oc:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Set this flag to indicate that the hardware sometimes turns on
      the OC bit when an over-current isn't actually present.

  phys:
    minItems: 1
    maxItems: 3

  phy-names:
    const: usb

  iommus:
    maxItems: 1

  dr_mode:
    enum:
      - host
      - otg

required:
  - compatible
  - reg
  - interrupts

unevaluatedProperties: false

examples:
  - |
    usb@e0000300 {
        compatible = "ibm,usb-ehci-440epx", "usb-ehci";
        interrupt-parent = <&UIC0>;
        interrupts = <0x1a 4>;
        reg = <0xe0000300 90>, <0xe0000390 70>;
        big-endian;
    };

  - |
    ehci0: usb@1c14000 {
        compatible = "allwinner,sun4i-a10-ehci", "generic-ehci";
        reg = <0x01c14000 0x100>;
        interrupts = <39>;
        clocks = <&ahb_gates 1>;
        phys = <&usbphy 1>;
        phy-names = "usb";
    };

...
