Commit 49f13b09 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull input updates from Dmitry Torokhov:

 - a new driver for the Azoteq IQS269A capacitive touch controller

 - a new driver for the Cypress CY8CTMA140 touchscreen

 - updates to Elan and ft5x06 touchscreen drivers

 - assorted driver fixes

 - msm-vibrator has been removed as we have a more generic solution

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (28 commits)
  Input: adi - work around module name confict
  Input: iqs269a - add missing I2C dependency
  Input: elants - refactor elants_i2c_execute_command()
  Input: elants - override touchscreen info with DT properties
  Input: elants - remove unused axes
  Input: add support for Azoteq IQS269A
  dt-bindings: input: Add bindings for Azoteq IQS269A
  Input: imx_sc_key - use devm_add_action_or_reset() to handle all cleanups
  Input: remove msm-vibrator driver
  dt-bindings: Input: remove msm-vibrator
  Input: elants_i2c - provide an attribute to show calibration count
  Input: introduce input_mt_report_slot_inactive()
  dt-bindings: input: touchscreen: elants_i2c: convert to YAML
  Input: add driver for the Cypress CY8CTMA140 touchscreen
  dt-bindings: touchscreen: Add CY8CTMA140 bindings
  Input: edt-ft5x06 - prefer asynchronous probe
  Input: edt-ft5x06 - improve power management operations
  Input: edt-ft5x06 - move parameter restore into helper
  Input: edt-ft5x06 - fix get_default register write access
  Input: atkbd - receive and use physcode->keycode mapping from FW
  ...
parents 09102704 751ad34f
Loading
Loading
Loading
Loading
+0 −34
Original line number Diff line number Diff line
Elantech I2C Touchscreen

Required properties:
- compatible: must be "elan,ekth3500".
- reg: I2C address of the chip.
- interrupts: interrupt to which the chip is connected (see interrupt
  binding[0]).

Optional properties:
- wakeup-source: touchscreen can be used as a wakeup source.
- pinctrl-names: should be "default" (see pinctrl binding [1]).
- pinctrl-0: a phandle pointing to the pin settings for the device (see
  pinctrl binding [1]).
- reset-gpios: reset gpio the chip is connected to.
- vcc33-supply: a phandle for the regulator supplying 3.3V power.
- vccio-supply: a phandle for the regulator supplying IO power.

[0]: Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
[1]: Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt

Example:
	&i2c1 {
		/* ... */

		touchscreen@10 {
			compatible = "elan,ekth3500";
			reg = <0x10>;
			interrupt-parent = <&gpio4>;
			interrupts = <0x0 IRQ_TYPE_EDGE_FALLING>;
			wakeup-source;
		};

		/* ... */
	};
+581 −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/iqs269a.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Azoteq IQS269A Capacitive Touch Controller

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

description: |
  The Azoteq IQS269A is an 8-channel capacitive touch controller that features
  additional Hall-effect and inductive sensing capabilities.

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

properties:
  compatible:
    const: azoteq,iqs269a

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  "#address-cells":
    const: 1

  "#size-cells":
    const: 0

  azoteq,hall-enable:
    type: boolean
    description:
      Enables Hall-effect sensing on channels 6 and 7. In this case, keycodes
      assigned to channel 6 are ignored and keycodes assigned to channel 7 are
      interpreted as switch codes. Refer to the datasheet for requirements im-
      posed on channels 6 and 7 by Hall-effect sensing.

  azoteq,suspend-mode:
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
      - enum: [0, 1, 2, 3]
        default: 0
    description: |
      Specifies the power mode during suspend as follows:
      0: Automatic (same as normal runtime, i.e. suspend/resume disabled)
      1: Low power (all sensing at a reduced reporting rate)
      2: Ultra-low power (channel 0 proximity sensing)
      3: Halt (no sensing)

  azoteq,clk-div:
    type: boolean
    description: Divides the device's core clock by a factor of 4.

  azoteq,ulp-update:
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
      - minimum: 0
        maximum: 7
        default: 3
    description: Specifies the ultra-low-power mode update rate.

  azoteq,reseed-offset:
    type: boolean
    description:
      Applies an 8-count offset to all long-term averages upon either ATI or
      reseed events.

  azoteq,filt-str-lp-lta:
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
      - enum: [0, 1, 2, 3]
        default: 0
    description:
      Specifies the long-term average filter strength during low-power mode.

  azoteq,filt-str-lp-cnt:
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
      - enum: [0, 1, 2, 3]
        default: 0
    description:
      Specifies the raw count filter strength during low-power mode.

  azoteq,filt-str-np-lta:
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
      - enum: [0, 1, 2, 3]
        default: 0
    description:
      Specifies the long-term average filter strength during normal-power mode.

  azoteq,filt-str-np-cnt:
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
      - enum: [0, 1, 2, 3]
        default: 0
    description:
      Specifies the raw count filter strength during normal-power mode.

  azoteq,rate-np-ms:
    minimum: 0
    maximum: 255
    default: 16
    description: Specifies the report rate (in ms) during normal-power mode.

  azoteq,rate-lp-ms:
    minimum: 0
    maximum: 255
    default: 160
    description: Specifies the report rate (in ms) during low-power mode.

  azoteq,rate-ulp-ms:
    multipleOf: 16
    minimum: 0
    maximum: 4080
    default: 160
    description: Specifies the report rate (in ms) during ultra-low-power mode.

  azoteq,timeout-pwr-ms:
    multipleOf: 512
    minimum: 0
    maximum: 130560
    default: 2560
    description:
      Specifies the length of time (in ms) to wait for an event during normal-
      power mode before transitioning to low-power mode.

  azoteq,timeout-lta-ms:
    multipleOf: 512
    minimum: 0
    maximum: 130560
    default: 32768
    description:
      Specifies the length of time (in ms) to wait before resetting the long-
      term average of all channels. Specify the maximum timeout to disable it
      altogether.

  azoteq,ati-band-disable:
    type: boolean
    description: Disables the ATI band check.

  azoteq,ati-lp-only:
    type: boolean
    description: Limits automatic ATI to low-power mode.

  azoteq,ati-band-tighten:
    type: boolean
    description: Tightens the ATI band from 1/8 to 1/16 of the desired target.

  azoteq,filt-disable:
    type: boolean
    description: Disables all raw count filtering.

  azoteq,gpio3-select:
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
      - minimum: 0
        maximum: 7
        default: 0
    description:
      Selects the channel for which the GPIO3 pin represents touch state.

  azoteq,dual-direction:
    type: boolean
    description:
      Specifies that long-term averages are to freeze in the presence of either
      increasing or decreasing counts, thereby permitting events to be reported
      in either direction.

  azoteq,tx-freq:
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
      - enum: [0, 1, 2, 3]
        default: 0
    description: |
      Specifies the inductive sensing excitation frequency as follows (paren-
      thesized numbers represent the frequency if 'azoteq,clk-div' is present):
      0: 16 MHz (4 MHz)
      1: 8 MHz (2 MHz)
      2: 4 MHz (1 MHz)
      3: 2 MHz (500 kHz)

  azoteq,global-cap-increase:
    type: boolean
    description: Increases the global capacitance adder from 0.5 pF to 1.5 pF.

  azoteq,reseed-select:
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
      - enum: [0, 1, 2, 3]
        default: 0
    description: |
      Specifies the event(s) that prompt the device to reseed (i.e. reset the
      long-term average) of an associated channel as follows:
      0: None
      1: Proximity
      2: Proximity or touch
      3: Proximity, touch or deep touch

  azoteq,tracking-enable:
    type: boolean
    description:
      Enables all associated channels to track their respective reference
      channels.

  azoteq,filt-str-slider:
    allOf:
      - $ref: /schemas/types.yaml#/definitions/uint32
      - enum: [0, 1, 2, 3]
        default: 1
    description: Specifies the slider coordinate filter strength.

patternProperties:
  "^channel@[0-7]$":
    type: object
    description:
      Represents a single sensing channel. A channel is active if defined and
      inactive otherwise.

    properties:
      reg:
        minimum: 0
        maximum: 7
        description: Index of the channel.

      azoteq,reseed-disable:
        type: boolean
        description:
          Prevents the channel from being reseeded if the long-term average
          timeout (defined in 'azoteq,timeout-lta') expires.

      azoteq,blocking-enable:
        type: boolean
        description: Specifies that the channel is a blocking channel.

      azoteq,slider0-select:
        type: boolean
        description: Specifies that the channel participates in slider 0.

      azoteq,slider1-select:
        type: boolean
        description: Specifies that the channel participates in slider 1.

      azoteq,rx-enable:
        allOf:
          - $ref: /schemas/types.yaml#/definitions/uint32-array
          - minItems: 1
            maxItems: 8
            items:
              minimum: 0
              maximum: 7
        description:
          Specifies the CRX pin(s) associated with the channel. By default, only
          the CRX pin corresponding to the channel's index is enabled (e.g. CRX0
          for channel 0).

      azoteq,tx-enable:
        allOf:
          - $ref: /schemas/types.yaml#/definitions/uint32-array
          - minItems: 1
            maxItems: 8
            items:
              minimum: 0
              maximum: 7
            default: [0, 1, 2, 3, 4, 5, 6, 7]
        description: Specifies the TX pin(s) associated with the channel.

      azoteq,meas-cap-decrease:
        type: boolean
        description:
          Decreases the internal measurement capacitance from 60 pF to 15 pF.

      azoteq,rx-float-inactive:
        type: boolean
        description: Floats any inactive CRX pins instead of grounding them.

      azoteq,local-cap-size:
        allOf:
          - $ref: /schemas/types.yaml#/definitions/uint32
          - enum: [0, 1, 2]
            default: 0
        description: |
          Specifies the capacitance to be added to the channel as follows:
          0: None
          1: Global adder (based on 'azoteq,global-cap-increase')
          2: Global adder + 0.5 pF

      azoteq,invert-enable:
        type: boolean
        description:
          Inverts the polarity of the states reported for proximity, touch and
          deep-touch events relative to their respective thresholds.

      azoteq,proj-bias:
        allOf:
          - $ref: /schemas/types.yaml#/definitions/uint32
          - enum: [0, 1, 2, 3]
            default: 2
        description: |
          Specifies the bias current applied during projected-capacitance
          sensing as follows:
          0: 2.5 uA
          1: 5 uA
          2: 10 uA
          3: 20 uA

      azoteq,sense-mode:
        allOf:
          - $ref: /schemas/types.yaml#/definitions/uint32
          - enum: [0, 1, 9, 14, 15]
            default: 0
        description: |
          Specifies the channel's sensing mode as follows:
          0:  Self capacitance
          1:  Projected capacitance
          9:  Self or mutual inductance
          14: Hall effect
          15: Temperature

      azoteq,sense-freq:
        allOf:
          - $ref: /schemas/types.yaml#/definitions/uint32
          - enum: [0, 1, 2, 3]
            default: 1
        description: |
          Specifies the channel's sensing frequency as follows (parenthesized
          numbers represent the frequency if 'azoteq,clk-div' is present):
          0: 4 MHz (1 MHz)
          1: 2 MHz (500 kHz)
          2: 1 MHz (250 kHz)
          3: 500 kHz (125 kHz)

      azoteq,static-enable:
        type: boolean
        description: Enables the static front-end for the channel.

      azoteq,ati-mode:
        allOf:
          - $ref: /schemas/types.yaml#/definitions/uint32
          - enum: [0, 1, 2, 3]
            default: 3
        description: |
          Specifies the channel's ATI mode as follows:
          0: Disabled
          1: Semi-partial
          2: Partial
          3: Full

      azoteq,ati-base:
        allOf:
          - $ref: /schemas/types.yaml#/definitions/uint32
          - enum: [75, 100, 150, 200]
            default: 100
        description: Specifies the channel's ATI base.

      azoteq,ati-target:
        allOf:
          - $ref: /schemas/types.yaml#/definitions/uint32
          - multipleOf: 32
            minimum: 0
            maximum: 2016
            default: 512
        description: Specifies the channel's ATI target.

      azoteq,assoc-select:
        allOf:
          - $ref: /schemas/types.yaml#/definitions/uint32-array
          - minItems: 1
            maxItems: 8
            items:
              minimum: 0
              maximum: 7
        description:
          Specifies the associated channels for which the channel serves as a
          reference channel. By default, no channels are selected.

      azoteq,assoc-weight:
        allOf:
          - $ref: /schemas/types.yaml#/definitions/uint32
          - minimum: 0
            maximum: 255
            default: 0
        description:
          Specifies the channel's impact weight if it acts as an associated
          channel (0 = 0% impact, 255 = 200% impact).

    patternProperties:
      "^event-prox(-alt)?$":
        type: object
        description:
          Represents a proximity event reported by the channel in response to
          a decrease in counts. Node names suffixed with '-alt' instead corre-
          spond to an increase in counts.

          By default, the long-term average tracks an increase in counts such
          that only events corresponding to a decrease in counts are reported
          (refer to the datasheet for more information).

          Specify 'azoteq,dual-direction' to freeze the long-term average when
          the counts increase or decrease such that events of either direction
          can be reported. Alternatively, specify 'azoteq,invert-enable' to in-
          vert the polarity of the states reported by the channel.

          Complementary events (e.g. event-touch and event-touch-alt) can both
          be present and specify different key or switch codes, but not differ-
          ent thresholds or hysteresis (if applicable).

        properties:
          azoteq,thresh:
            allOf:
              - $ref: /schemas/types.yaml#/definitions/uint32
              - minimum: 0
                maximum: 255
                default: 10
            description: Specifies the threshold for the event.

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

        additionalProperties: false

      "^event-touch(-alt)?$":
        type: object
        description: Represents a touch event reported by the channel.

        properties:
          azoteq,thresh:
            allOf:
              - $ref: /schemas/types.yaml#/definitions/uint32
              - minimum: 0
                maximum: 255
                default: 8
            description: Specifies the threshold for the event.

          azoteq,hyst:
            allOf:
              - $ref: /schemas/types.yaml#/definitions/uint32
              - minimum: 0
                maximum: 15
                default: 4
            description: Specifies the hysteresis for the event.

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

        additionalProperties: false

      "^event-deep(-alt)?$":
        type: object
        description: Represents a deep-touch event reported by the channel.

        properties:
          azoteq,thresh:
            allOf:
              - $ref: /schemas/types.yaml#/definitions/uint32
              - minimum: 0
                maximum: 255
                default: 26
            description: Specifies the threshold for the event.

          azoteq,hyst:
            allOf:
              - $ref: /schemas/types.yaml#/definitions/uint32
              - minimum: 0
                maximum: 15
                default: 0
            description: Specifies the hysteresis for the event.

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

        additionalProperties: false

    required:
      - reg

    additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - "#address-cells"
  - "#size-cells"

additionalProperties: false

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

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

            iqs269a@44 {
                    #address-cells = <1>;
                    #size-cells = <0>;

                    compatible = "azoteq,iqs269a";
                    reg = <0x44>;
                    interrupt-parent = <&gpio>;
                    interrupts = <17 IRQ_TYPE_LEVEL_LOW>;

                    azoteq,hall-enable;
                    azoteq,suspend-mode = <2>;

                    channel@0 {
                            reg = <0x0>;

                            event-prox {
                                    linux,code = <KEY_POWER>;
                            };
                    };

                    channel@1 {
                            reg = <0x1>;
                            azoteq,slider0-select;
                    };

                    channel@2 {
                            reg = <0x2>;
                            azoteq,slider0-select;
                    };

                    channel@3 {
                            reg = <0x3>;
                            azoteq,slider0-select;
                    };

                    channel@4 {
                            reg = <0x4>;
                            azoteq,slider0-select;
                    };

                    channel@5 {
                            reg = <0x5>;
                            azoteq,slider0-select;
                    };

                    channel@6 {
                            reg = <0x6>;
                            azoteq,invert-enable;
                            azoteq,static-enable;
                            azoteq,reseed-disable;
                            azoteq,rx-enable = <0>;
                            azoteq,sense-freq = <0x0>;
                            azoteq,sense-mode = <0xE>;
                            azoteq,ati-mode = <0x0>;
                            azoteq,ati-base = <200>;
                            azoteq,ati-target = <320>;
                    };

                    channel@7 {
                            reg = <0x7>;
                            azoteq,invert-enable;
                            azoteq,static-enable;
                            azoteq,reseed-disable;
                            azoteq,rx-enable = <0>, <6>;
                            azoteq,sense-freq = <0x0>;
                            azoteq,sense-mode = <0xE>;
                            azoteq,ati-mode = <0x3>;
                            azoteq,ati-base = <200>;
                            azoteq,ati-target = <320>;

                            event-touch {
                                    linux,code = <SW_LID>;
                            };
                    };
            };
    };

...
+0 −36
Original line number Diff line number Diff line
* Device tree bindings for the Qualcomm MSM vibrator

Required properties:

  - compatible: Should be one of
		"qcom,msm8226-vibrator"
		"qcom,msm8974-vibrator"
  - reg: the base address and length of the IO memory for the registers.
  - pinctrl-names: set to default.
  - pinctrl-0: phandles pointing to pin configuration nodes. See
               Documentation/devicetree/bindings/pinctrl/pinctrl-bindings.txt
  - clock-names: set to pwm
  - clocks: phandle of the clock. See
            Documentation/devicetree/bindings/clock/clock-bindings.txt
  - enable-gpios: GPIO that enables the vibrator.

Optional properties:

  - vcc-supply: phandle to the regulator that provides power to the sensor.

Example from a LG Nexus 5 (hammerhead) phone:

vibrator@fd8c3450 {
	reg = <0xfd8c3450 0x400>;
	compatible = "qcom,msm8974-vibrator";

	vcc-supply = <&pm8941_l19>;

	clocks = <&mmcc CAMSS_GP1_CLK>;
	clock-names = "pwm";

	enable-gpios = <&msmgpio 60 GPIO_ACTIVE_HIGH>;

	pinctrl-names = "default";
	pinctrl-0 = <&vibrator_pin>;
};
+72 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/input/touchscreen/cypress,cy8ctma140.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Cypress CY8CTMA140 series touchscreen controller bindings

maintainers:
  - Linus Walleij <linus.walleij@linaro.org>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    const: cypress,cy8ctma140

  reg:
    const: 0x20

  clock-frequency:
    description: I2C client clock frequency, defined for host
    minimum: 100000
    maximum: 400000

  interrupts:
    maxItems: 1

  vcpin-supply:
    description: Analog power supply regulator on VCPIN pin

  vdd-supply:
    description: Digital power supply regulator on VDD pin

  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-swapped-x-y: true
  touchscreen-max-pressure: true

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts
  - touchscreen-size-x
  - touchscreen-size-y
  - touchscreen-max-pressure

examples:
- |
    #include <dt-bindings/interrupt-controller/irq.h>
    i2c {
      #address-cells = <1>;
      #size-cells = <0>;
      touchscreen@20 {
        compatible = "cypress,cy8ctma140";
        reg = <0x20>;
        touchscreen-size-x = <480>;
        touchscreen-size-y = <800>;
        touchscreen-max-pressure = <255>;
        interrupt-parent = <&gpio6>;
        interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
        vdd-supply = <&ab8500_ldo_aux2_reg>;
        vcpin-supply = <&ab8500_ldo_aux2_reg>;
      };
    };

...
+69 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: "http://devicetree.org/schemas/input/touchscreen/elan,elants_i2c.yaml#"
$schema: "http://devicetree.org/meta-schemas/core.yaml#"

title: Elantech I2C Touchscreen

maintainers:
  - David Heidelberg <david@ixit.cz>

allOf:
  - $ref: touchscreen.yaml#

properties:
  compatible:
    enum:
      - elan,ektf3624
      - elan,ekth3500

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  wakeup-source:
    type: boolean
    description: touchscreen can be used as a wakeup source.

  reset-gpios:
    description: reset gpio the chip is connected to.

  vcc33-supply:
    description: a phandle for the regulator supplying 3.3V power.

  vccio-supply:
    description: a phandle for the regulator supplying IO power.

  touchscreen-inverted-x: true
  touchscreen-inverted-y: true
  touchscreen-size-x: true
  touchscreen-size-y: true
  touchscreen-swapped-x-y: true

additionalProperties: false

required:
  - compatible
  - reg
  - interrupts

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

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

        touchscreen@10 {
            compatible = "elan,ekth3500";
            reg = <0x10>;

            interrupt-parent = <&gpio4>;
            interrupts = <0x0 IRQ_TYPE_EDGE_FALLING>;
            wakeup-source;
        };
    };
Loading