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

title: Renesas I3C Bus Interface

maintainers:
  - Wolfram Sang <wsa+renesas@sang-engineering.com>
  - Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>

properties:
  compatible:
    oneOf:
      - items:
          - enum:
              - renesas,r9a08g045-i3c # RZ/G3S
              - renesas,r9a09g047-i3c # RZ/G3E
      - items:
          - enum:
              - renesas,r9a09g056-i3c # RZ/V2N
              - renesas,r9a09g057-i3c # RZ/V2H(P)
          - const: renesas,r9a09g047-i3c

  reg:
    maxItems: 1

  interrupts:
    items:
      - description: Non-recoverable internal error interrupt
      - description: Normal transfer error interrupt
      - description: Normal transfer abort interrupt
      - description: Normal response status buffer full interrupt
      - description: Normal command buffer empty interrupt
      - description: Normal IBI status buffer full interrupt
      - description: Normal Rx data buffer full interrupt
      - description: Normal Tx data buffer empty interrupt
      - description: Normal receive status buffer full interrupt
      - description: START condition detection interrupt
      - description: STOP condition detection interrupt
      - description: Transmit end interrupt
      - description: NACK detection interrupt
      - description: Arbitration lost interrupt
      - description: Timeout detection interrupt
      - description: Wake-up condition detection interrupt
      - description: HDR Exit Pattern detection interrupt
    minItems: 16

  interrupt-names:
    items:
      - const: ierr
      - const: terr
      - const: abort
      - const: resp
      - const: cmd
      - const: ibi
      - const: rx
      - const: tx
      - const: rcv
      - const: st
      - const: sp
      - const: tend
      - const: nack
      - const: al
      - const: tmo
      - const: wu
      - const: exit
    minItems: 16

  clocks:
    items:
      - description: APB bus clock
      - description: transfer clock
      - description: SFRs clock
    minItems: 2

  clock-names:
    items:
      - const: pclk
      - const: tclk
      - const: pclkrw
    minItems: 2

  power-domains:
    maxItems: 1

  resets:
    items:
      - description: Reset signal
      - description: APB interface reset signal/SCAN reset signal

  reset-names:
    items:
      - const: presetn
      - const: tresetn

required:
  - compatible
  - reg
  - interrupts
  - interrupt-names
  - clock-names
  - clocks
  - power-domains
  - resets
  - reset-names

allOf:
  - $ref: i3c.yaml#

  - if:
      properties:
        compatible:
          contains:
            const: renesas,r9a08g045-i3c
    then:
      properties:
        clocks:
          maxItems: 2
        clock-names:
          maxItems: 2
        interrupts:
          minItems: 17
        interrupt-names:
          minItems: 17

  - if:
      properties:
        compatible:
          contains:
            const: renesas,r9a09g047-i3c
    then:
      properties:
        clocks:
          minItems: 3
        clock-names:
          minItems: 3
        interrupts:
          maxItems: 16
        interrupt-names:
          maxItems: 16

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/clock/r9a08g045-cpg.h>
    #include <dt-bindings/interrupt-controller/arm-gic.h>

    i3c@1005b000 {
        compatible = "renesas,r9a08g045-i3c";
        reg = <0x1005b000 0x1000>;
        clocks = <&cpg CPG_MOD R9A08G045_I3C_PCLK>,
                 <&cpg CPG_MOD R9A08G045_I3C_TCLK>;
        clock-names = "pclk", "tclk";
        interrupts = <GIC_SPI 289 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 290 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 293 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 294 IRQ_TYPE_EDGE_RISING>,
                     <GIC_SPI 295 IRQ_TYPE_EDGE_RISING>,
                     <GIC_SPI 296 IRQ_TYPE_EDGE_RISING>,
                     <GIC_SPI 297 IRQ_TYPE_EDGE_RISING>,
                     <GIC_SPI 298 IRQ_TYPE_EDGE_RISING>,
                     <GIC_SPI 299 IRQ_TYPE_EDGE_RISING>,
                     <GIC_SPI 304 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 305 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 307 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 308 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 309 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 310 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 311 IRQ_TYPE_LEVEL_HIGH>,
                     <GIC_SPI 306 IRQ_TYPE_LEVEL_HIGH>;
        interrupt-names = "ierr", "terr", "abort", "resp",
                          "cmd", "ibi", "rx", "tx", "rcv",
                          "st", "sp", "tend", "nack",
                          "al", "tmo", "wu", "exit";
        resets = <&cpg R9A08G045_I3C_PRESETN>,
                 <&cpg R9A08G045_I3C_TRESETN>;
        reset-names = "presetn", "tresetn";
        power-domains = <&cpg>;
        #address-cells = <3>;
        #size-cells = <0>;
    };
...
