OSDN Git Service

dt-bindings: input: Convert gpio-keys bindings to schema
authorRob Herring <robh@kernel.org>
Tue, 19 Nov 2019 14:16:58 +0000 (08:16 -0600)
committerRob Herring <robh@kernel.org>
Thu, 16 Apr 2020 21:59:16 +0000 (16:59 -0500)
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: Rob Herring <robh@kernel.org>
Documentation/devicetree/bindings/input/gpio-keys-polled.txt [deleted file]
Documentation/devicetree/bindings/input/gpio-keys.txt [deleted file]
Documentation/devicetree/bindings/input/gpio-keys.yaml [new file with mode: 0644]

diff --git a/Documentation/devicetree/bindings/input/gpio-keys-polled.txt b/Documentation/devicetree/bindings/input/gpio-keys-polled.txt
deleted file mode 100644 (file)
index 4d9a371..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-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>;
-                       };
-                       ...
diff --git a/Documentation/devicetree/bindings/input/gpio-keys.txt b/Documentation/devicetree/bindings/input/gpio-keys.txt
deleted file mode 100644 (file)
index 7cccc49..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-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>;
-                       };
-                       ...
diff --git a/Documentation/devicetree/bindings/input/gpio-keys.yaml b/Documentation/devicetree/bindings/input/gpio-keys.yaml
new file mode 100644 (file)
index 0000000..c0b3895
--- /dev/null
@@ -0,0 +1,152 @@
+# 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>;
+        };
+    };
+
+...