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

title: Renesas USBHS (HS-USB) controller

maintainers:
  - Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>

properties:
  compatible:
    oneOf:
      - items:
          - const: renesas,usbhs-r7s72100 # RZ/A1
          - const: renesas,rza1-usbhs

      - items:
          - enum:
              - renesas,usbhs-r7s9210   # RZ/A2
              - renesas,usbhs-r9a07g043 # RZ/G2UL
              - renesas,usbhs-r9a07g044 # RZ/G2{L,LC}
              - renesas,usbhs-r9a07g054 # RZ/V2L
          - const: renesas,rza2-usbhs

      - items:
          - enum:
              - renesas,usbhs-r8a7742  # RZ/G1H
              - renesas,usbhs-r8a7743  # RZ/G1M
              - renesas,usbhs-r8a7744  # RZ/G1N
              - renesas,usbhs-r8a7745  # RZ/G1E
              - renesas,usbhs-r8a77470 # RZ/G1C
              - renesas,usbhs-r8a7790  # R-Car H2
              - renesas,usbhs-r8a7791  # R-Car M2-W
              - renesas,usbhs-r8a7792  # R-Car V2H
              - renesas,usbhs-r8a7793  # R-Car M2-N
              - renesas,usbhs-r8a7794  # R-Car E2
          - const: renesas,rcar-gen2-usbhs

      - items:
          - enum:
              - renesas,usbhs-r8a774a1 # RZ/G2M
              - renesas,usbhs-r8a774b1 # RZ/G2N
              - renesas,usbhs-r8a774c0 # RZ/G2E
              - renesas,usbhs-r8a774e1 # RZ/G2H
              - renesas,usbhs-r8a7795  # R-Car H3
              - renesas,usbhs-r8a7796  # R-Car M3-W
              - renesas,usbhs-r8a77961 # R-Car M3-W+
              - renesas,usbhs-r8a77965 # R-Car M3-N
              - renesas,usbhs-r8a77990 # R-Car E3
              - renesas,usbhs-r8a77995 # R-Car D3
          - const: renesas,rcar-gen3-usbhs

  reg:
    maxItems: 1

  clocks:
    minItems: 1
    items:
      - description: USB 2.0 host
      - description: USB 2.0 peripheral
      - description: USB 2.0 clock selector

  interrupts:
    minItems: 1
    maxItems: 4

  renesas,buswait:
    $ref: /schemas/types.yaml#/definitions/uint32
    description: |
      Integer to use BUSWAIT register.

  renesas,enable-gpio:
    maxItems: 1
    description: |
      gpio specifier to check GPIO determining if USB function should be
      enabled.

  phys:
    maxItems: 1

  phy-names:
    items:
      - const: usb

  dmas:
    minItems: 2
    maxItems: 4

  dma-names:
    minItems: 2
    items:
      - const: ch0
      - const: ch1
      - const: ch2
      - const: ch3

  dr_mode: true

  power-domains:
    maxItems: 1

  resets:
    minItems: 1
    items:
      - description: USB 2.0 host
      - description: USB 2.0 peripheral

required:
  - compatible
  - reg
  - clocks
  - interrupts

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - renesas,usbhs-r9a07g043
              - renesas,usbhs-r9a07g044
              - renesas,usbhs-r9a07g054
    then:
      properties:
        interrupts:
          items:
            - description: U2P_IXL_INT
            - description: U2P_INT_DMA[0]
            - description: U2P_INT_DMA[1]
            - description: U2P_INT_DMAERR
      required:
        - resets
    else:
      properties:
        interrupts:
          maxItems: 1

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/r8a7790-cpg-mssr.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/power/r8a7790-sysc.h>

    usbhs: usb@e6590000 {
        compatible = "renesas,usbhs-r8a7790", "renesas,rcar-gen2-usbhs";
        reg = <0xe6590000 0x100>;
        interrupts = <GIC_SPI 107 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&cpg CPG_MOD 704>;
    };