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

title: EP93xx GPIO controller

maintainers:
  - Linus Walleij <linus.walleij@linaro.org>
  - Bartosz Golaszewski <brgl@bgdev.pl>
  - Nikita Shubin <nikita.shubin@maquefel.me>

properties:
  compatible:
    oneOf:
      - const: cirrus,ep9301-gpio
      - items:
          - enum:
              - cirrus,ep9302-gpio
              - cirrus,ep9307-gpio
              - cirrus,ep9312-gpio
              - cirrus,ep9315-gpio
          - const: cirrus,ep9301-gpio

  reg:
    minItems: 2
    items:
      - description: data register
      - description: direction register
      - description: interrupt registers base

  reg-names:
    minItems: 2
    items:
      - const: data
      - const: dir
      - const: intr

  gpio-controller: true

  gpio-ranges: true

  "#gpio-cells":
    const: 2

  interrupt-controller: true

  "#interrupt-cells":
    const: 2

  interrupts:
    oneOf:
      - maxItems: 1
      - description: port F has dedicated irq line for each gpio line
        maxItems: 8

required:
  - compatible
  - reg
  - gpio-controller
  - "#gpio-cells"

additionalProperties: false

examples:
  - |
    gpio@80840000 {
      compatible = "cirrus,ep9301-gpio";
      reg = <0x80840000 0x04>,
            <0x80840010 0x04>,
            <0x80840090 0x1c>;
      reg-names = "data", "dir", "intr";
      gpio-controller;
      #gpio-cells = <2>;
      interrupt-controller;
      #interrupt-cells = <2>;
      interrupt-parent = <&vic1>;
      interrupts = <27>;
    };

    gpio@80840004 {
      compatible = "cirrus,ep9301-gpio";
      reg = <0x80840004 0x04>,
            <0x80840014 0x04>,
            <0x808400ac 0x1c>;
      reg-names = "data", "dir", "intr";
      gpio-controller;
      #gpio-cells = <2>;
      interrupt-controller;
      #interrupt-cells = <2>;
      interrupt-parent = <&vic1>;
      interrupts = <27>;
    };

    gpio@80840008 {
      compatible = "cirrus,ep9301-gpio";
      reg = <0x80840008 0x04>,
            <0x80840018 0x04>;
      reg-names = "data", "dir";
      gpio-controller;
      #gpio-cells = <2>;
    };

    gpio@8084000c {
      compatible = "cirrus,ep9301-gpio";
      reg = <0x8084000c 0x04>,
            <0x8084001c 0x04>;
      reg-names = "data", "dir";
      gpio-controller;
      #gpio-cells = <2>;
    };

    gpio@80840020 {
      compatible = "cirrus,ep9301-gpio";
      reg = <0x80840020 0x04>,
            <0x80840024 0x04>;
      reg-names = "data", "dir";
      gpio-controller;
      #gpio-cells = <2>;
    };

    gpio@80840030 {
      compatible = "cirrus,ep9301-gpio";
      reg = <0x80840030 0x04>,
            <0x80840034 0x04>,
            <0x8084004c 0x1c>;
      reg-names = "data", "dir", "intr";
      gpio-controller;
      #gpio-cells = <2>;
      interrupt-controller;
      #interrupt-cells = <2>;
      interrupts-extended = <&vic0 19>, <&vic0 20>,
                            <&vic0 21>, <&vic0 22>,
                            <&vic1 15>, <&vic1 16>,
                            <&vic1 17>, <&vic1 18>;
    };

    gpio@80840038 {
      compatible = "cirrus,ep9301-gpio";
      reg = <0x80840038 0x04>,
            <0x8084003c 0x04>;
      reg-names = "data", "dir";
      gpio-controller;
      #gpio-cells = <2>;
    };

    gpio@80840040 {
      compatible = "cirrus,ep9301-gpio";
      reg = <0x80840040 0x04>,
            <0x80840044 0x04>;
      reg-names = "data", "dir";
      gpio-controller;
      #gpio-cells = <2>;
    };

...
