Documentation / devicetree / bindings / input / gpio-keys.yaml


Based on kernel version 6.11. Page generated on 2024-09-24 08:21 EST.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
# SPDX-License-Identifier: GPL-2.0-only
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/gpio-keys.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: GPIO attached keys

maintainers:
  - Rob Herring <robh@kernel.org>

properties:
  compatible:
    enum:
      - gpio-keys
      - gpio-keys-polled

  autorepeat: true

  label:
    description: Name of entire device

  poll-interval: true

patternProperties:
  "^(button|event|key|switch|(button|event|key|switch)-[a-z0-9-]+|[a-z0-9-]+-(button|event|key|switch))$":
    $ref: input.yaml#

    properties:
      gpios:
        maxItems: 1

      interrupts:
        oneOf:
          - items:
              - description: Optional key interrupt or wakeup interrupt
          - items:
              - description: Key interrupt
              - description: Wakeup interrupt

      interrupt-names:
        description:
          Optional interrupt names, can be used to specify a separate dedicated
          wake-up interrupt in addition to the gpio irq
        oneOf:
          - items:
              - enum: [ irq, wakeup ]
          - items:
              - const: irq
              - const: wakeup

      label:
        description: Descriptive name of the key.

      linux,code:
        description: Key / Axis code to emit.

      linux,input-type:
        default: 1  # EV_KEY

      linux,input-value:
        description: |
          If linux,input-type is EV_ABS or EV_REL then this
          value is sent for events this button generates when pressed.
          EV_ABS/EV_REL axis will generate an event with a value of 0
          when all buttons with linux,input-type == type and
          linux,code == axis are released. This value is interpreted
          as a signed 32 bit value, e.g. to make a button generate a
          value of -1 use:
 
          linux,input-value = <0xffffffff>; /* -1 */

        $ref: /schemas/types.yaml#/definitions/uint32

      debounce-interval:
        description:
          Debouncing interval time in milliseconds. If not specified defaults to 5.
        $ref: /schemas/types.yaml#/definitions/uint32

        default: 5

      wakeup-source:
        description: Button can wake-up the system.

      wakeup-event-action:
        description: |
          Specifies whether the key should wake the system when asserted, when
          deasserted, or both. This property is only valid for keys that wake up the
          system (e.g., when the "wakeup-source" property is also provided).
 
          Supported values are defined in linux-event-codes.h:
 
            EV_ACT_ANY        - both asserted and deasserted
            EV_ACT_ASSERTED   - asserted
            EV_ACT_DEASSERTED - deasserted
        $ref: /schemas/types.yaml#/definitions/uint32
        enum: [0, 1, 2]

      linux,can-disable:
        description:
          Indicates that button is connected to dedicated (not shared) interrupt
          which can be disabled to suppress events from the button.
        type: boolean

    required:
      - linux,code

    anyOf:
      - required:
          - interrupts
      - required:
          - interrupts-extended
      - required:
          - gpios

    allOf:
      - if:
          properties:
            interrupts:
              minItems: 2
          required:
            - interrupts
        then:
          properties:
            interrupt-names:
              minItems: 2
          required:
            - interrupt-names

    dependencies:
      wakeup-event-action: [ wakeup-source ]
      linux,input-value: [ gpios ]

    unevaluatedProperties: false

allOf:
  - $ref: input.yaml#
  - if:
      properties:
        compatible:
          const: gpio-keys-polled
    then:
      required:
        - poll-interval
    else:
      properties:
        poll-interval: false

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
 
    gpio-keys {
        compatible = "gpio-keys";
        autorepeat;
 
        key-up {
            label = "GPIO Key UP";
            linux,code = <103>;
            gpios = <&gpio1 0 1>;
        };
 
        key-down {
            label = "GPIO Key DOWN";
            linux,code = <108>;
            interrupts = <1 IRQ_TYPE_EDGE_FALLING>;
        };
 
        key-wakeup {
            label = "GPIO Key WAKEUP";
            linux,code = <143>;
            interrupts-extended = <&intc 2 IRQ_TYPE_EDGE_FALLING>,
                                  <&intc_wakeup 0 IRQ_TYPE_LEVEL_HIGH>;
            interrupt-names = "irq", "wakeup";
            wakeup-source;
        };
    };

...