Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
14e0c731
Commit
14e0c731
authored
May 10, 2019
by
Dmitry Torokhov
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'next' into for-linus
Prepare input updates for 5.2 merge window.
parents
3a349763
0981949d
Changes
30
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
2297 additions
and
74 deletions
+2297
-74
Documentation/devicetree/bindings/input/gpio-vibrator.yaml
Documentation/devicetree/bindings/input/gpio-vibrator.yaml
+37
-0
Documentation/devicetree/bindings/input/lpc32xx-key.txt
Documentation/devicetree/bindings/input/lpc32xx-key.txt
+4
-1
Documentation/devicetree/bindings/input/microchip,qt1050.txt
Documentation/devicetree/bindings/input/microchip,qt1050.txt
+78
-0
Documentation/devicetree/bindings/input/sun4i-lradc-keys.txt
Documentation/devicetree/bindings/input/sun4i-lradc-keys.txt
+4
-2
Documentation/devicetree/bindings/input/touchscreen/goodix.txt
...entation/devicetree/bindings/input/touchscreen/goodix.txt
+3
-0
Documentation/devicetree/bindings/input/touchscreen/iqs5xx.txt
...entation/devicetree/bindings/input/touchscreen/iqs5xx.txt
+80
-0
Documentation/devicetree/bindings/vendor-prefixes.txt
Documentation/devicetree/bindings/vendor-prefixes.txt
+1
-0
drivers/hid/hid-input.c
drivers/hid/hid-input.c
+2
-0
drivers/input/evdev.c
drivers/input/evdev.c
+3
-4
drivers/input/keyboard/Kconfig
drivers/input/keyboard/Kconfig
+11
-0
drivers/input/keyboard/Makefile
drivers/input/keyboard/Makefile
+1
-0
drivers/input/keyboard/atkbd.c
drivers/input/keyboard/atkbd.c
+2
-0
drivers/input/keyboard/qt1050.c
drivers/input/keyboard/qt1050.c
+598
-0
drivers/input/keyboard/snvs_pwrkey.c
drivers/input/keyboard/snvs_pwrkey.c
+4
-26
drivers/input/keyboard/sun4i-lradc-keys.c
drivers/input/keyboard/sun4i-lradc-keys.c
+34
-4
drivers/input/misc/Kconfig
drivers/input/misc/Kconfig
+12
-0
drivers/input/misc/Makefile
drivers/input/misc/Makefile
+1
-0
drivers/input/misc/gpio-vibra.c
drivers/input/misc/gpio-vibra.c
+207
-0
drivers/input/mouse/psmouse-base.c
drivers/input/mouse/psmouse-base.c
+2
-0
drivers/input/rmi4/rmi_f54.c
drivers/input/rmi4/rmi_f54.c
+6
-15
drivers/input/serio/Kconfig
drivers/input/serio/Kconfig
+1
-0
drivers/input/serio/hyperv-keyboard.c
drivers/input/serio/hyperv-keyboard.c
+2
-0
drivers/input/serio/i8042.c
drivers/input/serio/i8042.c
+0
-3
drivers/input/serio/libps2.c
drivers/input/serio/libps2.c
+1
-0
drivers/input/touchscreen/Kconfig
drivers/input/touchscreen/Kconfig
+10
-0
drivers/input/touchscreen/Makefile
drivers/input/touchscreen/Makefile
+1
-0
drivers/input/touchscreen/edt-ft5x06.c
drivers/input/touchscreen/edt-ft5x06.c
+4
-19
drivers/input/touchscreen/goodix.c
drivers/input/touchscreen/goodix.c
+54
-0
drivers/input/touchscreen/iqs5xx.c
drivers/input/touchscreen/iqs5xx.c
+1133
-0
include/uapi/linux/input-event-codes.h
include/uapi/linux/input-event-codes.h
+1
-0
No files found.
Documentation/devicetree/bindings/input/gpio-vibrator.yaml
0 → 100644
View file @
14e0c731
# SPDX-License-Identifier: GPL-2.0
%YAML
1.2
---
$id
:
http://devicetree.org/schemas/bindings/input/gpio-vibrator.yaml#
$schema
:
http://devicetree.org/meta-schemas/core.yaml#
title
:
GPIO vibrator
maintainers
:
-
Luca Weiss <luca@z3ntu.xyz>
description
:
|+
Registers a GPIO device as vibrator, where the on/off capability is controlled by a GPIO.
properties
:
compatible
:
const
:
gpio-vibrator
enable-gpios
:
maxItems
:
1
vcc-supply
:
description
:
Regulator that provides power
required
:
-
compatible
-
enable-gpios
examples
:
-
|
#include <dt-bindings/gpio/gpio.h>
vibrator {
compatible = "gpio-vibrator";
enable-gpios = <&msmgpio 86 GPIO_ACTIVE_HIGH>;
vcc-supply = <&pm8941_l18>;
};
Documentation/devicetree/bindings/input/lpc32xx-key.txt
View file @
14e0c731
...
...
@@ -8,6 +8,7 @@ Required Properties:
- reg: Physical base address of the controller and length of memory mapped
region.
- interrupts: The interrupt number to the cpu.
- clocks: phandle to clock controller plus clock-specifier pair
- nxp,debounce-delay-ms: Debounce delay in ms
- nxp,scan-delay-ms: Repeated scan period in ms
- linux,keymap: the key-code to be reported when the key is pressed
...
...
@@ -22,7 +23,9 @@ Example:
key@40050000 {
compatible = "nxp,lpc3220-key";
reg = <0x40050000 0x1000>;
interrupts = <54 0>;
clocks = <&clk LPC32XX_CLK_KEY>;
interrupt-parent = <&sic1>;
interrupts = <22 IRQ_TYPE_LEVEL_HIGH>;
keypad,num-rows = <1>;
keypad,num-columns = <1>;
nxp,debounce-delay-ms = <3>;
...
...
Documentation/devicetree/bindings/input/microchip,qt1050.txt
0 → 100644
View file @
14e0c731
Microchip AT42QT1050 Five-channel Touch Sensor IC
The AT42QT1050 (QT1050) is a QTouchADC sensor device. The device can sense from
one to five keys, dependent on mode. The QT1050 includes all signal processing
functions necessary to provide stable sensing under a wide variety of changing
conditions, and the outputs are fully debounced.
The touchkey device node should be placed inside an I2C bus node.
Required properties:
- compatible: Must be "microchip,qt1050"
- reg: The I2C address of the device
- interrupts: The sink for the touchpad's IRQ output,
see ../interrupt-controller/interrupts.txt
Optional properties:
- wakeup-source: touch keys can be used as a wakeup source
Each button (key) is represented as a sub-node:
Each not specified key or key with linux,code set to KEY_RESERVED gets disabled
in HW.
Subnode properties:
- linux,code: Keycode to emit.
- reg: The key number. Valid values: 0, 1, 2, 3, 4.
Optional subnode-properties:
If a optional property is missing or has a invalid value the default value is
taken.
- microchip,pre-charge-time-ns:
Each touchpad need some time to precharge. The value depends on the mechanical
layout.
Valid value range: 0 - 637500; values must be a multiple of 2500;
default is 0.
- microchip,average-samples:
Number of data samples which are averaged for each read.
Valid values: 1, 4, 16, 64, 256, 1024, 4096, 16384; default is 1.
- microchip,average-scaling:
The scaling factor which is used to scale the average-samples.
Valid values: 1, 2, 4, 8, 16, 32, 64, 128; default is 1.
- microchip,threshold:
Number of counts to register a touch detection.
Valid value range: 0 - 255; default is 20.
Example:
QT1050 with 3 non continuous keys, key2 and key4 are disabled.
touchkeys@41 {
compatible = "microchip,qt1050";
reg = <0x41>;
interrupt-parent = <&gpio0>;
interrupts = <17 IRQ_TYPE_EDGE_FALLING>;
up@0 {
reg = <0>;
linux,code = <KEY_UP>;
microchip,average-samples = <64>;
microchip,average-scaling = <16>;
microchip,pre-charge-time-ns = <10000>;
};
right@1 {
reg = <1>;
linux,code = <KEY_RIGHT>;
microchip,average-samples = <64>;
microchip,average-scaling = <8>;
};
down@3 {
reg = <3>;
linux,code = <KEY_DOWN>;
microchip,average-samples = <256>;
microchip,average-scaling = <16>;
};
};
Documentation/devicetree/bindings/input/sun4i-lradc-keys.txt
View file @
14e0c731
...
...
@@ -2,12 +2,14 @@ Allwinner sun4i low res adc attached tablet keys
------------------------------------------------
Required properties:
- compatible: "allwinner,sun4i-a10-lradc-keys"
- compatible: should be one of the following string:
"allwinner,sun4i-a10-lradc-keys"
"allwinner,sun8i-a83t-r-lradc"
- reg: mmio address range of the chip
- interrupts: interrupt to which the chip is connected
- vref-supply: powersupply for the lradc reference voltage
Each key is represented as a sub-node of
"allwinner,sun4i-a10-lradc-keys"
:
Each key is represented as a sub-node of
the compatible mentioned above
:
Required subnode-properties:
- label: Descriptive name of the key.
...
...
Documentation/devicetree/bindings/input/touchscreen/goodix.txt
View file @
14e0c731
...
...
@@ -3,6 +3,7 @@ Device tree bindings for Goodix GT9xx series touchscreen controller
Required properties:
- compatible : Should be "goodix,gt1151"
or "goodix,gt5663"
or "goodix,gt5688"
or "goodix,gt911"
or "goodix,gt9110"
...
...
@@ -19,6 +20,8 @@ Optional properties:
- irq-gpios : GPIO pin used for IRQ. The driver uses the
interrupt gpio pin as output to reset the device.
- reset-gpios : GPIO pin used for reset
- AVDD28-supply : Analog power supply regulator on AVDD28 pin
- VDDIO-supply : GPIO power supply regulator on VDDIO pin
- touchscreen-inverted-x
- touchscreen-inverted-y
- touchscreen-size-x
...
...
Documentation/devicetree/bindings/input/touchscreen/iqs5xx.txt
0 → 100644
View file @
14e0c731
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>;
};
/* ... */
};
Documentation/devicetree/bindings/vendor-prefixes.txt
View file @
14e0c731
...
...
@@ -53,6 +53,7 @@ avic Shanghai AVIC Optoelectronics Co., Ltd.
avnet Avnet, Inc.
axentia Axentia Technologies AB
axis Axis Communications AB
azoteq Azoteq (Pty) Ltd
bananapi BIPAI KEJI LIMITED
bhf Beckhoff Automation GmbH & Co. KG
bitmain Bitmain Technologies
...
...
drivers/hid/hid-input.c
View file @
14e0c731
...
...
@@ -1036,6 +1036,8 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
case
0x28b
:
map_key_clear
(
KEY_FORWARDMAIL
);
break
;
case
0x28c
:
map_key_clear
(
KEY_SEND
);
break
;
case
0x29d
:
map_key_clear
(
KEY_KBD_LAYOUT_NEXT
);
break
;
case
0x2c7
:
map_key_clear
(
KEY_KBDINPUTASSIST_PREV
);
break
;
case
0x2c8
:
map_key_clear
(
KEY_KBDINPUTASSIST_NEXT
);
break
;
case
0x2c9
:
map_key_clear
(
KEY_KBDINPUTASSIST_PREVGROUP
);
break
;
...
...
drivers/input/evdev.c
View file @
14e0c731
...
...
@@ -503,14 +503,13 @@ static int evdev_open(struct inode *inode, struct file *file)
{
struct
evdev
*
evdev
=
container_of
(
inode
->
i_cdev
,
struct
evdev
,
cdev
);
unsigned
int
bufsize
=
evdev_compute_buffer_size
(
evdev
->
handle
.
dev
);
unsigned
int
size
=
sizeof
(
struct
evdev_client
)
+
bufsize
*
sizeof
(
struct
input_event
);
struct
evdev_client
*
client
;
int
error
;
client
=
kzalloc
(
size
,
GFP_KERNEL
|
__GFP_NOWARN
);
client
=
kzalloc
(
struct_size
(
client
,
buffer
,
bufsize
),
GFP_KERNEL
|
__GFP_NOWARN
);
if
(
!
client
)
client
=
vzalloc
(
s
ize
);
client
=
vzalloc
(
s
truct_size
(
client
,
buffer
,
bufsize
)
);
if
(
!
client
)
return
-
ENOMEM
;
...
...
drivers/input/keyboard/Kconfig
View file @
14e0c731
...
...
@@ -137,6 +137,17 @@ config KEYBOARD_ATKBD_RDI_KEYCODES
right-hand column will be interpreted as the key shown in the
left-hand column.
config KEYBOARD_QT1050
tristate "Microchip AT42QT1050 Touch Sensor Chip"
depends on I2C
select REGMAP_I2C
help
Say Y here if you want to use Microchip AT42QT1050 QTouch
Sensor chip as input device.
To compile this driver as a module, choose M here:
the module will be called qt1050
config KEYBOARD_QT1070
tristate "Atmel AT42QT1070 Touch Sensor Chip"
depends on I2C
...
...
drivers/input/keyboard/Makefile
View file @
14e0c731
...
...
@@ -50,6 +50,7 @@ obj-$(CONFIG_KEYBOARD_OPENCORES) += opencores-kbd.o
obj-$(CONFIG_KEYBOARD_PMIC8XXX)
+=
pmic8xxx-keypad.o
obj-$(CONFIG_KEYBOARD_PXA27x)
+=
pxa27x_keypad.o
obj-$(CONFIG_KEYBOARD_PXA930_ROTARY)
+=
pxa930_rotary.o
obj-$(CONFIG_KEYBOARD_QT1050)
+=
qt1050.o
obj-$(CONFIG_KEYBOARD_QT1070)
+=
qt1070.o
obj-$(CONFIG_KEYBOARD_QT2160)
+=
qt2160.o
obj-$(CONFIG_KEYBOARD_SAMSUNG)
+=
samsung-keypad.o
...
...
drivers/input/keyboard/atkbd.c
View file @
14e0c731
...
...
@@ -401,6 +401,8 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
if
(
ps2_handle_response
(
&
atkbd
->
ps2dev
,
data
))
goto
out
;
pm_wakeup_event
(
&
serio
->
dev
,
0
);
if
(
!
atkbd
->
enabled
)
goto
out
;
...
...
drivers/input/keyboard/qt1050.c
0 → 100644
View file @
14e0c731
This diff is collapsed.
Click to expand it.
drivers/input/keyboard/snvs_pwrkey.c
View file @
14e0c731
...
...
@@ -15,6 +15,7 @@
#include <linux/of.h>
#include <linux/of_address.h>
#include <linux/platform_device.h>
#include <linux/pm_wakeirq.h>
#include <linux/mfd/syscon.h>
#include <linux/regmap.h>
...
...
@@ -167,28 +168,9 @@ static int imx_snvs_pwrkey_probe(struct platform_device *pdev)
}
device_init_wakeup
(
&
pdev
->
dev
,
pdata
->
wakeup
);
return
0
;
}
static
int
__maybe_unused
imx_snvs_pwrkey_suspend
(
struct
device
*
dev
)
{
struct
platform_device
*
pdev
=
to_platform_device
(
dev
);
struct
pwrkey_drv_data
*
pdata
=
platform_get_drvdata
(
pdev
);
if
(
device_may_wakeup
(
&
pdev
->
dev
))
enable_irq_wake
(
pdata
->
irq
);
return
0
;
}
static
int
__maybe_unused
imx_snvs_pwrkey_resume
(
struct
device
*
dev
)
{
struct
platform_device
*
pdev
=
to_platform_device
(
dev
);
struct
pwrkey_drv_data
*
pdata
=
platform_get_drvdata
(
pdev
);
if
(
device_may_wakeup
(
&
pdev
->
dev
))
disable_irq_wake
(
pdata
->
irq
);
error
=
dev_pm_set_wake_irq
(
&
pdev
->
dev
,
pdata
->
irq
);
if
(
error
)
dev_err
(
&
pdev
->
dev
,
"irq wake enable failed.
\n
"
);
return
0
;
}
...
...
@@ -199,13 +181,9 @@ static const struct of_device_id imx_snvs_pwrkey_ids[] = {
};
MODULE_DEVICE_TABLE
(
of
,
imx_snvs_pwrkey_ids
);
static
SIMPLE_DEV_PM_OPS
(
imx_snvs_pwrkey_pm_ops
,
imx_snvs_pwrkey_suspend
,
imx_snvs_pwrkey_resume
);
static
struct
platform_driver
imx_snvs_pwrkey_driver
=
{
.
driver
=
{
.
name
=
"snvs_pwrkey"
,
.
pm
=
&
imx_snvs_pwrkey_pm_ops
,
.
of_match_table
=
imx_snvs_pwrkey_ids
,
},
.
probe
=
imx_snvs_pwrkey_probe
,
...
...
drivers/input/keyboard/sun4i-lradc-keys.c
View file @
14e0c731
...
...
@@ -46,6 +46,7 @@
#define CONTINUE_TIME_SEL(x) ((x) << 16)
/* 4 bits */
#define KEY_MODE_SEL(x) ((x) << 12)
/* 2 bits */
#define LEVELA_B_CNT(x) ((x) << 8)
/* 4 bits */
#define HOLD_KEY_EN(x) ((x) << 7)
#define HOLD_EN(x) ((x) << 6)
#define LEVELB_VOL(x) ((x) << 4)
/* 2 bits */
#define SAMPLE_RATE(x) ((x) << 2)
/* 2 bits */
...
...
@@ -63,6 +64,25 @@
#define CHAN0_KEYDOWN_IRQ BIT(1)
#define CHAN0_DATA_IRQ BIT(0)
/* struct lradc_variant - Describe sun4i-a10-lradc-keys hardware variant
* @divisor_numerator: The numerator of lradc Vref internally divisor
* @divisor_denominator: The denominator of lradc Vref internally divisor
*/
struct
lradc_variant
{
u8
divisor_numerator
;
u8
divisor_denominator
;
};
static
const
struct
lradc_variant
lradc_variant_a10
=
{
.
divisor_numerator
=
2
,
.
divisor_denominator
=
3
};
static
const
struct
lradc_variant
r_lradc_variant_a83t
=
{
.
divisor_numerator
=
3
,
.
divisor_denominator
=
4
};
struct
sun4i_lradc_keymap
{
u32
voltage
;
u32
keycode
;
...
...
@@ -74,6 +94,7 @@ struct sun4i_lradc_data {
void
__iomem
*
base
;
struct
regulator
*
vref_supply
;
struct
sun4i_lradc_keymap
*
chan0_map
;
const
struct
lradc_variant
*
variant
;
u32
chan0_map_count
;
u32
chan0_keycode
;
u32
vref
;
...
...
@@ -128,9 +149,9 @@ static int sun4i_lradc_open(struct input_dev *dev)
if
(
error
)
return
error
;
/* lradc Vref internally is divided by 2/3 */
lradc
->
vref
=
regulator_get_voltage
(
lradc
->
vref_supply
)
*
2
/
3
;
lradc
->
vref
=
regulator_get_voltage
(
lradc
->
vref_supply
)
*
lradc
->
variant
->
divisor_numerator
/
lradc
->
variant
->
divisor_denominator
;
/*
* Set sample time to 4 ms / 250 Hz. Wait 2 * 4 ms for key to
* stabilize on press, wait (1 + 1) * 4 ms for key release
...
...
@@ -222,6 +243,12 @@ static int sun4i_lradc_probe(struct platform_device *pdev)
if
(
error
)
return
error
;
lradc
->
variant
=
of_device_get_match_data
(
&
pdev
->
dev
);
if
(
!
lradc
->
variant
)
{
dev_err
(
&
pdev
->
dev
,
"Missing sun4i-a10-lradc-keys variant
\n
"
);
return
-
EINVAL
;
}
lradc
->
vref_supply
=
devm_regulator_get
(
dev
,
"vref"
);
if
(
IS_ERR
(
lradc
->
vref_supply
))
return
PTR_ERR
(
lradc
->
vref_supply
);
...
...
@@ -265,7 +292,10 @@ static int sun4i_lradc_probe(struct platform_device *pdev)
}
static
const
struct
of_device_id
sun4i_lradc_of_match
[]
=
{
{
.
compatible
=
"allwinner,sun4i-a10-lradc-keys"
,
},
{
.
compatible
=
"allwinner,sun4i-a10-lradc-keys"
,
.
data
=
&
lradc_variant_a10
},
{
.
compatible
=
"allwinner,sun8i-a83t-r-lradc"
,
.
data
=
&
r_lradc_variant_a83t
},
{
/* sentinel */
}
};
MODULE_DEVICE_TABLE
(
of
,
sun4i_lradc_of_match
);
...
...
drivers/input/misc/Kconfig
View file @
14e0c731
...
...
@@ -290,6 +290,18 @@ config INPUT_GPIO_DECODER
To compile this driver as a module, choose M here: the module
will be called gpio_decoder.
config INPUT_GPIO_VIBRA
tristate "GPIO vibrator support"
depends on GPIOLIB || COMPILE_TEST
select INPUT_FF_MEMLESS
help
Say Y here to get support for GPIO based vibrator devices.
If unsure, say N.
To compile this driver as a module, choose M here: the module will be
called gpio-vibra.
config INPUT_IXP4XX_BEEPER
tristate "IXP4XX Beeper support"
depends on ARCH_IXP4XX
...
...
drivers/input/misc/Makefile
View file @
14e0c731
...
...
@@ -36,6 +36,7 @@ obj-$(CONFIG_INPUT_DRV2667_HAPTICS) += drv2667.o
obj-$(CONFIG_INPUT_GP2A)
+=
gp2ap002a00f.o
obj-$(CONFIG_INPUT_GPIO_BEEPER)
+=
gpio-beeper.o
obj-$(CONFIG_INPUT_GPIO_DECODER)
+=
gpio_decoder.o
obj-$(CONFIG_INPUT_GPIO_VIBRA)
+=
gpio-vibra.o
obj-$(CONFIG_INPUT_HISI_POWERKEY)
+=
hisi_powerkey.o
obj-$(CONFIG_HP_SDC_RTC)
+=
hp_sdc_rtc.o
obj-$(CONFIG_INPUT_IMS_PCU)
+=
ims-pcu.o
...
...
drivers/input/misc/gpio-vibra.c
0 → 100644
View file @
14e0c731
// SPDX-License-Identifier: GPL-2.0+
/*
* GPIO vibrator driver
*
* Copyright (C) 2019 Luca Weiss <luca@z3ntu.xyz>
*
* Based on PWM vibrator driver:
* Copyright (C) 2017 Collabora Ltd.
*
* Based on previous work from:
* Copyright (C) 2012 Dmitry Torokhov <dmitry.torokhov@gmail.com>
*
* Based on PWM beeper driver:
* Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
*/
#include <linux/gpio/consumer.h>
#include <linux/input.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/property.h>
#include <linux/regulator/consumer.h>
#include <linux/slab.h>
struct
gpio_vibrator
{
struct
input_dev
*
input
;
struct
gpio_desc
*
gpio
;
struct
regulator
*
vcc
;
struct
work_struct
play_work
;
bool
running
;
bool
vcc_on
;
};
static
int
gpio_vibrator_start
(
struct
gpio_vibrator
*
vibrator
)
{
struct
device
*
pdev
=
vibrator
->
input
->
dev
.
parent
;
int
err
;
if
(
!
vibrator
->
vcc_on
)
{
err
=
regulator_enable
(
vibrator
->
vcc
);
if
(
err
)
{
dev_err
(
pdev
,
"failed to enable regulator: %d
\n
"
,
err
);
return
err
;
}
vibrator
->
vcc_on
=
true
;
}
gpiod_set_value_cansleep
(
vibrator
->
gpio
,
1
);
return
0
;
}
static
void
gpio_vibrator_stop
(
struct
gpio_vibrator
*
vibrator
)
{
gpiod_set_value_cansleep
(
vibrator
->
gpio
,
0
);
if
(
vibrator
->
vcc_on
)
{
regulator_disable
(
vibrator
->
vcc
);
vibrator
->
vcc_on
=
false
;
}
}
static
void
gpio_vibrator_play_work
(
struct
work_struct
*
work
)
{
struct
gpio_vibrator
*
vibrator
=
container_of
(
work
,
struct
gpio_vibrator
,
play_work
);
if
(
vibrator
->
running
)
gpio_vibrator_start
(
vibrator
);
else
gpio_vibrator_stop
(
vibrator
);
}
static
int
gpio_vibrator_play_effect
(
struct
input_dev
*
dev
,
void
*
data
,
struct
ff_effect
*
effect
)
{
struct
gpio_vibrator
*
vibrator
=
input_get_drvdata
(
dev
);
int
level
;
level
=
effect
->
u
.
rumble
.
strong_magnitude
;
if
(
!
level
)
level
=
effect
->
u
.
rumble
.
weak_magnitude
;
vibrator
->
running
=
level
;
schedule_work
(
&
vibrator
->
play_work
);
return
0
;
}
static
void
gpio_vibrator_close
(
struct
input_dev
*
input
)
{
struct
gpio_vibrator
*
vibrator
=
input_get_drvdata
(
input
);
cancel_work_sync
(
&
vibrator
->
play_work
);
gpio_vibrator_stop
(
vibrator
);
vibrator
->
running
=
false
;
}
static
int
gpio_vibrator_probe
(
struct
platform_device
*
pdev
)
{
struct
gpio_vibrator
*
vibrator
;
int
err
;
vibrator
=
devm_kzalloc
(
&
pdev
->
dev
,
sizeof
(
*
vibrator
),
GFP_KERNEL
);
if
(
!
vibrator
)
return
-
ENOMEM
;
vibrator
->
input
=
devm_input_allocate_device
(
&
pdev
->
dev
);
if
(
!
vibrator
->
input
)
return
-
ENOMEM
;
vibrator
->
vcc
=
devm_regulator_get
(
&
pdev
->
dev
,
"vcc"
);
err
=
PTR_ERR_OR_ZERO
(
vibrator
->
vcc
);
if
(
err
)
{
if
(
err
!=
-
EPROBE_DEFER
)
dev_err
(
&
pdev
->
dev
,
"Failed to request regulator: %d
\n
"
,
err
);
return
err
;
}
vibrator
->
gpio
=
devm_gpiod_get
(
&
pdev
->
dev
,
"enable"
,
GPIOD_OUT_LOW
);
err
=
PTR_ERR_OR_ZERO
(
vibrator
->
gpio
);
if
(
err
)
{
if
(
err
!=
-
EPROBE_DEFER
)
dev_err
(
&
pdev
->
dev
,
"Failed to request main gpio: %d
\n
"
,
err
);
return
err
;
}
INIT_WORK
(
&
vibrator
->
play_work
,
gpio_vibrator_play_work
);
vibrator
->
input
->
name
=
"gpio-vibrator"
;
vibrator
->
input
->
id
.
bustype
=
BUS_HOST
;
vibrator
->
input
->
close
=
gpio_vibrator_close
;
input_set_drvdata
(
vibrator
->
input
,
vibrator
);
input_set_capability
(
vibrator
->
input
,
EV_FF
,
FF_RUMBLE
);
err
=
input_ff_create_memless
(
vibrator
->
input
,
NULL
,
gpio_vibrator_play_effect
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"Couldn't create FF dev: %d
\n
"
,
err
);
return
err
;
}
err
=
input_register_device
(
vibrator
->
input
);
if
(
err
)
{
dev_err
(
&
pdev
->
dev
,
"Couldn't register input dev: %d
\n
"
,
err
);
return
err
;
}
platform_set_drvdata
(
pdev
,
vibrator
);
return
0
;
}
static
int
__maybe_unused
gpio_vibrator_suspend
(
struct
device
*
dev
)
{
struct
platform_device
*
pdev
=
to_platform_device
(
dev
);
struct
gpio_vibrator
*
vibrator
=
platform_get_drvdata
(
pdev
);
cancel_work_sync
(
&
vibrator
->
play_work
);
if
(
vibrator
->
running
)
gpio_vibrator_stop
(
vibrator
);
return
0
;
}
static
int
__maybe_unused
gpio_vibrator_resume
(
struct
device
*
dev
)
{
struct
platform_device
*
pdev
=
to_platform_device
(
dev
);
struct
gpio_vibrator
*
vibrator
=
platform_get_drvdata
(
pdev
);
if
(
vibrator
->
running
)
gpio_vibrator_start
(
vibrator
);
return
0
;
}
static
SIMPLE_DEV_PM_OPS
(
gpio_vibrator_pm_ops
,
gpio_vibrator_suspend
,
gpio_vibrator_resume
);
#ifdef CONFIG_OF
static
const
struct
of_device_id
gpio_vibra_dt_match_table
[]
=
{
{
.
compatible
=
"gpio-vibrator"
},
{}
};
MODULE_DEVICE_TABLE
(
of
,
gpio_vibra_dt_match_table
);
#endif
static
struct
platform_driver
gpio_vibrator_driver
=
{
.
probe
=
gpio_vibrator_probe
,
.
driver
=
{
.
name
=
"gpio-vibrator"
,
.
pm
=
&
gpio_vibrator_pm_ops
,
.
of_match_table
=
of_match_ptr
(
gpio_vibra_dt_match_table
),
},
};
module_platform_driver
(
gpio_vibrator_driver
);
MODULE_AUTHOR
(
"Luca Weiss <luca@z3ntu.xy>"
);
MODULE_DESCRIPTION
(
"GPIO vibrator driver"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_ALIAS
(
"platform:gpio-vibrator"
);
drivers/input/mouse/psmouse-base.c
View file @
14e0c731
...
...
@@ -373,6 +373,8 @@ static irqreturn_t psmouse_interrupt(struct serio *serio,
if
(
ps2_handle_response
(
&
psmouse
->
ps2dev
,
data
))
goto
out
;
pm_wakeup_event
(
&
serio
->
dev
,
0
);
if
(
psmouse
->
state
<=
PSMOUSE_RESYNCING
)
goto
out
;
...
...
drivers/input/rmi4/rmi_f54.c
View file @
14e0c731
...
...
@@ -456,25 +456,15 @@ static int rmi_f54_vidioc_fmt(struct file *file, void *priv,
static
int
rmi_f54_vidioc_enum_fmt
(
struct
file
*
file
,
void
*
priv
,
struct
v4l2_fmtdesc
*
fmt
)
{
struct
f54_data
*
f54
=
video_drvdata
(
file
);
if
(
fmt
->
type
!=
V4L2_BUF_TYPE_VIDEO_CAPTURE
)
return
-
EINVAL
;
switch
(
fmt
->
index
)
{
case
0
:
fmt
->
pixelformat
=
V4L2_TCH_FMT_DELTA_TD16
;
break
;
case
1
:
fmt
->
pixelformat
=
V4L2_TCH_FMT_DELTA_TD08
;
break
;
case
2
:
fmt
->
pixelformat
=
V4L2_TCH_FMT_TU16
;
break
;
default:
if
(
fmt
->
index
)
return
-
EINVAL
;
}
fmt
->
pixelformat
=
f54
->
format
.
pixelformat
;
return
0
;
}
...
...
@@ -692,6 +682,7 @@ static int rmi_f54_probe(struct rmi_function *fn)
return
-
ENOMEM
;
rmi_f54_create_input_map
(
f54
);
rmi_f54_set_input
(
f54
,
0
);
/* register video device */
strlcpy
(
f54
->
v4l2
.
name
,
F54_NAME
,
sizeof
(
f54
->
v4l2
.
name
));
...
...
drivers/input/serio/Kconfig
View file @
14e0c731
...
...
@@ -254,6 +254,7 @@ config SERIO_APBPS2
config SERIO_OLPC_APSP
tristate "OLPC AP-SP input support"
depends on ARCH_MMP || COMPILE_TEST
help
Say Y here if you want support for the keyboard and touchpad included
in the OLPC XO-1.75 and XO-4 laptops.
...
...
drivers/input/serio/hyperv-keyboard.c
View file @
14e0c731
...
...
@@ -440,5 +440,7 @@ static void __exit hv_kbd_exit(void)
}
MODULE_LICENSE
(
"GPL"
);
MODULE_DESCRIPTION
(
"Microsoft Hyper-V Synthetic Keyboard Driver"
);
module_init
(
hv_kbd_init
);
module_exit
(
hv_kbd_exit
);
drivers/input/serio/i8042.c
View file @
14e0c731
...
...
@@ -573,9 +573,6 @@ static irqreturn_t i8042_interrupt(int irq, void *dev_id)
port
=
&
i8042_ports
[
port_no
];
serio
=
port
->
exists
?
port
->
serio
:
NULL
;
if
(
irq
&&
serio
)
pm_wakeup_event
(
&
serio
->
dev
,
0
);
filter_dbg
(
port
->
driver_bound
,
data
,
"<- i8042 (interrupt, %d, %d%s%s)
\n
"
,
port_no
,
irq
,
dfl
&
SERIO_PARITY
?
", bad parity"
:
""
,
...
...
drivers/input/serio/libps2.c
View file @
14e0c731
...
...
@@ -409,6 +409,7 @@ bool ps2_handle_ack(struct ps2dev *ps2dev, u8 data)
ps2dev
->
nak
=
PS2_RET_ERR
;
break
;
}
/* Fall through */
/*
* Workaround for mice which don't ACK the Get ID command.
...
...
drivers/input/touchscreen/Kconfig
View file @
14e0c731
...
...
@@ -1312,4 +1312,14 @@ config TOUCHSCREEN_ROHM_BU21023
To compile this driver as a module, choose M here: the
module will be called bu21023_ts.
config TOUCHSCREEN_IQS5XX
tristate "Azoteq IQS550/572/525 trackpad/touchscreen controller"
depends on I2C
help
Say Y to enable support for the Azoteq IQS550/572/525
family of trackpad/touchscreen controllers.
To compile this driver as a module, choose M here: the
module will be called iqs5xx.
endif
drivers/input/touchscreen/Makefile
View file @
14e0c731
...
...
@@ -110,3 +110,4 @@ obj-$(CONFIG_TOUCHSCREEN_ZFORCE) += zforce_ts.o
obj-$(CONFIG_TOUCHSCREEN_COLIBRI_VF50)
+=
colibri-vf50-ts.o
obj-$(CONFIG_TOUCHSCREEN_ROHM_BU21023)
+=
rohm_bu21023.o
obj-$(CONFIG_TOUCHSCREEN_RASPBERRYPI_FW)
+=
raspberrypi-ts.o
obj-$(CONFIG_TOUCHSCREEN_IQS5XX)
+=
iqs5xx.o
drivers/input/touchscreen/edt-ft5x06.c
View file @
14e0c731
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2012 Simon Budig, <simon.budig@kernelconcepts.de>
* Daniel Wagener <daniel.wagener@kernelconcepts.de> (M09 firmware support)
* Lothar Waßmann <LW@KARO-electronics.de> (DT support)
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
...
...
@@ -39,7 +27,6 @@
#include <linux/gpio/consumer.h>
#include <linux/input/mt.h>
#include <linux/input/touchscreen.h>
#include <linux/of_device.h>
#define WORK_REGISTER_THRESHOLD 0x00
#define WORK_REGISTER_REPORT_RATE 0x08
...
...
@@ -1073,7 +1060,7 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
return
-
ENOMEM
;
}
chip_data
=
of_
device_get_match_data
(
&
client
->
dev
);
chip_data
=
device_get_match_data
(
&
client
->
dev
);
if
(
!
chip_data
)
chip_data
=
(
const
struct
edt_i2c_chip_data
*
)
id
->
driver_data
;
if
(
!
chip_data
||
!
chip_data
->
max_support_points
)
{
...
...
@@ -1254,7 +1241,6 @@ static const struct i2c_device_id edt_ft5x06_ts_id[] = {
};
MODULE_DEVICE_TABLE
(
i2c
,
edt_ft5x06_ts_id
);
#ifdef CONFIG_OF
static
const
struct
of_device_id
edt_ft5x06_of_match
[]
=
{
{
.
compatible
=
"edt,edt-ft5206"
,
.
data
=
&
edt_ft5x06_data
},
{
.
compatible
=
"edt,edt-ft5306"
,
.
data
=
&
edt_ft5x06_data
},
...
...
@@ -1266,12 +1252,11 @@ static const struct of_device_id edt_ft5x06_of_match[] = {
{
/* sentinel */
}
};
MODULE_DEVICE_TABLE
(
of
,
edt_ft5x06_of_match
);
#endif
static
struct
i2c_driver
edt_ft5x06_ts_driver
=
{
.
driver
=
{
.
name
=
"edt_ft5x06"
,
.
of_match_table
=
of_match_ptr
(
edt_ft5x06_of_match
)
,
.
of_match_table
=
edt_ft5x06_of_match
,
.
pm
=
&
edt_ft5x06_ts_pm_ops
,
},
.
id_table
=
edt_ft5x06_ts_id
,
...
...
@@ -1283,4 +1268,4 @@ module_i2c_driver(edt_ft5x06_ts_driver);
MODULE_AUTHOR
(
"Simon Budig <simon.budig@kernelconcepts.de>"
);
MODULE_DESCRIPTION
(
"EDT FT5x06 I2C Touchscreen Driver"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL
v2
"
);
drivers/input/touchscreen/goodix.c
View file @
14e0c731
...
...
@@ -27,6 +27,7 @@
#include <linux/delay.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/regulator/consumer.h>
#include <linux/slab.h>
#include <linux/acpi.h>
#include <linux/of.h>
...
...
@@ -47,6 +48,8 @@ struct goodix_ts_data {
struct
touchscreen_properties
prop
;
unsigned
int
max_touch_num
;
unsigned
int
int_trigger_type
;
struct
regulator
*
avdd28
;
struct
regulator
*
vddio
;
struct
gpio_desc
*
gpiod_int
;
struct
gpio_desc
*
gpiod_rst
;
u16
id
;
...
...
@@ -216,6 +219,7 @@ static const struct goodix_chip_data *goodix_get_chip_data(u16 id)
{
switch
(
id
)
{
case
1151
:
case
5663
:
case
5688
:
return
&
gt1x_chip_data
;
...
...
@@ -532,6 +536,24 @@ static int goodix_get_gpio_config(struct goodix_ts_data *ts)
return
-
EINVAL
;
dev
=
&
ts
->
client
->
dev
;
ts
->
avdd28
=
devm_regulator_get
(
dev
,
"AVDD28"
);
if
(
IS_ERR
(
ts
->
avdd28
))
{
error
=
PTR_ERR
(
ts
->
avdd28
);
if
(
error
!=
-
EPROBE_DEFER
)
dev_err
(
dev
,
"Failed to get AVDD28 regulator: %d
\n
"
,
error
);
return
error
;
}
ts
->
vddio
=
devm_regulator_get
(
dev
,
"VDDIO"
);
if
(
IS_ERR
(
ts
->
vddio
))
{
error
=
PTR_ERR
(
ts
->
vddio
);
if
(
error
!=
-
EPROBE_DEFER
)
dev_err
(
dev
,
"Failed to get VDDIO regulator: %d
\n
"
,
error
);
return
error
;
}
/* Get the interrupt GPIO pin number */
gpiod
=
devm_gpiod_get_optional
(
dev
,
GOODIX_GPIO_INT_NAME
,
GPIOD_IN
);
if
(
IS_ERR
(
gpiod
))
{
...
...
@@ -764,6 +786,14 @@ static void goodix_config_cb(const struct firmware *cfg, void *ctx)
complete_all
(
&
ts
->
firmware_loading_complete
);
}
static
void
goodix_disable_regulators
(
void
*
arg
)
{
struct
goodix_ts_data
*
ts
=
arg
;
regulator_disable
(
ts
->
vddio
);
regulator_disable
(
ts
->
avdd28
);
}
static
int
goodix_ts_probe
(
struct
i2c_client
*
client
,
const
struct
i2c_device_id
*
id
)
{
...
...
@@ -789,6 +819,29 @@ static int goodix_ts_probe(struct i2c_client *client,
if
(
error
)
return
error
;
/* power up the controller */
error
=
regulator_enable
(
ts
->
avdd28
);
if
(
error
)
{
dev_err
(
&
client
->
dev
,
"Failed to enable AVDD28 regulator: %d
\n
"
,
error
);
return
error
;
}
error
=
regulator_enable
(
ts
->
vddio
);
if
(
error
)
{
dev_err
(
&
client
->
dev
,
"Failed to enable VDDIO regulator: %d
\n
"
,
error
);
regulator_disable
(
ts
->
avdd28
);
return
error
;
}
error
=
devm_add_action_or_reset
(
&
client
->
dev
,
goodix_disable_regulators
,
ts
);
if
(
error
)
return
error
;
if
(
ts
->
gpiod_int
&&
ts
->
gpiod_rst
)
{
/* reset the controller */
error
=
goodix_reset
(
ts
);
...
...
@@ -945,6 +998,7 @@ MODULE_DEVICE_TABLE(acpi, goodix_acpi_match);
#ifdef CONFIG_OF
static
const
struct
of_device_id
goodix_of_match
[]
=
{
{
.
compatible
=
"goodix,gt1151"
},
{
.
compatible
=
"goodix,gt5663"
},
{
.
compatible
=
"goodix,gt5688"
},
{
.
compatible
=
"goodix,gt911"
},
{
.
compatible
=
"goodix,gt9110"
},
...
...
drivers/input/touchscreen/iqs5xx.c
0 → 100644
View file @
14e0c731
This diff is collapsed.
Click to expand it.
include/uapi/linux/input-event-codes.h
View file @
14e0c731
...
...
@@ -606,6 +606,7 @@
#define KEY_SCREENSAVER 0x245
/* AL Screen Saver */
#define KEY_VOICECOMMAND 0x246
/* Listening Voice Command */
#define KEY_ASSISTANT 0x247
/* AL Context-aware desktop assistant */
#define KEY_KBD_LAYOUT_NEXT 0x248
/* AC Next Keyboard Layout Select */
#define KEY_BRIGHTNESS_MIN 0x250
/* Set Brightness to Minimum */
#define KEY_BRIGHTNESS_MAX 0x251
/* Set Brightness to Maximum */
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment