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

title: USB OHCI Controller

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

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - allwinner,sun4i-a10-ohci
              - allwinner,sun50i-a64-ohci
              - allwinner,sun50i-h6-ohci
              - allwinner,sun50i-h616-ohci
              - allwinner,sun5i-a13-ohci
              - allwinner,sun6i-a31-ohci
              - allwinner,sun7i-a20-ohci
              - allwinner,sun8i-a23-ohci
              - allwinner,sun8i-a83t-ohci
              - allwinner,sun8i-h3-ohci
              - allwinner,sun8i-r40-ohci
              - allwinner,sun8i-v3s-ohci
              - allwinner,sun9i-a80-ohci
              - allwinner,sun20i-d1-ohci
              - brcm,bcm3384-ohci
              - brcm,bcm63268-ohci
              - brcm,bcm6328-ohci
              - brcm,bcm6358-ohci
              - brcm,bcm6362-ohci
              - brcm,bcm6368-ohci
              - brcm,bcm7125-ohci
              - brcm,bcm7346-ohci
              - brcm,bcm7358-ohci
              - brcm,bcm7360-ohci
              - brcm,bcm7362-ohci
              - brcm,bcm7420-ohci
              - brcm,bcm7425-ohci
              - brcm,bcm7435-ohci
              - hpe,gxp-ohci
              - ibm,476gtr-ohci
              - ingenic,jz4740-ohci
              - rockchip,rk3588-ohci
              - snps,hsdk-v1.0-ohci
          - const: generic-ohci
      - enum:
          - generic-ohci
          - ti,ohci-omap3
      - items:
          - enum:
              - cavium,octeon-6335-ohci
              - nintendo,hollywood-usb-ohci
              - nxp,ohci-nxp
              - st,spear600-ohci
          - const: usb-ohci

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  resets:
    minItems: 1
    maxItems: 2

  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.

  remote-wakeup-connected:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Remote wakeup is wired on the platform.

  no-big-frame-no:
    $ref: /schemas/types.yaml#/definitions/flag
    description:
      Set if frame_no lives in bits [15:0] of HCCA

  num-ports:
    $ref: /schemas/types.yaml#/definitions/uint32
    description:
      Overrides the detected port count

  phys:
    minItems: 1
    maxItems: 3

  phy-names:
    const: usb

  iommus:
    maxItems: 1

  dr_mode:
    enum:
      - host
      - otg

  transceiver:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      The associated ISP1301 device. Necessary for the UDC controller for
      connecting to the USB physical layer.

required:
  - compatible
  - reg
  - interrupts

allOf:
  - $ref: usb-hcd.yaml
  - if:
      not:
        properties:
          compatible:
            contains:
              const: nxp,ohci-nxp
    then:
      properties:
        transceiver: false
  - if:
      properties:
        compatible:
          contains:
            const: rockchip,rk3588-ohci
    then:
      properties:
        clocks:
          minItems: 4
    else:
      properties:
        clocks:
          minItems: 1
          maxItems: 3

unevaluatedProperties: false

examples:
  - |
      ohci0: usb@1c14400 {
          compatible = "allwinner,sun4i-a10-ohci", "generic-ohci";
          reg = <0x01c14400 0x100>;
          interrupts = <64>;
          clocks = <&usb_clk 6>, <&ahb_gates 2>;
          phys = <&usbphy 1>;
          phy-names = "usb";
      };

...
