diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-15 19:43:53 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-11-15 19:43:53 -0500 |
| commit | 4937e2a6f939a41bf811378e80d71f68aa0950c6 (patch) | |
| tree | ed8ac843c96f01cd054542169afc968ec5d96189 /drivers/input/misc | |
| parent | db0b2d01163cc3050eb52a979541e0d16553be48 (diff) | |
| parent | 42249094f79422fbf5ed4b54eeb48ff096809b8f (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
Pull input updates from Dmitry Torokhov:
"Updates for the input subsystem. You will get an new drivers for
Hyper-V synthetic keyboard and for Neonode zForce touchscreens, plus a
bunch of driver fixes and cleanups"
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (49 commits)
Revert "Input: ALPS - add support for model found on Dell XT2"
arm: dts: am335x sk: add touchscreen support
Input: ti_am335x_tsc - fix spelling mistake in TSC/ADC DT binding
Input: cyttsp4 - replace IS_ERR and PTR_ERR with PTR_ERR_OR_ZERO
Input: mma8450 - add missing i2c_set_clientdata() in mma8450_probe()
Input: mpu3050 - add missing i2c_set_clientdata() in mpu3050_probe()
Input: tnetv107x-keypad - make irqs signed for error handling
Input: add driver for Neonode zForce based touchscreens
Input: sh_keysc - enable the driver on all ARM platforms
Input: remove a redundant max() call
Input: mousedev - allow disabling even without CONFIG_EXPERT
Input: allow deselecting serio drivers even without CONFIG_EXPERT
Input: i8042 - add PNP modaliases
Input: evdev - fall back to vmalloc for client event buffer
Input: cypress_ps2 - do not consider data bad if palm is detected
Input: cypress_ps2 - remove useless cast
Input: fix PWM-related undefined reference errors
Input: ALPS - change secondary device's name
Input: wacom - not all multi-interface devices support touch
Input: nspire-keypad - add missing clk_disable_unprepare() on error path
...
Diffstat (limited to 'drivers/input/misc')
| -rw-r--r-- | drivers/input/misc/Kconfig | 4 | ||||
| -rw-r--r-- | drivers/input/misc/ad714x-spi.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/cobalt_btns.c | 2 | ||||
| -rw-r--r-- | drivers/input/misc/mma8450.c | 4 | ||||
| -rw-r--r-- | drivers/input/misc/mpu3050.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/pwm-beeper.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/rb532_button.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/rotary_encoder.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/sirfsoc-onkey.c | 2 | ||||
| -rw-r--r-- | drivers/input/misc/uinput.c | 26 |
10 files changed, 27 insertions, 16 deletions
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index aa51baaa9b1e..5f4967d01bc3 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig | |||
| @@ -156,7 +156,7 @@ config INPUT_MAX8925_ONKEY | |||
| 156 | 156 | ||
| 157 | config INPUT_MAX8997_HAPTIC | 157 | config INPUT_MAX8997_HAPTIC |
| 158 | tristate "MAXIM MAX8997 haptic controller support" | 158 | tristate "MAXIM MAX8997 haptic controller support" |
| 159 | depends on HAVE_PWM && MFD_MAX8997 | 159 | depends on PWM && HAVE_PWM && MFD_MAX8997 |
| 160 | select INPUT_FF_MEMLESS | 160 | select INPUT_FF_MEMLESS |
| 161 | help | 161 | help |
| 162 | This option enables device driver support for the haptic controller | 162 | This option enables device driver support for the haptic controller |
| @@ -461,7 +461,7 @@ config INPUT_PCF8574 | |||
| 461 | 461 | ||
| 462 | config INPUT_PWM_BEEPER | 462 | config INPUT_PWM_BEEPER |
| 463 | tristate "PWM beeper support" | 463 | tristate "PWM beeper support" |
| 464 | depends on HAVE_PWM || PWM | 464 | depends on PWM && HAVE_PWM |
| 465 | help | 465 | help |
| 466 | Say Y here to get support for PWM based beeper devices. | 466 | Say Y here to get support for PWM based beeper devices. |
| 467 | 467 | ||
diff --git a/drivers/input/misc/ad714x-spi.c b/drivers/input/misc/ad714x-spi.c index 61891486067c..3a90b710e309 100644 --- a/drivers/input/misc/ad714x-spi.c +++ b/drivers/input/misc/ad714x-spi.c | |||
| @@ -108,7 +108,6 @@ static int ad714x_spi_remove(struct spi_device *spi) | |||
| 108 | struct ad714x_chip *chip = spi_get_drvdata(spi); | 108 | struct ad714x_chip *chip = spi_get_drvdata(spi); |
| 109 | 109 | ||
| 110 | ad714x_remove(chip); | 110 | ad714x_remove(chip); |
| 111 | spi_set_drvdata(spi, NULL); | ||
| 112 | 111 | ||
| 113 | return 0; | 112 | return 0; |
| 114 | } | 113 | } |
diff --git a/drivers/input/misc/cobalt_btns.c b/drivers/input/misc/cobalt_btns.c index 4f77f87847e8..b5d71d245854 100644 --- a/drivers/input/misc/cobalt_btns.c +++ b/drivers/input/misc/cobalt_btns.c | |||
| @@ -131,7 +131,6 @@ static int cobalt_buttons_probe(struct platform_device *pdev) | |||
| 131 | err_free_mem: | 131 | err_free_mem: |
| 132 | input_free_polled_device(poll_dev); | 132 | input_free_polled_device(poll_dev); |
| 133 | kfree(bdev); | 133 | kfree(bdev); |
| 134 | dev_set_drvdata(&pdev->dev, NULL); | ||
| 135 | return error; | 134 | return error; |
| 136 | } | 135 | } |
| 137 | 136 | ||
| @@ -144,7 +143,6 @@ static int cobalt_buttons_remove(struct platform_device *pdev) | |||
| 144 | input_free_polled_device(bdev->poll_dev); | 143 | input_free_polled_device(bdev->poll_dev); |
| 145 | iounmap(bdev->reg); | 144 | iounmap(bdev->reg); |
| 146 | kfree(bdev); | 145 | kfree(bdev); |
| 147 | dev_set_drvdata(dev, NULL); | ||
| 148 | 146 | ||
| 149 | return 0; | 147 | return 0; |
| 150 | } | 148 | } |
diff --git a/drivers/input/misc/mma8450.c b/drivers/input/misc/mma8450.c index f3309696d053..59d4dcddf6de 100644 --- a/drivers/input/misc/mma8450.c +++ b/drivers/input/misc/mma8450.c | |||
| @@ -168,7 +168,7 @@ static void mma8450_close(struct input_polled_dev *dev) | |||
| 168 | * I2C init/probing/exit functions | 168 | * I2C init/probing/exit functions |
| 169 | */ | 169 | */ |
| 170 | static int mma8450_probe(struct i2c_client *c, | 170 | static int mma8450_probe(struct i2c_client *c, |
| 171 | const struct i2c_device_id *id) | 171 | const struct i2c_device_id *id) |
| 172 | { | 172 | { |
| 173 | struct input_polled_dev *idev; | 173 | struct input_polled_dev *idev; |
| 174 | struct mma8450 *m; | 174 | struct mma8450 *m; |
| @@ -204,6 +204,8 @@ static int mma8450_probe(struct i2c_client *c, | |||
| 204 | goto err_free_mem; | 204 | goto err_free_mem; |
| 205 | } | 205 | } |
| 206 | 206 | ||
| 207 | i2c_set_clientdata(c, m); | ||
| 208 | |||
| 207 | return 0; | 209 | return 0; |
| 208 | 210 | ||
| 209 | err_free_mem: | 211 | err_free_mem: |
diff --git a/drivers/input/misc/mpu3050.c b/drivers/input/misc/mpu3050.c index dce0d95943c5..6983ffbbfb94 100644 --- a/drivers/input/misc/mpu3050.c +++ b/drivers/input/misc/mpu3050.c | |||
| @@ -383,6 +383,7 @@ static int mpu3050_probe(struct i2c_client *client, | |||
| 383 | 383 | ||
| 384 | pm_runtime_enable(&client->dev); | 384 | pm_runtime_enable(&client->dev); |
| 385 | pm_runtime_set_autosuspend_delay(&client->dev, MPU3050_AUTO_DELAY); | 385 | pm_runtime_set_autosuspend_delay(&client->dev, MPU3050_AUTO_DELAY); |
| 386 | i2c_set_clientdata(client, sensor); | ||
| 386 | 387 | ||
| 387 | return 0; | 388 | return 0; |
| 388 | 389 | ||
diff --git a/drivers/input/misc/pwm-beeper.c b/drivers/input/misc/pwm-beeper.c index 2ff4d1c78ab8..940566e7be13 100644 --- a/drivers/input/misc/pwm-beeper.c +++ b/drivers/input/misc/pwm-beeper.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/input.h> | 16 | #include <linux/input.h> |
| 17 | #include <linux/module.h> | 17 | #include <linux/module.h> |
| 18 | #include <linux/kernel.h> | 18 | #include <linux/kernel.h> |
| 19 | #include <linux/of.h> | ||
| 19 | #include <linux/platform_device.h> | 20 | #include <linux/platform_device.h> |
| 20 | #include <linux/pwm.h> | 21 | #include <linux/pwm.h> |
| 21 | #include <linux/slab.h> | 22 | #include <linux/slab.h> |
diff --git a/drivers/input/misc/rb532_button.c b/drivers/input/misc/rb532_button.c index fb4f8ac3343b..83fff38b86b3 100644 --- a/drivers/input/misc/rb532_button.c +++ b/drivers/input/misc/rb532_button.c | |||
| @@ -87,7 +87,6 @@ static int rb532_button_remove(struct platform_device *pdev) | |||
| 87 | 87 | ||
| 88 | input_unregister_polled_device(poll_dev); | 88 | input_unregister_polled_device(poll_dev); |
| 89 | input_free_polled_device(poll_dev); | 89 | input_free_polled_device(poll_dev); |
| 90 | dev_set_drvdata(&pdev->dev, NULL); | ||
| 91 | 90 | ||
| 92 | return 0; | 91 | return 0; |
| 93 | } | 92 | } |
diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c index 5b1aff825138..f920ba7ab51f 100644 --- a/drivers/input/misc/rotary_encoder.c +++ b/drivers/input/misc/rotary_encoder.c | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | #include <linux/gpio.h> | 24 | #include <linux/gpio.h> |
| 25 | #include <linux/rotary_encoder.h> | 25 | #include <linux/rotary_encoder.h> |
| 26 | #include <linux/slab.h> | 26 | #include <linux/slab.h> |
| 27 | #include <linux/of.h> | ||
| 27 | #include <linux/of_platform.h> | 28 | #include <linux/of_platform.h> |
| 28 | #include <linux/of_gpio.h> | 29 | #include <linux/of_gpio.h> |
| 29 | 30 | ||
diff --git a/drivers/input/misc/sirfsoc-onkey.c b/drivers/input/misc/sirfsoc-onkey.c index 0621c367049a..7b8b03e0d0be 100644 --- a/drivers/input/misc/sirfsoc-onkey.c +++ b/drivers/input/misc/sirfsoc-onkey.c | |||
| @@ -153,7 +153,7 @@ static struct platform_driver sirfsoc_pwrc_driver = { | |||
| 153 | .name = "sirfsoc-pwrc", | 153 | .name = "sirfsoc-pwrc", |
| 154 | .owner = THIS_MODULE, | 154 | .owner = THIS_MODULE, |
| 155 | .pm = &sirfsoc_pwrc_pm_ops, | 155 | .pm = &sirfsoc_pwrc_pm_ops, |
| 156 | .of_match_table = of_match_ptr(sirfsoc_pwrc_of_match), | 156 | .of_match_table = sirfsoc_pwrc_of_match, |
| 157 | } | 157 | } |
| 158 | }; | 158 | }; |
| 159 | 159 | ||
diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c index a0a4bbaef02c..772835938a52 100644 --- a/drivers/input/misc/uinput.c +++ b/drivers/input/misc/uinput.c | |||
| @@ -430,20 +430,30 @@ static int uinput_setup_device(struct uinput_device *udev, | |||
| 430 | return retval; | 430 | return retval; |
| 431 | } | 431 | } |
| 432 | 432 | ||
| 433 | static ssize_t uinput_inject_event(struct uinput_device *udev, | 433 | static ssize_t uinput_inject_events(struct uinput_device *udev, |
| 434 | const char __user *buffer, size_t count) | 434 | const char __user *buffer, size_t count) |
| 435 | { | 435 | { |
| 436 | struct input_event ev; | 436 | struct input_event ev; |
| 437 | size_t bytes = 0; | ||
| 437 | 438 | ||
| 438 | if (count < input_event_size()) | 439 | if (count != 0 && count < input_event_size()) |
| 439 | return -EINVAL; | 440 | return -EINVAL; |
| 440 | 441 | ||
| 441 | if (input_event_from_user(buffer, &ev)) | 442 | while (bytes + input_event_size() <= count) { |
| 442 | return -EFAULT; | 443 | /* |
| 444 | * Note that even if some events were fetched successfully | ||
| 445 | * we are still going to return EFAULT instead of partial | ||
| 446 | * count to let userspace know that it got it's buffers | ||
| 447 | * all wrong. | ||
| 448 | */ | ||
| 449 | if (input_event_from_user(buffer + bytes, &ev)) | ||
| 450 | return -EFAULT; | ||
| 443 | 451 | ||
| 444 | input_event(udev->dev, ev.type, ev.code, ev.value); | 452 | input_event(udev->dev, ev.type, ev.code, ev.value); |
| 453 | bytes += input_event_size(); | ||
| 454 | } | ||
| 445 | 455 | ||
| 446 | return input_event_size(); | 456 | return bytes; |
| 447 | } | 457 | } |
| 448 | 458 | ||
| 449 | static ssize_t uinput_write(struct file *file, const char __user *buffer, | 459 | static ssize_t uinput_write(struct file *file, const char __user *buffer, |
| @@ -460,7 +470,7 @@ static ssize_t uinput_write(struct file *file, const char __user *buffer, | |||
| 460 | return retval; | 470 | return retval; |
| 461 | 471 | ||
| 462 | retval = udev->state == UIST_CREATED ? | 472 | retval = udev->state == UIST_CREATED ? |
| 463 | uinput_inject_event(udev, buffer, count) : | 473 | uinput_inject_events(udev, buffer, count) : |
| 464 | uinput_setup_device(udev, buffer, count); | 474 | uinput_setup_device(udev, buffer, count); |
| 465 | 475 | ||
| 466 | mutex_unlock(&udev->mutex); | 476 | mutex_unlock(&udev->mutex); |
