linux/Documentation/devicetree/bindings/input/adi,adp5588.yaml

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

title: Analog Devices ADP5588 Keypad Controller

maintainers:
  - Nuno Sá <[email protected]>

description: |
  Analog Devices Mobile I/O Expander and QWERTY Keypad Controller
  https://www.analog.com/media/en/technical-documentation/data-sheets/ADP5588.pdf

allOf:
  - $ref: matrix-keymap.yaml#
  - $ref: input.yaml#

properties:
  compatible:
    enum:
      - adi,adp5587
      - adi,adp5588

  reg:
    maxItems: 1

  vcc-supply:
    description: Supply Voltage Input

  reset-gpios:
    description:
      If specified, it will be asserted during driver probe. As the line is
      active low, it should be marked GPIO_ACTIVE_LOW.
    maxItems: 1

  interrupts:
    maxItems: 1

  gpio-controller:
    description:
      This property applies if either keypad,num-rows lower than 8 or
      keypad,num-columns lower than 10.

  '#gpio-cells':
    const: 2

  interrupt-controller:
    description:
      This property applies if either keypad,num-rows lower than 8 or
      keypad,num-columns lower than 10. This property is optional if
      keypad,num-rows or keypad,num-columns are not specified as the
      device is then configured to be used purely for gpio during which
      interrupts may or may not be utilized.

  '#interrupt-cells':
    const: 2

  adi,unlock-keys:
    description:
      Specifies a maximum of 2 keys that can be used to unlock the keypad.
      If this property is set, the keyboard will be locked and only unlocked
      after these keys are pressed. If only one key is set, a double click is
      needed to unlock the keypad. The value of this property cannot be bigger
      or equal than keypad,num-rows * keypad,num-columns.
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 1
    maxItems: 2

dependencies:
  keypad,num-rows:
    - linux,keymap
    - keypad,num-columns
  keypad,num-columns:
    - linux,keymap
    - keypad,num-rows
  linux,keymap:
    - keypad,num-rows
    - keypad,num-columns
    - interrupts
  interrupt-controller:
    - interrupts

required:
  - compatible
  - reg

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/input/input.h>
    #include <dt-bindings/gpio/gpio.h>
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        keys@34 {
            compatible = "adi,adp5588";
            reg = <0x34>;

            vcc-supply = <&vcc>;
            interrupts = <21 IRQ_TYPE_EDGE_FALLING>;
            interrupt-parent = <&gpio>;
            reset-gpios = <&gpio 20 GPIO_ACTIVE_LOW>;

            keypad,num-rows = <1>;
            keypad,num-columns = <9>;
            linux,keymap = <
                MATRIX_KEY(0x00, 0x00, KEY_1)
                MATRIX_KEY(0x00, 0x01, KEY_2)
                MATRIX_KEY(0x00, 0x02, KEY_3)
                MATRIX_KEY(0x00, 0x03, KEY_4)
                MATRIX_KEY(0x00, 0x04, KEY_5)
                MATRIX_KEY(0x00, 0x05, KEY_6)
                MATRIX_KEY(0x00, 0x06, KEY_7)
                MATRIX_KEY(0x00, 0x07, KEY_8)
                MATRIX_KEY(0x00, 0x08, KEY_9)
            >;
        };
    };

  - |
    #include <dt-bindings/gpio/gpio.h>
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;
        gpio@34 {
            compatible = "adi,adp5588";
            reg = <0x34>;

            #gpio-cells = <2>;
            gpio-controller;
        };
    };

...