From b3495cecb24c8e38e1b0c569c69c983b6a2d6d9c Mon Sep 17 00:00:00 2001 From: Deepa Dinamani Date: Mon, 1 Jan 2018 22:27:11 -0800 Subject: Input: uinput - use monotonic times for timestamps struct timeval which is part of struct input_event to maintain the event times is not y2038 safe. Real time timestamps are also not ideal for input_event as this time can go backwards as noted in the patch a80b83b7b8 by John Stultz. The patch switches the timestamps to use monotonic time from realtime time. This is assuming no one is using absolute times from these timestamps. The structure to maintain input events will be changed in a different patch. Signed-off-by: Deepa Dinamani Acked-by: Peter Hutterer Patchwork-Id: 10118255 Signed-off-by: Dmitry Torokhov --- drivers/input/misc/uinput.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'drivers/input/misc') diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c index 39ddd9a73feb..d521aecbc078 100644 --- a/drivers/input/misc/uinput.c +++ b/drivers/input/misc/uinput.c @@ -84,11 +84,14 @@ static int uinput_dev_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) { struct uinput_device *udev = input_get_drvdata(dev); + struct timespec64 ts; udev->buff[udev->head].type = type; udev->buff[udev->head].code = code; udev->buff[udev->head].value = value; - do_gettimeofday(&udev->buff[udev->head].time); + ktime_get_ts64(&ts); + udev->buff[udev->head].time.tv_sec = ts.tv_sec; + udev->buff[udev->head].time.tv_usec = ts.tv_nsec / NSEC_PER_USEC; udev->head = (udev->head + 1) % UINPUT_BUFFER_SIZE; wake_up_interruptible(&udev->waitq); -- cgit v1.2.1 From 3c8a23c29d30eec7a20fbb3e47e5346d9ada687b Mon Sep 17 00:00:00 2001 From: Linus Walleij Date: Mon, 1 Jan 2018 22:49:29 -0800 Subject: Input: gpio_tilt - delete driver This driver was merged in 2011 as a tool for detecting the orientation of a screen. The device driver assumes board file setup using the platform data from . But no boards in the kernel tree defines this platform data. As I am faced with refactoring drivers to use GPIO descriptors and pass decriptor tables from boards, or use the device tree device drivers like these creates a serious problem: I cannot fix them and cannot test them, not even compile-test them with a system actually using it (no in-tree boardfile). I suggest to delete this driver and rewrite it using device tree if it is still in use on actively maintained systems. I can also offer to rewrite it out of the blue using device tree if someone promise to test it and help me iterate it. Signed-off-by: Linus Walleij Acked-by: Heiko Stuebner Patchwork-Id: 10133609 Signed-off-by: Dmitry Torokhov --- drivers/input/misc/Kconfig | 14 --- drivers/input/misc/Makefile | 1 - drivers/input/misc/gpio_tilt_polled.c | 210 ---------------------------------- 3 files changed, 225 deletions(-) delete mode 100644 drivers/input/misc/gpio_tilt_polled.c (limited to 'drivers/input/misc') diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index 9f082a388388..4791e73839d9 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -268,20 +268,6 @@ config INPUT_GPIO_BEEPER To compile this driver as a module, choose M here: the module will be called gpio-beeper. -config INPUT_GPIO_TILT_POLLED - tristate "Polled GPIO tilt switch" - depends on GPIOLIB || COMPILE_TEST - select INPUT_POLLDEV - help - This driver implements support for tilt switches connected - to GPIO pins that are not capable of generating interrupts. - - The list of gpios to use and the mapping of their states - to specific angles is done via platform data. - - To compile this driver as a module, choose M here: the - module will be called gpio_tilt_polled. - config INPUT_GPIO_DECODER tristate "Polled GPIO Decoder Input driver" depends on GPIOLIB || COMPILE_TEST diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile index 4b6118d313fe..a8f61af865aa 100644 --- a/drivers/input/misc/Makefile +++ b/drivers/input/misc/Makefile @@ -36,7 +36,6 @@ obj-$(CONFIG_INPUT_DRV2665_HAPTICS) += drv2665.o 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_TILT_POLLED) += gpio_tilt_polled.o obj-$(CONFIG_INPUT_GPIO_DECODER) += gpio_decoder.o obj-$(CONFIG_INPUT_HISI_POWERKEY) += hisi_powerkey.o obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.o diff --git a/drivers/input/misc/gpio_tilt_polled.c b/drivers/input/misc/gpio_tilt_polled.c deleted file mode 100644 index 6e217a45e39a..000000000000 --- a/drivers/input/misc/gpio_tilt_polled.c +++ /dev/null @@ -1,210 +0,0 @@ -/* - * Driver for tilt switches connected via GPIO lines - * not capable of generating interrupts - * - * Copyright (C) 2011 Heiko Stuebner - * - * based on: drivers/input/keyboard/gpio_keys_polled.c - * - * Copyright (C) 2007-2010 Gabor Juhos - * Copyright (C) 2010 Nuno Goncalves - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define DRV_NAME "gpio-tilt-polled" - -struct gpio_tilt_polled_dev { - struct input_polled_dev *poll_dev; - struct device *dev; - const struct gpio_tilt_platform_data *pdata; - - int last_state; - - int threshold; - int count; -}; - -static void gpio_tilt_polled_poll(struct input_polled_dev *dev) -{ - struct gpio_tilt_polled_dev *tdev = dev->private; - const struct gpio_tilt_platform_data *pdata = tdev->pdata; - struct input_dev *input = dev->input; - struct gpio_tilt_state *tilt_state = NULL; - int state, i; - - if (tdev->count < tdev->threshold) { - tdev->count++; - } else { - state = 0; - for (i = 0; i < pdata->nr_gpios; i++) - state |= (!!gpio_get_value(pdata->gpios[i].gpio) << i); - - if (state != tdev->last_state) { - for (i = 0; i < pdata->nr_states; i++) - if (pdata->states[i].gpios == state) - tilt_state = &pdata->states[i]; - - if (tilt_state) { - for (i = 0; i < pdata->nr_axes; i++) - input_report_abs(input, - pdata->axes[i].axis, - tilt_state->axes[i]); - - input_sync(input); - } - - tdev->count = 0; - tdev->last_state = state; - } - } -} - -static void gpio_tilt_polled_open(struct input_polled_dev *dev) -{ - struct gpio_tilt_polled_dev *tdev = dev->private; - const struct gpio_tilt_platform_data *pdata = tdev->pdata; - - if (pdata->enable) - pdata->enable(tdev->dev); - - /* report initial state of the axes */ - tdev->last_state = -1; - tdev->count = tdev->threshold; - gpio_tilt_polled_poll(tdev->poll_dev); -} - -static void gpio_tilt_polled_close(struct input_polled_dev *dev) -{ - struct gpio_tilt_polled_dev *tdev = dev->private; - const struct gpio_tilt_platform_data *pdata = tdev->pdata; - - if (pdata->disable) - pdata->disable(tdev->dev); -} - -static int gpio_tilt_polled_probe(struct platform_device *pdev) -{ - const struct gpio_tilt_platform_data *pdata = - dev_get_platdata(&pdev->dev); - struct device *dev = &pdev->dev; - struct gpio_tilt_polled_dev *tdev; - struct input_polled_dev *poll_dev; - struct input_dev *input; - int error, i; - - if (!pdata || !pdata->poll_interval) - return -EINVAL; - - tdev = kzalloc(sizeof(struct gpio_tilt_polled_dev), GFP_KERNEL); - if (!tdev) { - dev_err(dev, "no memory for private data\n"); - return -ENOMEM; - } - - error = gpio_request_array(pdata->gpios, pdata->nr_gpios); - if (error) { - dev_err(dev, - "Could not request tilt GPIOs: %d\n", error); - goto err_free_tdev; - } - - poll_dev = input_allocate_polled_device(); - if (!poll_dev) { - dev_err(dev, "no memory for polled device\n"); - error = -ENOMEM; - goto err_free_gpios; - } - - poll_dev->private = tdev; - poll_dev->poll = gpio_tilt_polled_poll; - poll_dev->poll_interval = pdata->poll_interval; - poll_dev->open = gpio_tilt_polled_open; - poll_dev->close = gpio_tilt_polled_close; - - input = poll_dev->input; - - input->name = pdev->name; - input->phys = DRV_NAME"/input0"; - input->dev.parent = dev; - - input->id.bustype = BUS_HOST; - input->id.vendor = 0x0001; - input->id.product = 0x0001; - input->id.version = 0x0100; - - __set_bit(EV_ABS, input->evbit); - for (i = 0; i < pdata->nr_axes; i++) - input_set_abs_params(input, pdata->axes[i].axis, - pdata->axes[i].min, pdata->axes[i].max, - pdata->axes[i].fuzz, pdata->axes[i].flat); - - tdev->threshold = DIV_ROUND_UP(pdata->debounce_interval, - pdata->poll_interval); - - tdev->poll_dev = poll_dev; - tdev->dev = dev; - tdev->pdata = pdata; - - error = input_register_polled_device(poll_dev); - if (error) { - dev_err(dev, "unable to register polled device, err=%d\n", - error); - goto err_free_polldev; - } - - platform_set_drvdata(pdev, tdev); - - return 0; - -err_free_polldev: - input_free_polled_device(poll_dev); -err_free_gpios: - gpio_free_array(pdata->gpios, pdata->nr_gpios); -err_free_tdev: - kfree(tdev); - - return error; -} - -static int gpio_tilt_polled_remove(struct platform_device *pdev) -{ - struct gpio_tilt_polled_dev *tdev = platform_get_drvdata(pdev); - const struct gpio_tilt_platform_data *pdata = tdev->pdata; - - input_unregister_polled_device(tdev->poll_dev); - input_free_polled_device(tdev->poll_dev); - - gpio_free_array(pdata->gpios, pdata->nr_gpios); - - kfree(tdev); - - return 0; -} - -static struct platform_driver gpio_tilt_polled_driver = { - .probe = gpio_tilt_polled_probe, - .remove = gpio_tilt_polled_remove, - .driver = { - .name = DRV_NAME, - }, -}; - -module_platform_driver(gpio_tilt_polled_driver); - -MODULE_LICENSE("GPL v2"); -MODULE_AUTHOR("Heiko Stuebner "); -MODULE_DESCRIPTION("Polled GPIO tilt driver"); -MODULE_ALIAS("platform:" DRV_NAME); -- cgit v1.2.1 From b8af0b5b928775960ff4b5936cbbc20714e9d921 Mon Sep 17 00:00:00 2001 From: Zhuohua Li Date: Mon, 1 Jan 2018 22:51:47 -0800 Subject: Input: tps65218-pwrbutton - fix a spelling mistake in Kconfig Fix a spelling mistake: buttong -> button Signed-off-by: Zhuohua Li Patchwork-Id: 10134469 Signed-off-by: Dmitry Torokhov --- drivers/input/misc/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers/input/misc') diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index 4791e73839d9..62a1312a7387 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -454,7 +454,7 @@ config INPUT_TPS65218_PWRBUTTON tristate "TPS65218 Power button driver" depends on (MFD_TPS65217 || MFD_TPS65218) help - Say Y here if you want to enable power buttong reporting for + Say Y here if you want to enable power button reporting for TPS65217 and TPS65218 Power Management IC devices. To compile this driver as a module, choose M here. The module will -- cgit v1.2.1 From 152194fe9c3f03232b9c0d0264793a7fa4af82f8 Mon Sep 17 00:00:00 2001 From: Deepa Dinamani Date: Sun, 7 Jan 2018 17:44:42 -0800 Subject: Input: extend usable life of event timestamps to 2106 on 32 bit systems The input events use struct timeval to store event time, unfortunately this structure is not y2038 safe and is being replaced in kernel with y2038 safe structures. Because of ABI concerns we can not change the size or the layout of structure input_event, so we opt to re-interpreting the 'seconds' part of timestamp as an unsigned value, effectively doubling the range of values, to year 2106. Newer glibc that has support for 32 bit applications to use 64 bit time_t supplies __USE_TIME_BITS64 define [1], that we can use to present the userspace with updated input_event layout. The updated layout will cause the compile time breakage, alerting applications and distributions maintainers to the issue. Existing 32 binaries will continue working without any changes until 2038. Ultimately userspace applications should switch to using monotonic or boot time clocks, as realtime clock is not very well suited for input event timestamps as it can go backwards (see a80b83b7b8 "Input: evdev - add CLOCK_BOOTTIME support" by by John Stultz). With monotonic clock the practical range of reported times will always fit into the pair of 32 bit values, as we do not expect any system to stay up for a hundred years without a single reboot. [1] https://sourceware.org/glibc/wiki/Y2038ProofnessDesign Suggested-by: Arnd Bergmann Signed-off-by: Deepa Dinamani Acked-by: Peter Hutterer Patchwork-Id: 10148083 Signed-off-by: Dmitry Torokhov --- drivers/input/misc/uinput.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/input/misc') diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c index d521aecbc078..cb4bdbd3e9e2 100644 --- a/drivers/input/misc/uinput.c +++ b/drivers/input/misc/uinput.c @@ -90,8 +90,8 @@ static int uinput_dev_event(struct input_dev *dev, udev->buff[udev->head].code = code; udev->buff[udev->head].value = value; ktime_get_ts64(&ts); - udev->buff[udev->head].time.tv_sec = ts.tv_sec; - udev->buff[udev->head].time.tv_usec = ts.tv_nsec / NSEC_PER_USEC; + udev->buff[udev->head].input_event_sec = ts.tv_sec; + udev->buff[udev->head].input_event_usec = ts.tv_nsec / NSEC_PER_USEC; udev->head = (udev->head + 1) % UINPUT_BUFFER_SIZE; wake_up_interruptible(&udev->waitq); -- cgit v1.2.1 From 9f1d1ea3e06aa4f0b88d724cee890973f8f8727b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 16 Jan 2018 16:36:48 -0800 Subject: Input: remove unneeded DRIVER_LICENSE #defines There is no need to #define the license of the driver, just put it in the MODULE_LICENSE() line directly as a text string. This allows tools that check that the module license matches the source code license to work properly, as there is no need to unwind the unneeded dereference. For some of these drivers, the #define is just a few lines above the MODULE_LICENSE() line, which is extra pointless. Reported-by: Philippe Ombredanne Signed-off-by: Greg Kroah-Hartman Reviewed-by: Philippe Ombredanne Signed-off-by: Dmitry Torokhov --- drivers/input/misc/keyspan_remote.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'drivers/input/misc') diff --git a/drivers/input/misc/keyspan_remote.c b/drivers/input/misc/keyspan_remote.c index 77c47d6325fe..4f13b2f7bf4f 100644 --- a/drivers/input/misc/keyspan_remote.c +++ b/drivers/input/misc/keyspan_remote.c @@ -20,7 +20,6 @@ #define DRIVER_VERSION "v0.1" #define DRIVER_AUTHOR "Michael Downey " #define DRIVER_DESC "Driver for the USB Keyspan remote control." -#define DRIVER_LICENSE "GPL" /* Parameters that can be passed to the driver. */ static int debug; @@ -592,4 +591,4 @@ module_usb_driver(keyspan_driver); MODULE_DEVICE_TABLE(usb, keyspan_table); MODULE_AUTHOR(DRIVER_AUTHOR); MODULE_DESCRIPTION(DRIVER_DESC); -MODULE_LICENSE(DRIVER_LICENSE); +MODULE_LICENSE("GPL"); -- cgit v1.2.1 From 141fc3fcfde3ea2b2ec71c037e8d11c1cdea1676 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 16 Jan 2018 16:43:52 -0800 Subject: Input: remove unneeded MODULE_VERSION() usage in misc input drivers MODULE_VERSION is useless for in-kernel drivers, so just remove all usage of it in the misc input drivers. Along with this, some DRIVER_VERSION macros were removed as they are also pointless. Signed-off-by: Greg Kroah-Hartman Signed-off-by: Dmitry Torokhov --- drivers/input/misc/apanel.c | 2 -- drivers/input/misc/ati_remote2.c | 2 -- drivers/input/misc/uinput.c | 1 - 3 files changed, 5 deletions(-) (limited to 'drivers/input/misc') diff --git a/drivers/input/misc/apanel.c b/drivers/input/misc/apanel.c index aad1df04c854..094bddf56755 100644 --- a/drivers/input/misc/apanel.c +++ b/drivers/input/misc/apanel.c @@ -26,7 +26,6 @@ #include #define APANEL_NAME "Fujitsu Application Panel" -#define APANEL_VERSION "1.3.1" #define APANEL "apanel" /* How often we poll keys - msecs */ @@ -345,7 +344,6 @@ module_exit(apanel_cleanup); MODULE_AUTHOR("Stephen Hemminger "); MODULE_DESCRIPTION(APANEL_NAME " driver"); MODULE_LICENSE("GPL"); -MODULE_VERSION(APANEL_VERSION); MODULE_ALIAS("dmi:*:svnFUJITSU:pnLifeBook*:pvr*:rvnFUJITSU:*"); MODULE_ALIAS("dmi:*:svnFUJITSU:pnLifebook*:pvr*:rvnFUJITSU:*"); diff --git a/drivers/input/misc/ati_remote2.c b/drivers/input/misc/ati_remote2.c index ebf4448b31b9..ded5b84e336d 100644 --- a/drivers/input/misc/ati_remote2.c +++ b/drivers/input/misc/ati_remote2.c @@ -14,10 +14,8 @@ #include #define DRIVER_DESC "ATI/Philips USB RF remote driver" -#define DRIVER_VERSION "0.3" MODULE_DESCRIPTION(DRIVER_DESC); -MODULE_VERSION(DRIVER_VERSION); MODULE_AUTHOR("Ville Syrjala "); MODULE_LICENSE("GPL"); diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c index cb4bdbd3e9e2..a94c5e05006b 100644 --- a/drivers/input/misc/uinput.c +++ b/drivers/input/misc/uinput.c @@ -1088,4 +1088,3 @@ MODULE_ALIAS("devname:" UINPUT_NAME); MODULE_AUTHOR("Aristeu Sergio Rozanski Filho"); MODULE_DESCRIPTION("User level driver support for input subsystem"); MODULE_LICENSE("GPL"); -MODULE_VERSION("0.3"); -- cgit v1.2.1 From 698c03b4745006e14eccb8270f714d52fac1c97e Mon Sep 17 00:00:00 2001 From: Julia Lawall Date: Tue, 16 Jan 2018 16:56:54 -0800 Subject: Input: inline macros for MODULE_LICENSE, etc Inline macro for MODULE_LICENSE to make the license information easy to find, eg with grep. Inline the other module-related macros at the same time. A simplified version of the semantic patch for the MODULE_LICENSE case is as follows: (http://coccinelle.lip6.fr/) // @s@ identifier i; expression e; @@ @@ declarer name MODULE_LICENSE; identifier s.i; expression s.e; @@ MODULE_LICENSE( - i + e ); // Signed-off-by: Julia Lawall [dtor: added a couple of drivers missed by the script, removed a few unused DRIVER_VERSION macros] Signed-off-by: Dmitry Torokhov --- drivers/input/misc/keyspan_remote.c | 8 ++------ drivers/input/misc/yealink.c | 6 ++---- 2 files changed, 4 insertions(+), 10 deletions(-) (limited to 'drivers/input/misc') diff --git a/drivers/input/misc/keyspan_remote.c b/drivers/input/misc/keyspan_remote.c index 4f13b2f7bf4f..67482b248b2d 100644 --- a/drivers/input/misc/keyspan_remote.c +++ b/drivers/input/misc/keyspan_remote.c @@ -17,10 +17,6 @@ #include #include -#define DRIVER_VERSION "v0.1" -#define DRIVER_AUTHOR "Michael Downey " -#define DRIVER_DESC "Driver for the USB Keyspan remote control." - /* Parameters that can be passed to the driver. */ static int debug; module_param(debug, int, 0444); @@ -589,6 +585,6 @@ static struct usb_driver keyspan_driver = module_usb_driver(keyspan_driver); MODULE_DEVICE_TABLE(usb, keyspan_table); -MODULE_AUTHOR(DRIVER_AUTHOR); -MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_AUTHOR("Michael Downey "); +MODULE_DESCRIPTION("Driver for the USB Keyspan remote control."); MODULE_LICENSE("GPL"); diff --git a/drivers/input/misc/yealink.c b/drivers/input/misc/yealink.c index a1e0ff59d2f2..f0c9bf87b4e3 100644 --- a/drivers/input/misc/yealink.c +++ b/drivers/input/misc/yealink.c @@ -56,8 +56,6 @@ #include "yealink.h" #define DRIVER_VERSION "yld-20051230" -#define DRIVER_AUTHOR "Henk Vergonet" -#define DRIVER_DESC "Yealink phone driver" #define YEALINK_POLLING_FREQUENCY 10 /* in [Hz] */ @@ -1006,6 +1004,6 @@ module_usb_driver(yealink_driver); MODULE_DEVICE_TABLE (usb, usb_table); -MODULE_AUTHOR(DRIVER_AUTHOR); -MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_AUTHOR("Henk Vergonet"); +MODULE_DESCRIPTION("Yealink phone driver"); MODULE_LICENSE("GPL"); -- cgit v1.2.1