aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2017-09-15 12:52:21 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2017-09-15 12:52:21 -0400
commitbbc8608755da42e7494c00dce24a636007972def (patch)
tree7db003ee57a435042dedfa6664aef31c24922c04
parenta6cbfa1e6d38c4b3ab0ce7e3aea4bb4e744f24b8 (diff)
parent697c5d8a36768b36729533fb44622b35d56d6ad0 (diff)
Merge branch 'next' into for-linus
Prepare second round of input updates for 4.14 merge window.
-rw-r--r--Documentation/devicetree/bindings/input/pwm-vibrator.txt66
-rw-r--r--drivers/input/joystick/adi.c2
-rw-r--r--drivers/input/joystick/xpad.c10
-rw-r--r--drivers/input/misc/Kconfig12
-rw-r--r--drivers/input/misc/Makefile1
-rw-r--r--drivers/input/misc/pwm-vibra.c267
-rw-r--r--drivers/input/mouse/elantech.c8
-rw-r--r--drivers/input/serio/i8042-x86ia64io.h7
-rw-r--r--drivers/input/touchscreen/edt-ft5x06.c3
-rw-r--r--drivers/input/touchscreen/goodix.c9
-rw-r--r--drivers/input/touchscreen/surface3_spi.c2
-rw-r--r--drivers/input/touchscreen/ucb1400_ts.c4
12 files changed, 380 insertions, 11 deletions
diff --git a/Documentation/devicetree/bindings/input/pwm-vibrator.txt b/Documentation/devicetree/bindings/input/pwm-vibrator.txt
new file mode 100644
index 000000000000..09145d18491d
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/pwm-vibrator.txt
@@ -0,0 +1,66 @@
1* PWM vibrator device tree bindings
2
3Registers a PWM device as vibrator. It is expected, that the vibrator's
4strength increases based on the duty cycle of the enable PWM channel
5(100% duty cycle meaning strongest vibration, 0% meaning no vibration).
6
7The binding supports an optional direction PWM channel, that can be
8driven at fixed duty cycle. If available this is can be used to increase
9the vibration effect of some devices.
10
11Required properties:
12- compatible: should contain "pwm-vibrator"
13- pwm-names: Should contain "enable" and optionally "direction"
14- pwms: Should contain a PWM handle for each entry in pwm-names
15
16Optional properties:
17- vcc-supply: Phandle for the regulator supplying power
18- direction-duty-cycle-ns: Duty cycle of the direction PWM channel in
19 nanoseconds, defaults to 50% of the channel's
20 period.
21
22Example from Motorola Droid 4:
23
24&omap4_pmx_core {
25 vibrator_direction_pin: pinmux_vibrator_direction_pin {
26 pinctrl-single,pins = <
27 OMAP4_IOPAD(0x1ce, PIN_OUTPUT | MUX_MODE1) /* dmtimer8_pwm_evt (gpio_27) */
28 >;
29 };
30
31 vibrator_enable_pin: pinmux_vibrator_enable_pin {
32 pinctrl-single,pins = <
33 OMAP4_IOPAD(0X1d0, PIN_OUTPUT | MUX_MODE1) /* dmtimer9_pwm_evt (gpio_28) */
34 >;
35 };
36};
37
38/ {
39 pwm8: dmtimer-pwm {
40 pinctrl-names = "default";
41 pinctrl-0 = <&vibrator_direction_pin>;
42
43 compatible = "ti,omap-dmtimer-pwm";
44 #pwm-cells = <3>;
45 ti,timers = <&timer8>;
46 ti,clock-source = <0x01>;
47 };
48
49 pwm9: dmtimer-pwm {
50 pinctrl-names = "default";
51 pinctrl-0 = <&vibrator_enable_pin>;
52
53 compatible = "ti,omap-dmtimer-pwm";
54 #pwm-cells = <3>;
55 ti,timers = <&timer9>;
56 ti,clock-source = <0x01>;
57 };
58
59 vibrator {
60 compatible = "pwm-vibrator";
61 pwms = <&pwm8 0 1000000000 0>,
62 <&pwm9 0 1000000000 0>;
63 pwm-names = "enable", "direction";
64 direction-duty-cycle-ns = <1000000000>;
65 };
66};
diff --git a/drivers/input/joystick/adi.c b/drivers/input/joystick/adi.c
index d09cefa37931..15a71acb6997 100644
--- a/drivers/input/joystick/adi.c
+++ b/drivers/input/joystick/adi.c
@@ -313,7 +313,7 @@ static void adi_close(struct input_dev *dev)
313 313
314static void adi_init_digital(struct gameport *gameport) 314static void adi_init_digital(struct gameport *gameport)
315{ 315{
316 int seq[] = { 4, -2, -3, 10, -6, -11, -7, -9, 11, 0 }; 316 static const int seq[] = { 4, -2, -3, 10, -6, -11, -7, -9, 11, 0 };
317 int i; 317 int i;
318 318
319 for (i = 0; seq[i]; i++) { 319 for (i = 0; seq[i]; i++) {
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
index f8e34ef643c7..d86e59515b9c 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -1764,10 +1764,12 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
1764 struct usb_endpoint_descriptor *ep = 1764 struct usb_endpoint_descriptor *ep =
1765 &intf->cur_altsetting->endpoint[i].desc; 1765 &intf->cur_altsetting->endpoint[i].desc;
1766 1766
1767 if (usb_endpoint_dir_in(ep)) 1767 if (usb_endpoint_xfer_int(ep)) {
1768 ep_irq_in = ep; 1768 if (usb_endpoint_dir_in(ep))
1769 else 1769 ep_irq_in = ep;
1770 ep_irq_out = ep; 1770 else
1771 ep_irq_out = ep;
1772 }
1771 } 1773 }
1772 1774
1773 if (!ep_irq_in || !ep_irq_out) { 1775 if (!ep_irq_in || !ep_irq_out) {
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index f47e836eaa0f..9f082a388388 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -581,6 +581,18 @@ config INPUT_PWM_BEEPER
581 To compile this driver as a module, choose M here: the module will be 581 To compile this driver as a module, choose M here: the module will be
582 called pwm-beeper. 582 called pwm-beeper.
583 583
584config INPUT_PWM_VIBRA
585 tristate "PWM vibrator support"
586 depends on PWM
587 select INPUT_FF_MEMLESS
588 help
589 Say Y here to get support for PWM based vibrator devices.
590
591 If unsure, say N.
592
593 To compile this driver as a module, choose M here: the module will be
594 called pwm-vibra.
595
584config INPUT_RK805_PWRKEY 596config INPUT_RK805_PWRKEY
585 tristate "Rockchip RK805 PMIC power key support" 597 tristate "Rockchip RK805 PMIC power key support"
586 depends on MFD_RK808 598 depends on MFD_RK808
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
index 1072e0760c19..03fd4262ada9 100644
--- a/drivers/input/misc/Makefile
+++ b/drivers/input/misc/Makefile
@@ -59,6 +59,7 @@ obj-$(CONFIG_INPUT_PM8XXX_VIBRATOR) += pm8xxx-vibrator.o
59obj-$(CONFIG_INPUT_PMIC8XXX_PWRKEY) += pmic8xxx-pwrkey.o 59obj-$(CONFIG_INPUT_PMIC8XXX_PWRKEY) += pmic8xxx-pwrkey.o
60obj-$(CONFIG_INPUT_POWERMATE) += powermate.o 60obj-$(CONFIG_INPUT_POWERMATE) += powermate.o
61obj-$(CONFIG_INPUT_PWM_BEEPER) += pwm-beeper.o 61obj-$(CONFIG_INPUT_PWM_BEEPER) += pwm-beeper.o
62obj-$(CONFIG_INPUT_PWM_VIBRA) += pwm-vibra.o
62obj-$(CONFIG_INPUT_RB532_BUTTON) += rb532_button.o 63obj-$(CONFIG_INPUT_RB532_BUTTON) += rb532_button.o
63obj-$(CONFIG_INPUT_REGULATOR_HAPTIC) += regulator-haptic.o 64obj-$(CONFIG_INPUT_REGULATOR_HAPTIC) += regulator-haptic.o
64obj-$(CONFIG_INPUT_RETU_PWRBUTTON) += retu-pwrbutton.o 65obj-$(CONFIG_INPUT_RETU_PWRBUTTON) += retu-pwrbutton.o
diff --git a/drivers/input/misc/pwm-vibra.c b/drivers/input/misc/pwm-vibra.c
new file mode 100644
index 000000000000..55da191ae550
--- /dev/null
+++ b/drivers/input/misc/pwm-vibra.c
@@ -0,0 +1,267 @@
1/*
2 * PWM vibrator driver
3 *
4 * Copyright (C) 2017 Collabora Ltd.
5 *
6 * Based on previous work from:
7 * Copyright (C) 2012 Dmitry Torokhov <dmitry.torokhov@gmail.com>
8 *
9 * Based on PWM beeper driver:
10 * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
11 *
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version.
16 */
17
18#include <linux/input.h>
19#include <linux/kernel.h>
20#include <linux/module.h>
21#include <linux/of_device.h>
22#include <linux/platform_device.h>
23#include <linux/property.h>
24#include <linux/pwm.h>
25#include <linux/regulator/consumer.h>
26#include <linux/slab.h>
27
28struct pwm_vibrator {
29 struct input_dev *input;
30 struct pwm_device *pwm;
31 struct pwm_device *pwm_dir;
32 struct regulator *vcc;
33
34 struct work_struct play_work;
35 u16 level;
36 u32 direction_duty_cycle;
37};
38
39static int pwm_vibrator_start(struct pwm_vibrator *vibrator)
40{
41 struct device *pdev = vibrator->input->dev.parent;
42 struct pwm_state state;
43 int err;
44