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

title: Cypress CY8C95X0 I2C GPIO expander

maintainers:
  - Patrick Rudolph <patrick.rudolph@9elements.com>

description: |
  This supports the 20/40/60 pin Cypress CYC95x0 GPIO I2C expanders.
  Pin function configuration is performed on a per-pin basis.

properties:
  compatible:
    enum:
      - cypress,cy8c9520
      - cypress,cy8c9540
      - cypress,cy8c9560

  reg:
    maxItems: 1

  gpio-controller: true

  '#gpio-cells':
    description:
      The first cell is the GPIO number and the second cell specifies GPIO
      flags, as defined in <dt-bindings/gpio/gpio.h>.
    const: 2

  interrupts:
    maxItems: 1

  interrupt-controller: true

  '#interrupt-cells':
    const: 2

  gpio-line-names: true

  gpio-ranges:
    maxItems: 1

  gpio-reserved-ranges:
    maxItems: 1

  vdd-supply:
    description:
      Optional power supply.

patternProperties:
  '-pins$':
    type: object
    description:
      Pinctrl node's client devices use subnodes for desired pin configuration.
      Client device subnodes use below standard properties.
    $ref: pincfg-node.yaml#

    properties:
      pins:
        description:
          List of gpio pins affected by the properties specified in this
          subnode.
        items:
          pattern: '^gp([0-7][0-7])$'
        minItems: 1
        maxItems: 60

      function:
        description:
          Specify the alternative function to be configured for the specified
          pins.
        enum: [ gpio, pwm ]

      bias-pull-down: true

      bias-pull-up: true

      bias-disable: true

      output-high: true

      output-low: true

      drive-push-pull: true

      drive-open-drain: true

      drive-open-source: true

    required:
      - pins
      - function

    additionalProperties: false

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

additionalProperties: false

allOf:
  - $ref: pinctrl.yaml#

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

    i2c {
      #address-cells = <1>;
      #size-cells = <0>;

      pinctrl@20 {
        compatible = "cypress,cy8c9520";
        reg = <0x20>;
        gpio-controller;
        #gpio-cells = <2>;
        #interrupt-cells = <2>;
        interrupts = <GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH>;
        interrupt-controller;
        vdd-supply = <&p3v3>;
        gpio-reserved-ranges = <5 1>;
      };
    };
