HID: usbhid: extend the polling interval configuration to keyboards
authorFilip Alac <filipalac@gmail.com>
Wed, 21 Mar 2018 16:28:25 +0000 (17:28 +0100)
committerJiri Kosina <jkosina@suse.cz>
Fri, 23 Mar 2018 13:48:37 +0000 (14:48 +0100)
For mouse and joystick devices user can change the polling interval
via usbhid.mousepoll and usbhid.jspoll.
Implement the same thing for keyboards, so user can
reduce(or increase) input latency this way.

This has been tested with a Cooler Master Devastator with
kbpoll=32, resulting in delay between events of 32 ms(values were taken
from evtest).

Signed-off-by: Filip Alac <filipalac@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Documentation/admin-guide/kernel-parameters.txt
drivers/hid/usbhid/hid-core.c

index b98048b56ada9c9e6ab38c5b06d6c74b549ecc03..e0d82520668103d863b2a417caeb67897b4734f7 100644 (file)
        usbhid.jspoll=
                        [USBHID] The interval which joysticks are to be polled at.
 
+       usbhid.kbpoll=
+                       [USBHID] The interval which keyboards are to be polled at.
+
        usb-storage.delay_use=
                        [UMS] The delay in seconds before a new device is
                        scanned for Logical Units (default 1).
index 77c50cdfff974cd35b91c30e4fb9940a23ecedb2..af0e0d061b157c56779c77a399871a539d360846 100644 (file)
@@ -56,6 +56,10 @@ static unsigned int hid_jspoll_interval;
 module_param_named(jspoll, hid_jspoll_interval, uint, 0644);
 MODULE_PARM_DESC(jspoll, "Polling interval of joysticks");
 
+static unsigned int hid_kbpoll_interval;
+module_param_named(kbpoll, hid_kbpoll_interval, uint, 0644);
+MODULE_PARM_DESC(kbpoll, "Polling interval of keyboards");
+
 static unsigned int ignoreled;
 module_param_named(ignoreled, ignoreled, uint, 0644);
 MODULE_PARM_DESC(ignoreled, "Autosuspend with active leds");
@@ -1094,7 +1098,9 @@ static int usbhid_start(struct hid_device *hid)
                                hid->name, endpoint->bInterval, interval);
                }
 
-               /* Change the polling interval of mice and joysticks. */
+               /* Change the polling interval of mice, joysticks
+                * and keyboards.
+                */
                switch (hid->collection->usage) {
                case HID_GD_MOUSE:
                        if (hid_mousepoll_interval > 0)
@@ -1104,6 +1110,10 @@ static int usbhid_start(struct hid_device *hid)
                        if (hid_jspoll_interval > 0)
                                interval = hid_jspoll_interval;
                        break;
+               case HID_GD_KEYBOARD:
+                       if (hid_kbpoll_interval > 0)
+                               interval = hid_kbpoll_interval;
+                       break;
                }
 
                ret = -ENOMEM;