# 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 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 #include 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) >; }; }; ...