You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Pull input updates from Dmitry Torokhov: - three new touchscreen drivers: Hycon HY46XX, ILITEK Lego Series, and MStar MSG2638 - a new driver for Azoteq IQS626A proximity and touch controller - addition of Amazon Game Controller to the list of devices handled by the xpad driver - Elan touchscreen driver will avoid binding to devices described as I2CHID compatible in ACPI tables - various driver fixes * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (56 commits) Input: xpad - add support for Amazon Game Controller Input: ili210x - add missing negation for touch indication on ili210x MAINTAINERS: repair reference in HYCON HY46XX TOUCHSCREEN SUPPORT Input: add driver for the Hycon HY46XX touchpanel series dt-bindings: touchscreen: Add HY46XX bindings dt-bindings: Add Hycon Technology vendor prefix Input: cyttsp - flag the device properly Input: cyttsp - set abs params for ABS_MT_TOUCH_MAJOR Input: cyttsp - drop the phys path Input: cyttsp - reduce reset pulse timings Input: cyttsp - error message on boot mode exit error Input: apbps2 - remove useless variable Input: mms114 - support MMS136 Input: mms114 - convert bindings to YAML and extend Input: Add support for ILITEK Lego Series dt-bindings: input: touchscreen: ilitek_ts_i2c: Add bindings Input: add MStar MSG2638 touchscreen driver dt-bindings: input/touchscreen: add bindings for msg2638 Input: silead - add workaround for x86 BIOS-es which bring the chip up in a stuck state Input: elants_i2c - do not bind to i2c-hid compatible ACPI instantiated devices ...
This commit is contained in:
@@ -15,3 +15,12 @@ Description: Reports the model identification provided by the touchscreen, fo
|
||||
Access: Read
|
||||
|
||||
Valid values: Represented as string
|
||||
|
||||
What: /sys/bus/i2c/devices/xxx/type
|
||||
Date: Jan 2021
|
||||
Contact: linux-input@vger.kernel.org
|
||||
Description: Reports the type identification provided by the touchscreen, for example "PCAP82H80 Series"
|
||||
|
||||
Access: Read
|
||||
|
||||
Valid values: Represented as string
|
||||
|
||||
@@ -39,6 +39,13 @@ properties:
|
||||
(active low). The line must be flagged with
|
||||
GPIO_ACTIVE_LOW.
|
||||
|
||||
wake-gpios:
|
||||
maxItems: 1
|
||||
description:
|
||||
Optional GPIO specifier for the touchscreen's wake pin
|
||||
(active low). The line must be flagged with
|
||||
GPIO_ACTIVE_LOW.
|
||||
|
||||
linux,gpio-keymap:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
description: |
|
||||
@@ -53,6 +60,29 @@ properties:
|
||||
or experiment to determine which bit corresponds to which input. Use
|
||||
KEY_RESERVED for unused padding values.
|
||||
|
||||
atmel,wakeup-method:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
description: |
|
||||
The WAKE line is an active-low input that is used to wake up the touch
|
||||
controller from deep-sleep mode before communication with the controller
|
||||
could be started. This optional feature used to minimize current
|
||||
consumption when the controller is in deep sleep mode. This feature is
|
||||
relevant only to some controller families, like mXT1386 controller for
|
||||
example.
|
||||
|
||||
The WAKE pin can be connected in one of the following ways:
|
||||
1) left permanently low
|
||||
2) connected to the I2C-compatible SCL pin
|
||||
3) connected to a GPIO pin on the host
|
||||
enum:
|
||||
- 0 # ATMEL_MXT_WAKEUP_NONE
|
||||
- 1 # ATMEL_MXT_WAKEUP_I2C_SCL
|
||||
- 2 # ATMEL_MXT_WAKEUP_GPIO
|
||||
default: 0
|
||||
|
||||
wakeup-source:
|
||||
type: boolean
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
@@ -63,6 +93,7 @@ additionalProperties: false
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include <dt-bindings/input/atmel-maxtouch.h>
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
@@ -75,6 +106,7 @@ examples:
|
||||
reset-gpios = <&gpio 27 GPIO_ACTIVE_LOW>;
|
||||
vdda-supply = <&ab8500_ldo_aux2_reg>;
|
||||
vdd-supply = <&ab8500_ldo_aux5_reg>;
|
||||
atmel,wakeup-method = <ATMEL_MXT_WAKEUP_I2C_SCL>;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
843
Documentation/devicetree/bindings/input/iqs626a.yaml
Normal file
843
Documentation/devicetree/bindings/input/iqs626a.yaml
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,75 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/input/touchscreen/azoteq,iqs5xx.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Azoteq IQS550/572/525 Trackpad/Touchscreen Controller
|
||||
|
||||
maintainers:
|
||||
- Jeff LaBundy <jeff@labundy.com>
|
||||
|
||||
description: |
|
||||
The Azoteq IQS550, IQS572 and IQS525 trackpad and touchscreen controllers
|
||||
employ projected-capacitance sensing and can track up to five independent
|
||||
contacts.
|
||||
|
||||
Link to datasheet: https://www.azoteq.com/
|
||||
|
||||
allOf:
|
||||
- $ref: touchscreen.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- azoteq,iqs550
|
||||
- azoteq,iqs572
|
||||
- azoteq,iqs525
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
reset-gpios:
|
||||
maxItems: 1
|
||||
|
||||
wakeup-source: true
|
||||
|
||||
touchscreen-size-x: true
|
||||
touchscreen-size-y: true
|
||||
touchscreen-inverted-x: true
|
||||
touchscreen-inverted-y: true
|
||||
touchscreen-swapped-x-y: true
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
touchscreen@74 {
|
||||
compatible = "azoteq,iqs550";
|
||||
reg = <0x74>;
|
||||
interrupt-parent = <&gpio>;
|
||||
interrupts = <27 IRQ_TYPE_LEVEL_HIGH>;
|
||||
reset-gpios = <&gpio 22 (GPIO_ACTIVE_LOW |
|
||||
GPIO_PUSH_PULL)>;
|
||||
|
||||
touchscreen-size-x = <800>;
|
||||
touchscreen-size-y = <480>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
||||
@@ -0,0 +1,119 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/input/touchscreen/hycon,hy46xx.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Hycon HY46XX series touchscreen controller bindings
|
||||
|
||||
description: |
|
||||
There are 6 variants of the chip for various touch panel sizes and cover lens material
|
||||
Glass: 0.3mm--4.0mm
|
||||
PET/PMMA: 0.2mm--2.0mm
|
||||
HY4613(B)-N048 < 6"
|
||||
HY4614(B)-N068 7" .. 10.1"
|
||||
HY4621-NS32 < 5"
|
||||
HY4623-NS48 5.1" .. 7"
|
||||
Glass: 0.3mm--8.0mm
|
||||
PET/PMMA: 0.2mm--4.0mm
|
||||
HY4633(B)-N048 < 6"
|
||||
HY4635(B)-N048 < 7" .. 10.1"
|
||||
|
||||
maintainers:
|
||||
- Giulio Benetti <giulio.benetti@benettiengineering.com>
|
||||
|
||||
allOf:
|
||||
- $ref: touchscreen.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- hycon,hy4613
|
||||
- hycon,hy4614
|
||||
- hycon,hy4621
|
||||
- hycon,hy4623
|
||||
- hycon,hy4633
|
||||
- hycon,hy4635
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
reset-gpios:
|
||||
maxItems: 1
|
||||
|
||||
vcc-supply: true
|
||||
|
||||
hycon,threshold:
|
||||
description: Allows setting the sensitivity in the range from 0 to 255.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
minimum: 0
|
||||
maximum: 255
|
||||
|
||||
hycon,glove-enable:
|
||||
type: boolean
|
||||
description: Allows enabling glove setting.
|
||||
|
||||
hycon,report-speed-hz:
|
||||
description: Allows setting the report speed in Hertz.
|
||||
minimum: 1
|
||||
maximum: 255
|
||||
|
||||
hycon,noise-filter-enable:
|
||||
type: boolean
|
||||
description: Allows enabling power noise filter.
|
||||
|
||||
hycon,filter-data:
|
||||
description: Allows setting how many samples throw before reporting touch
|
||||
in the range from 0 to 5.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
minimum: 0
|
||||
maximum: 5
|
||||
|
||||
hycon,gain:
|
||||
description: Allows setting the sensitivity distance in the range from 0 to 5.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
minimum: 0
|
||||
maximum: 5
|
||||
|
||||
hycon,edge-offset:
|
||||
description: Allows setting the edge compensation in the range from 0 to 16.
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
minimum: 0
|
||||
maximum: 16
|
||||
|
||||
touchscreen-size-x: true
|
||||
touchscreen-size-y: true
|
||||
touchscreen-fuzz-x: true
|
||||
touchscreen-fuzz-y: true
|
||||
touchscreen-inverted-x: true
|
||||
touchscreen-inverted-y: true
|
||||
touchscreen-swapped-x-y: true
|
||||
interrupt-controller: true
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/interrupt-controller/arm-gic.h>
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
touchscreen@1c {
|
||||
compatible = "hycon,hy4633";
|
||||
reg = <0x1c>;
|
||||
interrupt-parent = <&gpio2>;
|
||||
interrupts = <5 IRQ_TYPE_EDGE_FALLING>;
|
||||
reset-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
||||
@@ -0,0 +1,73 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/input/touchscreen/ilitek_ts_i2c.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Ilitek I2C Touchscreen Controller
|
||||
|
||||
maintainers:
|
||||
- Dmitry Torokhov <dmitry.torokhov@gmail.com>
|
||||
|
||||
allOf:
|
||||
- $ref: touchscreen.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- ilitek,ili2130
|
||||
- ilitek,ili2131
|
||||
- ilitek,ili2132
|
||||
- ilitek,ili2316
|
||||
- ilitek,ili2322
|
||||
- ilitek,ili2323
|
||||
- ilitek,ili2326
|
||||
- ilitek,ili2520
|
||||
- ilitek,ili2521
|
||||
|
||||
reg:
|
||||
const: 0x41
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
reset-gpios:
|
||||
maxItems: 1
|
||||
|
||||
wakeup-source:
|
||||
type: boolean
|
||||
description: touchscreen can be used as a wakeup source.
|
||||
|
||||
touchscreen-size-x: true
|
||||
touchscreen-size-y: true
|
||||
touchscreen-inverted-x: true
|
||||
touchscreen-inverted-y: true
|
||||
touchscreen-swapped-x-y: true
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- reset-gpios
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
touchscreen@41 {
|
||||
compatible = "ilitek,ili2520";
|
||||
reg = <0x41>;
|
||||
|
||||
interrupt-parent = <&gpio1>;
|
||||
interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
|
||||
reset-gpios = <&gpio1 8 GPIO_ACTIVE_LOW>;
|
||||
touchscreen-inverted-y;
|
||||
wakeup-source;
|
||||
};
|
||||
};
|
||||
@@ -1,80 +0,0 @@
|
||||
Azoteq IQS550/572/525 Trackpad/Touchscreen Controller
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : Must be equal to one of the following:
|
||||
"azoteq,iqs550"
|
||||
"azoteq,iqs572"
|
||||
"azoteq,iqs525"
|
||||
|
||||
- reg : I2C slave address for the device.
|
||||
|
||||
- interrupts : GPIO to which the device's active-high RDY
|
||||
output is connected (see [0]).
|
||||
|
||||
- reset-gpios : GPIO to which the device's active-low NRST
|
||||
input is connected (see [1]).
|
||||
|
||||
Optional properties:
|
||||
|
||||
- touchscreen-min-x : See [2].
|
||||
|
||||
- touchscreen-min-y : See [2].
|
||||
|
||||
- touchscreen-size-x : See [2]. If this property is omitted, the
|
||||
maximum x-coordinate is specified by the
|
||||
device's "X Resolution" register.
|
||||
|
||||
- touchscreen-size-y : See [2]. If this property is omitted, the
|
||||
maximum y-coordinate is specified by the
|
||||
device's "Y Resolution" register.
|
||||
|
||||
- touchscreen-max-pressure : See [2]. Pressure is expressed as the sum of
|
||||
the deltas across all channels impacted by a
|
||||
touch event. A channel's delta is calculated
|
||||
as its count value minus a reference, where
|
||||
the count value is inversely proportional to
|
||||
the channel's capacitance.
|
||||
|
||||
- touchscreen-fuzz-x : See [2].
|
||||
|
||||
- touchscreen-fuzz-y : See [2].
|
||||
|
||||
- touchscreen-fuzz-pressure : See [2].
|
||||
|
||||
- touchscreen-inverted-x : See [2]. Inversion is applied relative to that
|
||||
which may already be specified by the device's
|
||||
FLIP_X and FLIP_Y register fields.
|
||||
|
||||
- touchscreen-inverted-y : See [2]. Inversion is applied relative to that
|
||||
which may already be specified by the device's
|
||||
FLIP_X and FLIP_Y register fields.
|
||||
|
||||
- touchscreen-swapped-x-y : See [2]. Swapping is applied relative to that
|
||||
which may already be specified by the device's
|
||||
SWITCH_XY_AXIS register field.
|
||||
|
||||
[0]: Documentation/devicetree/bindings/interrupt-controller/interrupts.txt
|
||||
[1]: Documentation/devicetree/bindings/gpio/gpio.txt
|
||||
[2]: Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt
|
||||
|
||||
Example:
|
||||
|
||||
&i2c1 {
|
||||
/* ... */
|
||||
|
||||
touchscreen@74 {
|
||||
compatible = "azoteq,iqs550";
|
||||
reg = <0x74>;
|
||||
interrupt-parent = <&gpio>;
|
||||
interrupts = <17 4>;
|
||||
reset-gpios = <&gpio 27 1>;
|
||||
|
||||
touchscreen-size-x = <640>;
|
||||
touchscreen-size-y = <480>;
|
||||
|
||||
touchscreen-max-pressure = <16000>;
|
||||
};
|
||||
|
||||
/* ... */
|
||||
};
|
||||
@@ -0,0 +1,87 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/input/touchscreen/melfas,mms114.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Melfas MMS114 family touchscreen controller bindings
|
||||
|
||||
maintainers:
|
||||
- Linus Walleij <linus.walleij@linaro.org>
|
||||
|
||||
allOf:
|
||||
- $ref: touchscreen.yaml#
|
||||
|
||||
properties:
|
||||
$nodename:
|
||||
pattern: "^touchscreen(@.*)?$"
|
||||
|
||||
compatible:
|
||||
items:
|
||||
- enum:
|
||||
- melfas,mms114
|
||||
- melfas,mms134s
|
||||
- melfas,mms136
|
||||
- melfas,mms152
|
||||
- melfas,mms345l
|
||||
|
||||
reg:
|
||||
description: I2C address
|
||||
|
||||
clock-frequency:
|
||||
description: I2C client clock frequency, defined for host
|
||||
minimum: 100000
|
||||
maximum: 400000
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
avdd-supply:
|
||||
description: Analog power supply regulator on AVDD pin
|
||||
|
||||
vdd-supply:
|
||||
description: Digital power supply regulator on VDD pin
|
||||
|
||||
touchscreen-size-x: true
|
||||
touchscreen-size-y: true
|
||||
touchscreen-fuzz-x: true
|
||||
touchscreen-fuzz-y: true
|
||||
touchscreen-fuzz-pressure: true
|
||||
touchscreen-inverted-x: true
|
||||
touchscreen-inverted-y: true
|
||||
touchscreen-swapped-x-y: true
|
||||
touchscreen-max-pressure: true
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- touchscreen-size-x
|
||||
- touchscreen-size-y
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
touchscreen@48 {
|
||||
compatible = "melfas,mms114";
|
||||
reg = <0x48>;
|
||||
interrupt-parent = <&gpio>;
|
||||
interrupts = <39 IRQ_TYPE_EDGE_FALLING>;
|
||||
avdd-supply = <&ldo1_reg>;
|
||||
vdd-supply = <&ldo2_reg>;
|
||||
touchscreen-size-x = <720>;
|
||||
touchscreen-size-y = <1280>;
|
||||
touchscreen-fuzz-x = <10>;
|
||||
touchscreen-fuzz-y = <10>;
|
||||
touchscreen-fuzz-pressure = <10>;
|
||||
touchscreen-inverted-x;
|
||||
touchscreen-inverted-y;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
||||
@@ -1,42 +0,0 @@
|
||||
* MELFAS MMS114/MMS152/MMS345L touchscreen controller
|
||||
|
||||
Required properties:
|
||||
- compatible: should be one of:
|
||||
- "melfas,mms114"
|
||||
- "melfas,mms152"
|
||||
- "melfas,mms345l"
|
||||
- reg: I2C address of the chip
|
||||
- interrupts: interrupt to which the chip is connected
|
||||
- touchscreen-size-x: See [1]
|
||||
- touchscreen-size-y: See [1]
|
||||
|
||||
Optional properties:
|
||||
- touchscreen-fuzz-x: See [1]
|
||||
- touchscreen-fuzz-y: See [1]
|
||||
- touchscreen-fuzz-pressure: See [1]
|
||||
- touchscreen-inverted-x: See [1]
|
||||
- touchscreen-inverted-y: See [1]
|
||||
- touchscreen-swapped-x-y: See [1]
|
||||
|
||||
[1]: Documentation/devicetree/bindings/input/touchscreen/touchscreen.txt
|
||||
|
||||
Example:
|
||||
|
||||
i2c@00000000 {
|
||||
/* ... */
|
||||
|
||||
touchscreen@48 {
|
||||
compatible = "melfas,mms114";
|
||||
reg = <0x48>;
|
||||
interrupts = <39 0>;
|
||||
touchscreen-size-x = <720>;
|
||||
touchscreen-size-y = <1280>;
|
||||
touchscreen-fuzz-x = <10>;
|
||||
touchscreen-fuzz-y = <10>;
|
||||
touchscreen-fuzz-pressure = <10>;
|
||||
touchscreen-inverted-x;
|
||||
touchscreen-inverted-y;
|
||||
};
|
||||
|
||||
/* ... */
|
||||
};
|
||||
@@ -0,0 +1,69 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/input/touchscreen/mstar,msg2638.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: MStar msg2638 touchscreen controller Bindings
|
||||
|
||||
maintainers:
|
||||
- Vincent Knecht <vincent.knecht@mailoo.org>
|
||||
|
||||
allOf:
|
||||
- $ref: touchscreen.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: mstar,msg2638
|
||||
|
||||
reg:
|
||||
const: 0x26
|
||||
|
||||
interrupts:
|
||||
maxItems: 1
|
||||
|
||||
reset-gpios:
|
||||
maxItems: 1
|
||||
|
||||
vdd-supply:
|
||||
description: Power supply regulator for the chip
|
||||
|
||||
vddio-supply:
|
||||
description: Power supply regulator for the I2C bus
|
||||
|
||||
touchscreen-size-x: true
|
||||
touchscreen-size-y: true
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- interrupts
|
||||
- reset-gpios
|
||||
- touchscreen-size-x
|
||||
- touchscreen-size-y
|
||||
|
||||
examples:
|
||||
- |
|
||||
#include <dt-bindings/gpio/gpio.h>
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
touchscreen@26 {
|
||||
compatible = "mstar,msg2638";
|
||||
reg = <0x26>;
|
||||
interrupt-parent = <&msmgpio>;
|
||||
interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
|
||||
reset-gpios = <&msmgpio 100 GPIO_ACTIVE_LOW>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&ts_int_reset_default>;
|
||||
vdd-supply = <&pm8916_l17>;
|
||||
vddio-supply = <&pm8916_l5>;
|
||||
touchscreen-size-x = <2048>;
|
||||
touchscreen-size-y = <2048>;
|
||||
};
|
||||
};
|
||||
|
||||
...
|
||||
@@ -495,6 +495,8 @@ patternProperties:
|
||||
description: Shenzhen Hugsun Technology Co. Ltd.
|
||||
"^hwacom,.*":
|
||||
description: HwaCom Systems Inc.
|
||||
"^hycon,.*":
|
||||
description: Hycon Technology Corp.
|
||||
"^hydis,.*":
|
||||
description: Hydis Technologies
|
||||
"^hyundai,.*":
|
||||
|
||||
@@ -107,13 +107,17 @@ example below:
|
||||
},
|
||||
};
|
||||
|
||||
static const struct property_entry rotary_encoder_properties[] __initconst = {
|
||||
static const struct property_entry rotary_encoder_properties[] = {
|
||||
PROPERTY_ENTRY_U32("rotary-encoder,steps-per-period", 24),
|
||||
PROPERTY_ENTRY_U32("linux,axis", ABS_X),
|
||||
PROPERTY_ENTRY_U32("rotary-encoder,relative_axis", 0),
|
||||
{ },
|
||||
};
|
||||
|
||||
static const struct software_node rotary_encoder_node = {
|
||||
.properties = rotary_encoder_properties,
|
||||
};
|
||||
|
||||
static struct platform_device rotary_encoder_device = {
|
||||
.name = "rotary-encoder",
|
||||
.id = 0,
|
||||
@@ -122,7 +126,7 @@ example below:
|
||||
...
|
||||
|
||||
gpiod_add_lookup_table(&rotary_encoder_gpios);
|
||||
device_add_properties(&rotary_encoder_device, rotary_encoder_properties);
|
||||
device_add_software_node(&rotary_encoder_device.dev, &rotary_encoder_node);
|
||||
platform_device_register(&rotary_encoder_device);
|
||||
|
||||
...
|
||||
|
||||
@@ -8388,6 +8388,13 @@ S: Maintained
|
||||
F: mm/hwpoison-inject.c
|
||||
F: mm/memory-failure.c
|
||||
|
||||
HYCON HY46XX TOUCHSCREEN SUPPORT
|
||||
M: Giulio Benetti <giulio.benetti@benettiengineering.com>
|
||||
L: linux-input@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/devicetree/bindings/input/touchscreen/hycon,hy46xx.yaml
|
||||
F: drivers/input/touchscreen/hycon-hy46xx.c
|
||||
|
||||
HYGON PROCESSOR SUPPORT
|
||||
M: Pu Wen <puwen@hygon.cn>
|
||||
L: linux-kernel@vger.kernel.org
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
obj-$(CONFIG_INPUT) += input-core.o
|
||||
input-core-y := input.o input-compat.o input-mt.o input-poller.o ff-core.o
|
||||
input-core-y += touchscreen.o
|
||||
|
||||
obj-$(CONFIG_INPUT_FF_MEMLESS) += ff-memless.o
|
||||
obj-$(CONFIG_INPUT_SPARSEKMAP) += sparse-keymap.o
|
||||
|
||||
@@ -268,6 +268,7 @@ static const struct xpad_device {
|
||||
{ 0x1689, 0xfd00, "Razer Onza Tournament Edition", 0, XTYPE_XBOX360 },
|
||||
{ 0x1689, 0xfd01, "Razer Onza Classic Edition", 0, XTYPE_XBOX360 },
|
||||
{ 0x1689, 0xfe00, "Razer Sabertooth", 0, XTYPE_XBOX360 },
|
||||
{ 0x1949, 0x041a, "Amazon Game Controller", 0, XTYPE_XBOX360 },
|
||||
{ 0x1bad, 0x0002, "Harmonix Rock Band Guitar", 0, XTYPE_XBOX360 },
|
||||
{ 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
|
||||
{ 0x1bad, 0x0130, "Ion Drum Rocker", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
|
||||
@@ -440,6 +441,7 @@ static const struct usb_device_id xpad_table[] = {
|
||||
XPAD_XBOX360_VENDOR(0x15e4), /* Numark X-Box 360 controllers */
|
||||
XPAD_XBOX360_VENDOR(0x162e), /* Joytech X-Box 360 controllers */
|
||||
XPAD_XBOX360_VENDOR(0x1689), /* Razer Onza */
|
||||
XPAD_XBOX360_VENDOR(0x1949), /* Amazon controllers */
|
||||
XPAD_XBOX360_VENDOR(0x1bad), /* Harminix Rock Band Guitar and Drums */
|
||||
XPAD_XBOX360_VENDOR(0x20d6), /* PowerA Controllers */
|
||||
XPAD_XBOXONE_VENDOR(0x20d6), /* PowerA Controllers */
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <linux/hrtimer.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/interrupt.h>
|
||||
@@ -36,10 +37,11 @@ struct gpio_button_data {
|
||||
|
||||
unsigned short *code;
|
||||
|
||||
struct timer_list release_timer;
|
||||
struct hrtimer release_timer;
|
||||
unsigned int release_delay; /* in msecs, for IRQ-only buttons */
|
||||
|
||||
struct delayed_work work;
|
||||
struct hrtimer debounce_timer;
|
||||
unsigned int software_debounce; /* in msecs, for GPIO-driven buttons */
|
||||
|
||||
unsigned int irq;
|
||||
@@ -48,6 +50,7 @@ struct gpio_button_data {
|
||||
bool disabled;
|
||||
bool key_pressed;
|
||||
bool suspended;
|
||||
bool debounce_use_hrtimer;
|
||||
};
|
||||
|
||||
struct gpio_keys_drvdata {
|
||||
@@ -122,6 +125,18 @@ static const unsigned long *get_bm_events_by_type(struct input_dev *dev,
|
||||
return (type == EV_KEY) ? dev->keybit : dev->swbit;
|
||||
}
|
||||
|
||||
static void gpio_keys_quiesce_key(void *data)
|
||||
{
|
||||
struct gpio_button_data *bdata = data;
|
||||
|
||||
if (!bdata->gpiod)
|
||||
hrtimer_cancel(&bdata->release_timer);
|
||||
if (bdata->debounce_use_hrtimer)
|
||||
hrtimer_cancel(&bdata->debounce_timer);
|
||||
else
|
||||
cancel_delayed_work_sync(&bdata->work);
|
||||
}
|
||||
|
||||
/**
|
||||
* gpio_keys_disable_button() - disables given GPIO button
|
||||
* @bdata: button data for button to be disabled
|
||||
@@ -142,12 +157,7 @@ static void gpio_keys_disable_button(struct gpio_button_data *bdata)
|
||||
* Disable IRQ and associated timer/work structure.
|
||||
*/
|
||||
disable_irq(bdata->irq);
|
||||
|
||||
if (bdata->gpiod)
|
||||
cancel_delayed_work_sync(&bdata->work);
|
||||
else
|
||||
del_timer_sync(&bdata->release_timer);
|
||||
|
||||
gpio_keys_quiesce_key(bdata);
|
||||
bdata->disabled = true;
|
||||
}
|
||||
}
|
||||
@@ -360,7 +370,9 @@ static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
|
||||
unsigned int type = button->type ?: EV_KEY;
|
||||
int state;
|
||||
|
||||
state = gpiod_get_value_cansleep(bdata->gpiod);
|
||||
state = bdata->debounce_use_hrtimer ?
|
||||
gpiod_get_value(bdata->gpiod) :
|
||||
gpiod_get_value_cansleep(bdata->gpiod);
|
||||
if (state < 0) {
|
||||
dev_err(input->dev.parent,
|
||||
"failed to get gpio state: %d\n", state);
|
||||
@@ -373,7 +385,15 @@ static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
|
||||
} else {
|
||||
input_event(input, type, *bdata->code, state);
|
||||
}
|
||||
input_sync(input);
|
||||
}
|
||||
|
||||
static void gpio_keys_debounce_event(struct gpio_button_data *bdata)
|
||||
{
|
||||
gpio_keys_gpio_report_event(bdata);
|
||||
input_sync(bdata->input);
|
||||
|
||||
if (bdata->button->wakeup)
|
||||
pm_relax(bdata->input->dev.parent);
|
||||
}
|
||||
|
||||
static void gpio_keys_gpio_work_func(struct work_struct *work)
|
||||
@@ -381,10 +401,17 @@ static void gpio_keys_gpio_work_func(struct work_struct *work)
|
||||
struct gpio_button_data *bdata =
|
||||
container_of(work, struct gpio_button_data, work.work);
|
||||
|
||||
gpio_keys_gpio_report_event(bdata);
|
||||
gpio_keys_debounce_event(bdata);
|
||||
}
|
||||
|
||||
if (bdata->button->wakeup)
|
||||
pm_relax(bdata->input->dev.parent);
|
||||
static enum hrtimer_restart gpio_keys_debounce_timer(struct hrtimer *t)
|
||||
{
|
||||
struct gpio_button_data *bdata =
|
||||
container_of(t, struct gpio_button_data, debounce_timer);
|
||||
|
||||
gpio_keys_debounce_event(bdata);
|
||||
|
||||
return HRTIMER_NORESTART;
|
||||
}
|
||||
|
||||
static irqreturn_t gpio_keys_gpio_isr(int irq, void *dev_id)
|
||||
@@ -408,26 +435,33 @@ static irqreturn_t gpio_keys_gpio_isr(int irq, void *dev_id)
|
||||
}
|
||||
}
|
||||
|
||||
mod_delayed_work(system_wq,
|
||||
&bdata->work,
|
||||
msecs_to_jiffies(bdata->software_debounce));
|
||||
if (bdata->debounce_use_hrtimer) {
|
||||
hrtimer_start(&bdata->debounce_timer,
|
||||
ms_to_ktime(bdata->software_debounce),
|
||||
HRTIMER_MODE_REL);
|
||||
} else {
|
||||
mod_delayed_work(system_wq,
|
||||
&bdata->work,
|
||||
msecs_to_jiffies(bdata->software_debounce));
|
||||
}
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static void gpio_keys_irq_timer(struct timer_list *t)
|
||||
static enum hrtimer_restart gpio_keys_irq_timer(struct hrtimer *t)
|
||||
{
|
||||
struct gpio_button_data *bdata = from_timer(bdata, t, release_timer);
|
||||
struct gpio_button_data *bdata = container_of(t,
|
||||
struct gpio_button_data,
|
||||
release_timer);
|
||||
struct input_dev *input = bdata->input;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&bdata->lock, flags);
|
||||
if (bdata->key_pressed) {
|
||||
input_event(input, EV_KEY, *bdata->code, 0);
|
||||
input_sync(input);
|
||||
bdata->key_pressed = false;
|
||||
}
|
||||
spin_unlock_irqrestore(&bdata->lock, flags);
|
||||
|
||||
return HRTIMER_NORESTART;
|
||||
}
|
||||
|
||||
static irqreturn_t gpio_keys_irq_isr(int irq, void *dev_id)
|
||||
@@ -457,23 +491,14 @@ static irqreturn_t gpio_keys_irq_isr(int irq, void *dev_id)
|
||||
}
|
||||
|
||||
if (bdata->release_delay)
|
||||
mod_timer(&bdata->release_timer,
|
||||
jiffies + msecs_to_jiffies(bdata->release_delay));
|
||||
hrtimer_start(&bdata->release_timer,
|
||||
ms_to_ktime(bdata->release_delay),
|
||||
HRTIMER_MODE_REL_HARD);
|
||||
out:
|
||||
spin_unlock_irqrestore(&bdata->lock, flags);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static void gpio_keys_quiesce_key(void *data)
|
||||
{
|
||||
struct gpio_button_data *bdata = data;
|
||||
|
||||
if (bdata->gpiod)
|
||||
cancel_delayed_work_sync(&bdata->work);
|
||||
else
|
||||
del_timer_sync(&bdata->release_timer);
|
||||
}
|
||||
|
||||
static int gpio_keys_setup_key(struct platform_device *pdev,
|
||||
struct input_dev *input,
|
||||
struct gpio_keys_drvdata *ddata,
|
||||
@@ -543,6 +568,14 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
|
||||
if (error < 0)
|
||||
bdata->software_debounce =
|
||||
button->debounce_interval;
|
||||
|
||||
/*
|
||||
* If reading the GPIO won't sleep, we can use a
|
||||
* hrtimer instead of a standard timer for the software
|
||||
* debounce, to reduce the latency as much as possible.
|
||||
*/
|
||||
bdata->debounce_use_hrtimer =
|
||||
!gpiod_cansleep(bdata->gpiod);
|
||||
}
|
||||
|
||||
if (button->irq) {
|
||||
@@ -561,6 +594,10 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
|
||||
|
||||
INIT_DELAYED_WORK(&bdata->work, gpio_keys_gpio_work_func);
|
||||
|
||||
hrtimer_init(&bdata->debounce_timer,
|
||||
CLOCK_REALTIME, HRTIMER_MODE_REL);
|
||||
bdata->debounce_timer.function = gpio_keys_debounce_timer;
|
||||
|
||||
isr = gpio_keys_gpio_isr;
|
||||
irqflags = IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING;
|
||||
|
||||
@@ -595,7 +632,9 @@ static int gpio_keys_setup_key(struct platform_device *pdev,
|
||||
}
|
||||
|
||||
bdata->release_delay = button->debounce_interval;
|
||||
timer_setup(&bdata->release_timer, gpio_keys_irq_timer, 0);
|
||||
hrtimer_init(&bdata->release_timer,
|
||||
CLOCK_REALTIME, HRTIMER_MODE_REL_HARD);
|
||||
bdata->release_timer.function = gpio_keys_irq_timer;
|
||||
|
||||
isr = gpio_keys_irq_isr;
|
||||
irqflags = 0;
|
||||
|
||||
@@ -408,27 +408,18 @@ open_err:
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
static const struct of_device_id imx_keypad_of_match[] = {
|
||||
{ .compatible = "fsl,imx21-kpp", },
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, imx_keypad_of_match);
|
||||
#endif
|
||||
|
||||
static int imx_keypad_probe(struct platform_device *pdev)
|
||||
{
|
||||
const struct matrix_keymap_data *keymap_data =
|
||||
dev_get_platdata(&pdev->dev);
|
||||
struct imx_keypad *keypad;
|
||||
struct input_dev *input_dev;
|
||||
int irq, error, i, row, col;
|
||||
|
||||
if (!keymap_data && !pdev->dev.of_node) {
|
||||
dev_err(&pdev->dev, "no keymap defined\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
irq = platform_get_irq(pdev, 0);
|
||||
if (irq < 0)
|
||||
return irq;
|
||||
@@ -469,7 +460,7 @@ static int imx_keypad_probe(struct platform_device *pdev)
|
||||
input_dev->open = imx_keypad_open;
|
||||
input_dev->close = imx_keypad_close;
|
||||
|
||||
error = matrix_keypad_build_keymap(keymap_data, NULL,
|
||||
error = matrix_keypad_build_keymap(NULL, NULL,
|
||||
MAX_MATRIX_KEY_ROWS,
|
||||
MAX_MATRIX_KEY_COLS,
|
||||
keypad->keycodes, input_dev);
|
||||
@@ -582,7 +573,7 @@ static struct platform_driver imx_keypad_driver = {
|
||||
.driver = {
|
||||
.name = "imx-keypad",
|
||||
.pm = &imx_kbd_pm_ops,
|
||||
.of_match_table = of_match_ptr(imx_keypad_of_match),
|
||||
.of_match_table = imx_keypad_of_match,
|
||||
},
|
||||
.probe = imx_keypad_probe,
|
||||
};
|
||||
|
||||
@@ -274,7 +274,7 @@ static int tca6416_keypad_probe(struct i2c_client *client,
|
||||
error = request_threaded_irq(chip->irqnum, NULL,
|
||||
tca6416_keys_isr,
|
||||
IRQF_TRIGGER_FALLING |
|
||||
IRQF_ONESHOT,
|
||||
IRQF_ONESHOT | IRQF_NO_AUTOEN,
|
||||
"tca6416-keypad", chip);
|
||||
if (error) {
|
||||
dev_dbg(&client->dev,
|
||||
@@ -282,7 +282,6 @@ static int tca6416_keypad_probe(struct i2c_client *client,
|
||||
chip->irqnum, error);
|
||||
goto fail1;
|
||||
}
|
||||
disable_irq(chip->irqnum);
|
||||
}
|
||||
|
||||
error = input_register_device(input);
|
||||
|
||||
@@ -694,14 +694,13 @@ static int tegra_kbc_probe(struct platform_device *pdev)
|
||||
input_set_drvdata(kbc->idev, kbc);
|
||||
|
||||
err = devm_request_irq(&pdev->dev, kbc->irq, tegra_kbc_isr,
|
||||
IRQF_TRIGGER_HIGH, pdev->name, kbc);
|
||||
IRQF_TRIGGER_HIGH | IRQF_NO_AUTOEN,
|
||||
pdev->name, kbc);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "failed to request keyboard IRQ\n");
|
||||
return err;
|
||||
}
|
||||
|
||||
disable_irq(kbc->irq);
|
||||
|
||||
err = input_register_device(kbc->idev);
|
||||
if (err) {
|
||||
dev_err(&pdev->dev, "failed to register input device\n");
|
||||
|
||||
@@ -763,6 +763,17 @@ config INPUT_IQS269A
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called iqs269a.
|
||||
|
||||
config INPUT_IQS626A
|
||||
tristate "Azoteq IQS626A capacitive touch controller"
|
||||
depends on I2C
|
||||
select REGMAP_I2C
|
||||
help
|
||||
Say Y to enable support for the Azoteq IQS626A capacitive
|
||||
touch controller.
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called iqs626a.
|
||||
|
||||
config INPUT_CMA3000
|
||||
tristate "VTI CMA3000 Tri-axis accelerometer"
|
||||
help
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user