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