# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mmc/renesas,mmcif.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Renesas Multi Media Card Interface (MMCIF) Controller

maintainers:
  - Wolfram Sang <wsa+renesas@sang-engineering.com>

allOf:
  - $ref: "mmc-controller.yaml"

properties:
  compatible:
    items:
      - enum:
          - renesas,mmcif-r7s72100 # RZ/A1H
          - renesas,mmcif-r8a73a4  # R-Mobile APE6
          - renesas,mmcif-r8a7740  # R-Mobile A1
          - renesas,mmcif-r8a7742  # RZ/G1H
          - renesas,mmcif-r8a7743  # RZ/G1M
          - renesas,mmcif-r8a7744  # RZ/G1N
          - renesas,mmcif-r8a7745  # RZ/G1E
          - renesas,mmcif-r8a7778  # R-Car M1A
          - renesas,mmcif-r8a7790  # R-Car H2
          - renesas,mmcif-r8a7791  # R-Car M2-W
          - renesas,mmcif-r8a7793  # R-Car M2-N
          - renesas,mmcif-r8a7794  # R-Car E2
          - renesas,mmcif-sh73a0   # SH-Mobile AG5
      - const: renesas,sh-mmcif

  reg:
    maxItems: 1

  interrupts: true

  clocks:
    maxItems: 1

  power-domains:
    maxItems: 1

  resets:
    maxItems: 1

  dmas:
    minItems: 2
    maxItems: 4
    description:
      Must contain a list of pairs of references to DMA specifiers, one for
      transmission, and one for reception.

  dma-names:
    minItems: 2
    maxItems: 4
    items:
      enum:
        - tx
        - rx

  max-frequency: true

required:
  - compatible
  - reg
  - interrupts
  - clocks
  - power-domains

if:
  properties:
    compatible:
      contains:
        const: renesas,mmcif-r7s72100
then:
  properties:
    interrupts:
      items:
        - description: Error interrupt
        - description: Normal operation interrupt
        - description: Card detection interrupt
else:
  if:
    properties:
      compatible:
        contains:
          enum:
            - renesas,mmcif-r8a7740
            - renesas,mmcif-sh73a0
  then:
    properties:
      interrupts:
        items:
          - description: Error interrupt
          - description: Normal operation interrupt
  else:
    if:
      properties:
        compatible:
          contains:
            enum:
              - renesas,mmcif-r8a73a4
              - renesas,mmcif-r8a7778
    then:
      properties:
        interrupts:
          maxItems: 1
    else:
      properties:
        interrupts:
          maxItems: 1
      required:
        - resets

unevaluatedProperties: 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>

    mmcif0: mmc@ee200000 {
            compatible = "renesas,mmcif-r8a7790", "renesas,sh-mmcif";
            reg = <0xee200000 0x80>;
            interrupts = <GIC_SPI 169 IRQ_TYPE_LEVEL_HIGH>;
            clocks = <&cpg CPG_MOD 315>;
            power-domains = <&sysc R8A7790_PD_ALWAYS_ON>;
            resets = <&cpg 315>;
            dmas = <&dmac0 0xd1>, <&dmac0 0xd2>, <&dmac1 0xd1>, <&dmac1 0xd2>;
            dma-names = "tx", "rx", "tx", "rx";
            max-frequency = <97500000>;
    };
