1# SPDX-License-Identifier: GPL-2.0-only
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/input/gpio-keys.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: GPIO attached keys
8
9maintainers:
10  - Rob Herring <robh@kernel.org>
11
12properties:
13  compatible:
14    enum:
15      - gpio-keys
16      - gpio-keys-polled
17
18  autorepeat: true
19
20  label:
21    description: Name of entire device
22
23  poll-interval: true
24
25patternProperties:
26  "^(button|event|key|switch|(button|event|key|switch)-[a-z0-9-]+|[a-z0-9-]+-(button|event|key|switch))$":
27    $ref: input.yaml#
28
29    properties:
30      gpios:
31        maxItems: 1
32
33      interrupts:
34        oneOf:
35          - items:
36              - description: Optional key interrupt or wakeup interrupt
37          - items:
38              - description: Key interrupt
39              - description: Wakeup interrupt
40
41      interrupt-names:
42        description:
43          Optional interrupt names, can be used to specify a separate dedicated
44          wake-up interrupt in addition to the gpio irq
45        oneOf:
46          - items:
47              - enum: [ irq, wakeup ]
48          - items:
49              - const: irq
50              - const: wakeup
51
52      label:
53        description: Descriptive name of the key.
54
55      linux,code:
56        description: Key / Axis code to emit.
57
58      linux,input-type:
59        default: 1  # EV_KEY
60
61      linux,input-value:
62        description: |
63          If linux,input-type is EV_ABS or EV_REL then this
64          value is sent for events this button generates when pressed.
65          EV_ABS/EV_REL axis will generate an event with a value of 0
66          when all buttons with linux,input-type == type and
67          linux,code == axis are released. This value is interpreted
68          as a signed 32 bit value, e.g. to make a button generate a
69          value of -1 use:
70
71          linux,input-value = <0xffffffff>; /* -1 */
72
73        $ref: /schemas/types.yaml#/definitions/uint32
74
75      debounce-interval:
76        description:
77          Debouncing interval time in milliseconds. If not specified defaults to 5.
78        $ref: /schemas/types.yaml#/definitions/uint32
79
80        default: 5
81
82      wakeup-source:
83        description: Button can wake-up the system.
84
85      wakeup-event-action:
86        description: |
87          Specifies whether the key should wake the system when asserted, when
88          deasserted, or both. This property is only valid for keys that wake up the
89          system (e.g., when the "wakeup-source" property is also provided).
90
91          Supported values are defined in linux-event-codes.h:
92
93            EV_ACT_ANY        - both asserted and deasserted
94            EV_ACT_ASSERTED   - asserted
95            EV_ACT_DEASSERTED - deasserted
96        $ref: /schemas/types.yaml#/definitions/uint32
97        enum: [0, 1, 2]
98
99      linux,can-disable:
100        description:
101          Indicates that button is connected to dedicated (not shared) interrupt
102          which can be disabled to suppress events from the button.
103        type: boolean
104
105    required:
106      - linux,code
107
108    anyOf:
109      - required:
110          - interrupts
111      - required:
112          - interrupts-extended
113      - required:
114          - gpios
115
116    allOf:
117      - if:
118          properties:
119            interrupts:
120              minItems: 2
121          required:
122            - interrupts
123        then:
124          properties:
125            interrupt-names:
126              minItems: 2
127          required:
128            - interrupt-names
129
130    dependencies:
131      wakeup-event-action: [ wakeup-source ]
132      linux,input-value: [ gpios ]
133
134    unevaluatedProperties: false
135
136allOf:
137  - $ref: input.yaml#
138  - if:
139      properties:
140        compatible:
141          const: gpio-keys-polled
142    then:
143      required:
144        - poll-interval
145    else:
146      properties:
147        poll-interval: false
148
149additionalProperties: false
150
151examples:
152  - |
153    #include <dt-bindings/interrupt-controller/irq.h>
154
155    gpio-keys {
156        compatible = "gpio-keys";
157        autorepeat;
158
159        key-up {
160            label = "GPIO Key UP";
161            linux,code = <103>;
162            gpios = <&gpio1 0 1>;
163        };
164
165        key-down {
166            label = "GPIO Key DOWN";
167            linux,code = <108>;
168            interrupts = <1 IRQ_TYPE_EDGE_FALLING>;
169        };
170
171        key-wakeup {
172            label = "GPIO Key WAKEUP";
173            linux,code = <143>;
174            interrupts-extended = <&intc 2 IRQ_TYPE_EDGE_FALLING>,
175                                  <&intc_wakeup 0 IRQ_TYPE_LEVEL_HIGH>;
176            interrupt-names = "irq", "wakeup";
177            wakeup-source;
178        };
179    };
180
181...
182