Commit fbfb9a60 authored by Rob Herring's avatar Rob Herring
Browse files

dt-bindings: input: Convert gpio-keys bindings to schema



Convert the gpio-keys and gpio-keys-polled bindings to a DT schema. As
both bindings are almost the same, combine them into a single schema.

The binding said 'interrupts' was required, but testing on dts files
showed that it isn't required.

'linux,input-value' was only documented for gpio-keys-polled, but there
doesn't seem to be any reason for it to be specific to that. It can work
for gpio-keys too if the GPIO line(s) are available.

Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: default avatarRob Herring <robh@kernel.org>
parent befc8236
Loading
Loading
Loading
Loading
+0 −45
Original line number Diff line number Diff line
Device-Tree bindings for input/gpio_keys_polled.c keyboard driver

Required properties:
	- compatible = "gpio-keys-polled";
	- poll-interval: Poll interval time in milliseconds

Optional properties:
	- autorepeat: Boolean, Enable auto repeat feature of Linux input
	  subsystem.

Each button (key) is represented as a sub-node of "gpio-keys-polled":
Subnode properties:

	- gpios: OF device-tree gpio specification.
	- label: Descriptive name of the key.
	- linux,code: Key / Axis code to emit.

Optional subnode-properties:
	- linux,input-type: Specify event type this button/key generates.
	  If not specified defaults to <1> == EV_KEY.
	- linux,input-value: 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 */
	- debounce-interval: Debouncing interval time in milliseconds.
	  If not specified defaults to 5.
	- wakeup-source: Boolean, button can wake-up the system.
			 (Legacy property supported: "gpio-key,wakeup")

Example nodes:

	gpio_keys_polled {
			compatible = "gpio-keys-polled";
			poll-interval = <100>;
			autorepeat;

			button21 {
				label = "GPIO Key UP";
				linux,code = <103>;
				gpios = <&gpio1 0 1>;
			};
			...
+0 −58
Original line number Diff line number Diff line
Device-Tree bindings for input/keyboard/gpio_keys.c keyboard driver

Required properties:
	- compatible = "gpio-keys";

Optional properties:
	- autorepeat: Boolean, Enable auto repeat feature of Linux input
	  subsystem.
	- label: String, name of the input device.

Each button (key) is represented as a sub-node of "gpio-keys":
Subnode properties:

	- gpios: OF device-tree gpio specification.
	- interrupts: the interrupt line for that input.
	- label: Descriptive name of the key.
	- linux,code: Keycode to emit.

Note that either "interrupts" or "gpios" properties can be omitted, but not
both at the same time. Specifying both properties is allowed.

Optional subnode-properties:
	- linux,input-type: Specify event type this button/key generates.
	  If not specified defaults to <1> == EV_KEY.
	- debounce-interval: Debouncing interval time in milliseconds.
	  If not specified defaults to 5.
	- wakeup-source: Boolean, button can wake-up the system.
			 (Legacy property supported: "gpio-key,wakeup")
	- wakeup-event-action: 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_ASSERTED		- asserted
		EV_ACT_DEASSERTED	- deasserted
		EV_ACT_ANY		- both asserted and deasserted
	- linux,can-disable: Boolean, indicates that button is connected
	  to dedicated (not shared) interrupt which can be disabled to
	  suppress events from the button.

Example nodes:

	gpio-keys {
			compatible = "gpio-keys";
			autorepeat;

			up {
				label = "GPIO Key UP";
				linux,code = <103>;
				gpios = <&gpio1 0 1>;
			};

			down {
				label = "GPIO Key DOWN";
				linux,code = <108>;
				interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
			};
			...
+152 −0
Original line number Diff line number Diff line
# 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: Device-Tree bindings for GPIO attached keys

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

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

patternProperties:
  ".*":
    if:
      type: object
    then:
      allOf:
        - $ref: input.yaml#

      properties:
        gpios:
          maxItems: 1

        interrupts:
          maxItems: 1

        label:
          description: Descriptive name of the key.

        linux,code:
          description: Key / Axis code to emit.
          $ref: /schemas/types.yaml#definitions/uint32

        linux,input-type:
          description:
            Specify event type this button/key generates. If not specified defaults to
            <1> == EV_KEY.
          allOf:
            - $ref: /schemas/types.yaml#definitions/uint32
          default: 1

        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 */

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

        debounce-interval:
          description:
            Debouncing interval time in milliseconds. If not specified defaults to 5.
          allOf:
            - $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
          allOf:
            - $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

        pinctrl-0:
          maxItems: 1

        pinctrl-names:
          maxItems: 1

      required:
        - linux,code

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

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

      unevaluatedProperties: false

if:
  properties:
    compatible:
      const: gpio-keys-polled
then:
  properties:
    poll-interval:
      description:
        Poll interval time in milliseconds
      $ref: /schemas/types.yaml#definitions/uint32

  required:
    - poll-interval

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>

    gpio-keys {
        compatible = "gpio-keys";
        autorepeat;

        up {
            label = "GPIO Key UP";
            linux,code = <103>;
            gpios = <&gpio1 0 1>;
        };

        down {
            label = "GPIO Key DOWN";
            linux,code = <108>;
            interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>;
        };
    };

...