| # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/mfd/adi,adp5585.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Analog Devices ADP5585 Keypad Decoder and I/O Expansion |
| |
| maintainers: |
| - Laurent Pinchart <laurent.pinchart@ideasonboard.com> |
| |
| description: |
| The ADP5585 is a 10/11 input/output port expander with a built in keypad |
| matrix decoder, programmable logic, reset generator, and PWM generator. |
| |
| properties: |
| compatible: |
| oneOf: |
| - items: |
| - enum: |
| - adi,adp5585-00 # Default |
| - adi,adp5585-01 # 11 GPIOs |
| - adi,adp5585-02 # No pull-up resistors by default on special pins |
| - adi,adp5585-03 # Alternate I2C address |
| - adi,adp5585-04 # Pull-down resistors on all pins by default |
| - const: adi,adp5585 |
| - items: |
| - enum: |
| - adi,adp5589-00 # Default |
| - adi,adp5589-01 # R4 defaulted to RESET1 output |
| - adi,adp5589-02 # Pull-down resistors by default on special pins |
| - const: adi,adp5589 |
| |
| reg: |
| maxItems: 1 |
| |
| interrupts: |
| maxItems: 1 |
| |
| vdd-supply: true |
| |
| reset-gpios: |
| maxItems: 1 |
| |
| gpio-controller: true |
| |
| '#gpio-cells': |
| const: 2 |
| |
| gpio-reserved-ranges: true |
| |
| "#pwm-cells": |
| const: 3 |
| |
| interrupt-controller: true |
| |
| '#interrupt-cells': |
| const: 2 |
| |
| poll-interval: |
| enum: [10, 20, 30, 40] |
| default: 10 |
| |
| adi,keypad-pins: |
| description: Specifies the pins used for the keypad matrix. |
| $ref: /schemas/types.yaml#/definitions/uint32-array |
| |
| adi,unlock-events: |
| description: |
| Specifies a maximum of 2 events that can be used to unlock the keypad. |
| If this property is set, the keyboard will be locked and only unlocked |
| after these keys/gpis are pressed. The value 127 serves as a wildcard which |
| means any key can be used for unlocking. |
| $ref: /schemas/types.yaml#/definitions/uint32-array |
| minItems: 1 |
| maxItems: 2 |
| items: |
| anyOf: |
| - minimum: 1 |
| maximum: 88 |
| - minimum: 97 |
| maximum: 115 |
| - const: 127 |
| |
| adi,unlock-trigger-sec: |
| description: |
| Defines the time in which the second unlock event must occur after the |
| first unlock event has occurred. |
| maximum: 7 |
| default: 0 |
| |
| adi,reset1-events: |
| description: |
| Defines the trigger events (key/gpi presses) that can generate reset |
| conditions one the reset1 block. |
| $ref: /schemas/types.yaml#/definitions/uint32-array |
| minItems: 1 |
| maxItems: 3 |
| |
| adi,reset2-events: |
| description: |
| Defines the trigger events (key/gpi presses) that can generate reset |
| conditions one the reset2 block. |
| $ref: /schemas/types.yaml#/definitions/uint32-array |
| minItems: 1 |
| maxItems: 2 |
| |
| adi,reset1-active-high: |
| description: Sets the reset1 signal as active high. |
| type: boolean |
| |
| adi,reset2-active-high: |
| description: Sets the reset2 signal as active high. |
| type: boolean |
| |
| adi,rst-passthrough-enable: |
| description: Allows the RST pin to override (OR with) the reset1 signal. |
| type: boolean |
| |
| adi,reset-trigger-ms: |
| description: |
| Defines the length of time that the reset events must be active before a |
| reset signal is generated. All events must be active at the same time for |
| the same duration. |
| enum: [0, 1000, 1500, 2000, 2500, 3000, 3500, 4000] |
| default: 0 |
| |
| adi,reset-pulse-width-us: |
| description: Defines the pulse width of the reset signals. |
| enum: [500, 1000, 2000, 10000] |
| default: 500 |
| |
| patternProperties: |
| "-hog(-[0-9]+)?$": |
| type: object |
| |
| required: |
| - gpio-hog |
| |
| dependencies: |
| linux,keymap: |
| - adi,keypad-pins |
| - interrupts |
| interrupt-controller: |
| - interrupts |
| adi,unlock-trigger-sec: |
| - adi,unlock-events |
| adi,reset1-active-high: |
| - adi,reset1-events |
| adi,rst-passtrough-enable: |
| - adi,reset1-events |
| adi,reset2-active-high: |
| - adi,reset2-events |
| |
| required: |
| - compatible |
| - reg |
| |
| allOf: |
| - $ref: /schemas/input/matrix-keymap.yaml# |
| - $ref: /schemas/input/input.yaml# |
| - if: |
| properties: |
| compatible: |
| contains: |
| const: adi,adp5585-01 |
| then: |
| properties: |
| adi,unlock-events: false |
| adi,unlock-trigger-sec: false |
| gpio-reserved-ranges: false |
| reset-gpios: false |
| adi,keypad-pins: |
| minItems: 2 |
| maxItems: 11 |
| items: |
| minimum: 0 |
| maximum: 10 |
| adi,reset1-events: |
| items: |
| anyOf: |
| - minimum: 1 |
| maximum: 30 |
| - minimum: 37 |
| maximum: 47 |
| adi,reset2-events: |
| items: |
| anyOf: |
| - minimum: 1 |
| maximum: 30 |
| - minimum: 37 |
| maximum: 47 |
| - if: |
| properties: |
| compatible: |
| contains: |
| enum: |
| - adi,adp5585-00 |
| - adi,adp5585-02 |
| - adi,adp5585-03 |
| - adi,adp5585-04 |
| then: |
| properties: |
| adi,unlock-events: false |
| adi,unlock-trigger-sec: false |
| adi,keypad-pins: |
| minItems: 2 |
| maxItems: 10 |
| items: |
| enum: [0, 1, 2, 3, 4, 6, 7, 8, 9, 10] |
| adi,reset1-events: |
| items: |
| anyOf: |
| - minimum: 1 |
| maximum: 25 |
| - enum: [37, 38, 39, 40, 41, 43, 44, 45, 46, 47] |
| adi,reset2-events: |
| items: |
| anyOf: |
| - minimum: 1 |
| maximum: 25 |
| - enum: [37, 38, 39, 40, 41, 43, 44, 45, 46, 47] |
| gpio-reserved-ranges: |
| maxItems: 1 |
| items: |
| items: |
| - const: 5 |
| - const: 1 |
| |
| - if: |
| properties: |
| compatible: |
| contains: |
| enum: |
| - adi,adp5589-00 |
| - adi,adp5589-01 |
| - adi,adp5589-02 |
| then: |
| properties: |
| gpio-reserved-ranges: false |
| adi,keypad-pins: |
| minItems: 2 |
| maxItems: 19 |
| items: |
| minimum: 0 |
| maximum: 18 |
| adi,reset1-events: |
| items: |
| anyOf: |
| - minimum: 1 |
| maximum: 88 |
| - minimum: 97 |
| maximum: 115 |
| adi,reset2-events: |
| items: |
| anyOf: |
| - minimum: 1 |
| maximum: 88 |
| - minimum: 97 |
| maximum: 115 |
| |
| unevaluatedProperties: false |
| |
| examples: |
| - | |
| #include <dt-bindings/input/input.h> |
| #include <dt-bindings/interrupt-controller/irq.h> |
| i2c { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| io-expander@34 { |
| compatible = "adi,adp5585-00", "adi,adp5585"; |
| reg = <0x34>; |
| |
| vdd-supply = <®_3v3>; |
| |
| gpio-controller; |
| #gpio-cells = <2>; |
| gpio-reserved-ranges = <5 1>; |
| |
| #pwm-cells = <3>; |
| |
| interrupts = <16 IRQ_TYPE_EDGE_FALLING>; |
| interrupt-parent = <&gpio>; |
| |
| adi,reset1-events = <1 43>; |
| adi,reset2-events = <2 3>; |
| adi,reset-trigger-ms = <2000>; |
| |
| /* |
| * col0, col1, col2 |
| * row0, row1, row2 |
| */ |
| adi,keypad-pins = <0 1 2 6 7 8>; |
| |
| linux,keymap = < |
| MATRIX_KEY(0x00, 0x00, KEY_1) |
| MATRIX_KEY(0x00, 0x01, KEY_2) |
| MATRIX_KEY(0x00, 0x02, KEY_3) |
| |
| MATRIX_KEY(0x01, 0x00, KEY_A) |
| MATRIX_KEY(0x01, 0x01, KEY_B) |
| MATRIX_KEY(0x01, 0x02, KEY_C) |
| |
| MATRIX_KEY(0x02, 0x00, BTN_1) |
| MATRIX_KEY(0x02, 0x01, BTN_2) |
| MATRIX_KEY(0x02, 0x02, BTN_3) |
| >; |
| }; |
| }; |
| |
| ... |