diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-09-15 12:52:21 -0400 |
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2017-09-15 12:52:21 -0400 |
| commit | bbc8608755da42e7494c00dce24a636007972def (patch) | |
| tree | 7db003ee57a435042dedfa6664aef31c24922c04 | |
| parent | a6cbfa1e6d38c4b3ab0ce7e3aea4bb4e744f24b8 (diff) | |
| parent | 697c5d8a36768b36729533fb44622b35d56d6ad0 (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.txt | 66 | ||||
| -rw-r--r-- | drivers/input/joystick/adi.c | 2 | ||||
| -rw-r--r-- | drivers/input/joystick/xpad.c | 10 | ||||
| -rw-r--r-- | drivers/input/misc/Kconfig | 12 | ||||
| -rw-r--r-- | drivers/input/misc/Makefile | 1 | ||||
| -rw-r--r-- | drivers/input/misc/pwm-vibra.c | 267 | ||||
| -rw-r--r-- | drivers/input/mouse/elantech.c | 8 | ||||
| -rw-r--r-- | drivers/input/serio/i8042-x86ia64io.h | 7 | ||||
| -rw-r--r-- | drivers/input/touchscreen/edt-ft5x06.c | 3 | ||||
| -rw-r--r-- | drivers/input/touchscreen/goodix.c | 9 | ||||
| -rw-r--r-- | drivers/input/touchscreen/surface3_spi.c | 2 | ||||
| -rw-r--r-- | drivers/input/touchscreen/ucb1400_ts.c | 4 |
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 | |||
| 3 | Registers a PWM device as vibrator. It is expected, that the vibrator's | ||
| 4 | strength increases based on the duty cycle of the enable PWM channel | ||
| 5 | (100% duty cycle meaning strongest vibration, 0% meaning no vibration). | ||
| 6 | |||
| 7 | The binding supports an optional direction PWM channel, that can be | ||
| 8 | driven at fixed duty cycle. If available this is can be used to increase | ||
| 9 | the vibration effect of some devices. | ||
| 10 | |||
| 11 | Required 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 | |||
| 16 | Optional 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 | |||
| 22 | Example 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 | ||
| 314 | static void adi_init_digital(struct gameport *gameport) | 314 | static 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 | ||
| 584 | config 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 | |||
| 584 | config INPUT_RK805_PWRKEY | 596 | config 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 | |||
| 59 | obj-$(CONFIG_INPUT_PMIC8XXX_PWRKEY) += pmic8xxx-pwrkey.o | 59 | obj-$(CONFIG_INPUT_PMIC8XXX_PWRKEY) += pmic8xxx-pwrkey.o |
| 60 | obj-$(CONFIG_INPUT_POWERMATE) += powermate.o | 60 | obj-$(CONFIG_INPUT_POWERMATE) += powermate.o |
| 61 | obj-$(CONFIG_INPUT_PWM_BEEPER) += pwm-beeper.o | 61 | obj-$(CONFIG_INPUT_PWM_BEEPER) += pwm-beeper.o |
| 62 | obj-$(CONFIG_INPUT_PWM_VIBRA) += pwm-vibra.o | ||
| 62 | obj-$(CONFIG_INPUT_RB532_BUTTON) += rb532_button.o | 63 | obj-$(CONFIG_INPUT_RB532_BUTTON) += rb532_button.o |
| 63 | obj-$(CONFIG_INPUT_REGULATOR_HAPTIC) += regulator-haptic.o | 64 | obj-$(CONFIG_INPUT_REGULATOR_HAPTIC) += regulator-haptic.o |
| 64 | obj-$(CONFIG_INPUT_RETU_PWRBUTTON) += retu-pwrbutton.o | 65 | obj-$(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 | |||
| 28 | struct 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 | |||
| 39 | static 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 | |||
