Commit d8a3c488 authored by Jeff LaBundy's avatar Jeff LaBundy Committed by Lee Jones
Browse files

dt-bindings: Add bindings for Azoteq IQS620A/621/622/624/625



This patch adds device tree bindings for the Azoteq IQS620A, IQS621,
IQS622, IQS624 and IQS625 multi-function sensors.

A total of three bindings are presented (one MFD and two child nodes);
they are submitted as a single patch because the child node bindings
have no meaning in the absence of the MFD binding.

Signed-off-by: default avatarJeff LaBundy <jeff@labundy.com>
Reviewed-by: default avatarRob Herring <robh@kernel.org>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent bb6d3fb3
Loading
Loading
Loading
Loading
+132 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/iqs62x-keys.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Azoteq IQS620A/621/622/624/625 Keys and Switches

maintainers:
  - Jeff LaBundy <jeff@labundy.com>

description: |
  The Azoteq IQS620A, IQS621, IQS622, IQS624 and IQS625 multi-function sensors
  feature a variety of self-capacitive, mutual-inductive and Hall-effect sens-
  ing capabilities that can facilitate a variety of contactless key and switch
  applications.

  These functions are collectively represented by a "keys" child node from the
  parent MFD driver. See Documentation/devicetree/bindings/mfd/iqs62x.yaml for
  further details and examples. Sensor hardware configuration (self-capacitive
  vs. mutual-inductive, etc.) is selected based on the device's firmware.

properties:
  compatible:
    enum:
      - azoteq,iqs620a-keys
      - azoteq,iqs621-keys
      - azoteq,iqs622-keys
      - azoteq,iqs624-keys
      - azoteq,iqs625-keys

  linux,keycodes:
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32-array
      - minItems: 1
        maxItems: 16
    description: |
      Specifies the numeric keycodes associated with each available touch or
      proximity event according to the following table. An 'x' indicates the
      event is supported for a given device. Specify 0 for unused events.

      -------------------------------------------------------------------------
      | #  | Event              | IQS620A | IQS621 | IQS622 | IQS624 | IQS625 |
      -------------------------------------------------------------------------
      | 0  | CH0 Touch          |    x    |    x   |    x   |    x   |    x   |
      |    | Antenna 1 Touch*   |    x    |        |        |        |        |
      -------------------------------------------------------------------------
      | 1  | CH0 Proximity      |    x    |    x   |    x   |    x   |    x   |
      |    | Antenna 1 Prox.*   |    x    |        |        |        |        |
      -------------------------------------------------------------------------
      | 2  | CH1 Touch          |    x    |    x   |    x   |    x   |    x   |
      |    | Ant. 1 Deep Touch* |    x    |        |        |        |        |
      -------------------------------------------------------------------------
      | 3  | CH1 Proximity      |    x    |    x   |    x   |    x   |    x   |
      -------------------------------------------------------------------------
      | 4  | CH2 Touch          |    x    |        |        |        |        |
      -------------------------------------------------------------------------
      | 5  | CH2 Proximity      |    x    |        |        |        |        |
      |    | Antenna 2 Prox.*   |    x    |        |        |        |        |
      -------------------------------------------------------------------------
      | 6  | Metal (+) Touch**  |    x    |    x   |        |        |        |
      |    | Ant. 2 Deep Touch* |    x    |        |        |        |        |
      -------------------------------------------------------------------------
      | 7  | Metal (+) Prox.**  |    x    |    x   |        |        |        |
      |    | Antenna 2 Touch*   |    x    |        |        |        |        |
      -------------------------------------------------------------------------
      | 8  | Metal (-) Touch**  |    x    |    x   |        |        |        |
      -------------------------------------------------------------------------
      | 9  | Metal (-) Prox.**  |    x    |    x   |        |        |        |
      -------------------------------------------------------------------------
      | 10 | SAR Active***      |    x    |        |    x   |        |        |
      -------------------------------------------------------------------------
      | 11 | SAR Quick Rel.***  |    x    |        |    x   |        |        |
      -------------------------------------------------------------------------
      | 12 | SAR Movement***    |    x    |        |    x   |        |        |
      -------------------------------------------------------------------------
      | 13 | SAR Filter Halt*** |    x    |        |    x   |        |        |
      -------------------------------------------------------------------------
      | 14 | Wheel Up           |         |        |        |    x   |        |
      -------------------------------------------------------------------------
      | 15 | Wheel Down         |         |        |        |    x   |        |
      -------------------------------------------------------------------------
      *   Two-channel SAR. Replaces CH0-2 plus metal touch and proximity events
          if enabled via firmware.
      **  "+" and "-" refer to the polarity of a channel's delta (LTA - counts),
          where "LTA" is defined as the channel's long-term average.
      *** One-channel SAR. Replaces CH0-2 touch and proximity events if enabled
          via firmware.

patternProperties:
  "^hall-switch-(north|south)$":
    type: object
    description:
      Represents north/south-field Hall-effect sensor touch or proximity
      events. Note that north/south-field orientation is reversed on the
      IQS620AXzCSR device due to its flip-chip package.

    properties:
      linux,code:
        $ref: /schemas/types.yaml#/definitions/uint32
        description: Numeric switch code associated with the event.

      azoteq,use-prox:
        $ref: /schemas/types.yaml#/definitions/flag
        description:
          If present, specifies that Hall-effect sensor reporting should
          use the device's wide-range proximity threshold instead of its
          close-range touch threshold (default).

    required:
      - linux,code

    additionalProperties: false

if:
  properties:
    compatible:
      contains:
        enum:
          - azoteq,iqs624-keys
          - azoteq,iqs625-keys
then:
  patternProperties:
    "^hall-switch-(north|south)$": false

required:
  - compatible
  - linux,keycodes

additionalProperties: false

...
+179 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/iqs62x.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Azoteq IQS620A/621/622/624/625 Multi-Function Sensors

maintainers:
  - Jeff LaBundy <jeff@labundy.com>

description: |
  The Azoteq IQS620A, IQS621, IQS622, IQS624 and IQS625 multi-function sensors
  integrate multiple sensing technologies in a single package.

  Link to datasheets: https://www.azoteq.com/

properties:
  compatible:
    enum:
      - azoteq,iqs620a
      - azoteq,iqs621
      - azoteq,iqs622
      - azoteq,iqs624
      - azoteq,iqs625

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  firmware-name:
    $ref: /schemas/types.yaml#/definitions/string
    description:
      Specifies the name of the calibration and configuration file selected by
      the driver. If this property is omitted, the name is chosen based on the
      device name with ".bin" as the extension (e.g. iqs620a.bin for IQS620A).

  keys:
    $ref: ../input/iqs62x-keys.yaml

  pwm:
    $ref: ../pwm/iqs620a-pwm.yaml

required:
  - compatible
  - reg
  - interrupts

additionalProperties: false

examples:
  - |
    /*
     * Dual capacitive buttons with proximity-activated function, unipolar lid
     * switch and panel-mounted LED.
     */
    #include <dt-bindings/input/input.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    i2c {
            #address-cells = <1>;
            #size-cells = <0>;

            iqs620a@44 {
                    compatible = "azoteq,iqs620a";
                    reg = <0x44>;
                    interrupt-parent = <&gpio>;
                    interrupts = <17 IRQ_TYPE_LEVEL_LOW>;

                    keys {
                            compatible = "azoteq,iqs620a-keys";

                            linux,keycodes = <KEY_SELECT>,
                                             <KEY_MENU>,
                                             <KEY_OK>,
                                             <KEY_MENU>;

                            hall-switch-south {
                                    linux,code = <SW_LID>;
                                    azoteq,use-prox;
                            };
                    };

                    iqs620a_pwm: pwm {
                            compatible = "azoteq,iqs620a-pwm";
                            #pwm-cells = <2>;
                    };
            };
    };

    pwmleds {
            compatible = "pwm-leds";

            panel {
                    pwms = <&iqs620a_pwm 0 1000000>;
                    max-brightness = <255>;
            };
    };

  - |
    /* Single inductive button with bipolar dock/tablet-mode switch. */
    #include <dt-bindings/input/input.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    i2c {
            #address-cells = <1>;
            #size-cells = <0>;

            iqs620a@44 {
                    compatible = "azoteq,iqs620a";
                    reg = <0x44>;
                    interrupt-parent = <&gpio>;
                    interrupts = <17 IRQ_TYPE_LEVEL_LOW>;

                    firmware-name = "iqs620a_coil.bin";

                    keys {
                            compatible = "azoteq,iqs620a-keys";

                            linux,keycodes = <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <KEY_MUTE>;

                            hall-switch-north {
                                    linux,code = <SW_DOCK>;
                            };

                            hall-switch-south {
                                    linux,code = <SW_TABLET_MODE>;
                            };
                    };
            };
    };

  - |
    /* Dual capacitive buttons with volume knob. */
    #include <dt-bindings/input/input.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    i2c {
            #address-cells = <1>;
            #size-cells = <0>;

            iqs624@44 {
                    compatible = "azoteq,iqs624";
                    reg = <0x44>;
                    interrupt-parent = <&gpio>;
                    interrupts = <17 IRQ_TYPE_LEVEL_LOW>;

                    keys {
                            compatible = "azoteq,iqs624-keys";

                            linux,keycodes = <BTN_0>,
                                             <0>,
                                             <BTN_1>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <0>,
                                             <KEY_VOLUMEUP>,
                                             <KEY_VOLUMEDOWN>;
                    };
            };
    };

...
+32 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/pwm/iqs620a-pwm.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Azoteq IQS620A PWM Generator

maintainers:
  - Jeff LaBundy <jeff@labundy.com>

description: |
  The Azoteq IQS620A multi-function sensor generates a fixed-frequency PWM
  output represented by a "pwm" child node from the parent MFD driver. See
  Documentation/devicetree/bindings/mfd/iqs62x.yaml for further details as
  well as an example.

properties:
  compatible:
    enum:
      - azoteq,iqs620a-pwm

  "#pwm-cells":
    const: 2

required:
  - compatible
  - "#pwm-cells"

additionalProperties: false

...