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

title: Marvell PXA GPIO controller

maintainers:
  - Linus Walleij <linus.walleij@linaro.org>
  - Bartosz Golaszewski <bgolaszewski@baylibre.com>
  - Rob Herring <robh+dt@kernel.org>

allOf:
  - if:
      properties:
        compatible:
          contains:
            enum:
              - intel,pxa25x-gpio
              - intel,pxa26x-gpio
              - intel,pxa27x-gpio
              - intel,pxa3xx-gpio
    then:
      properties:
        interrupts:
          minItems: 3
          maxItems: 3
        interrupt-names:
          items:
            - const: gpio0
            - const: gpio1
            - const: gpio_mux
  - if:
      properties:
        compatible:
          contains:
            enum:
              - marvell,mmp-gpio
              - marvell,mmp2-gpio
    then:
      properties:
        interrupts:
          maxItems: 1
        interrupt-names:
          items:
            - const: gpio_mux

properties:
  $nodename:
    pattern: '^gpio@[0-9a-f]+$'

  compatible:
    enum:
      - intel,pxa25x-gpio
      - intel,pxa26x-gpio
      - intel,pxa27x-gpio
      - intel,pxa3xx-gpio
      - marvell,mmp-gpio
      - marvell,mmp2-gpio
      - marvell,pxa93x-gpio

  reg:
    maxItems: 1

  clocks:
    maxItems: 1

  resets:
    maxItems: 1

  ranges: true

  '#address-cells':
    const: 1

  '#size-cells':
    const: 1

  gpio-controller: true

  '#gpio-cells':
    const: 2

  gpio-ranges:
    maxItems: 1

  interrupts: true

  interrupt-names: true

  interrupt-controller: true

  '#interrupt-cells':
    const: 2

patternProperties:
  '^gpio@[0-9a-f]*$':
    type: object
    properties:
      reg:
        maxItems: 1

    required:
      - reg

    additionalProperties: false

required:
  - compatible
  - '#address-cells'
  - '#size-cells'
  - reg
  - gpio-controller
  - '#gpio-cells'
  - interrupts
  - interrupt-names
  - interrupt-controller
  - '#interrupt-cells'

additionalProperties: false

examples:
  - |
    #include <dt-bindings/clock/pxa-clock.h>
    gpio@40e00000 {
        compatible = "intel,pxa3xx-gpio";
        #address-cells = <1>;
        #size-cells = <1>;
        reg = <0x40e00000 0x10000>;
        gpio-controller;
        #gpio-cells = <2>;
        interrupts = <8>, <9>, <10>;
        interrupt-names = "gpio0", "gpio1", "gpio_mux";
        clocks = <&clks CLK_GPIO>;
        interrupt-controller;
        #interrupt-cells = <2>;
    };
  - |
    #include <dt-bindings/clock/marvell,pxa910.h>
    gpio@d4019000 {
        compatible = "marvell,mmp-gpio";
        #address-cells = <1>;
        #size-cells = <1>;
        reg = <0xd4019000 0x1000>;
        gpio-controller;
        #gpio-cells = <2>;
        interrupts = <49>;
        interrupt-names = "gpio_mux";
        clocks = <&soc_clocks PXA910_CLK_GPIO>;
        resets = <&soc_clocks PXA910_CLK_GPIO>;
        interrupt-controller;
        #interrupt-cells = <2>;
        ranges;

        gpio@d4019000 {
            reg = <0xd4019000 0x4>;
        };

        gpio@d4019004 {
            reg = <0xd4019004 0x4>;
        };

        gpio@d4019008 {
            reg = <0xd4019008 0x4>;
        };

        gpio@d4019100 {
            reg = <0xd4019100 0x4>;
        };
     };

...
