HID: usbhid: extend polling interval configuration to joysticks
authorTobias Jakobi <tjakobi@math.uni-bielefeld.de>
Sat, 25 Feb 2017 19:27:27 +0000 (20:27 +0100)
committerJiri Kosina <jkosina@suse.cz>
Mon, 6 Mar 2017 13:25:03 +0000 (14:25 +0100)
For mouse devices we can currently change the polling interval
via usbhid.mousepoll. Implement the same thing for joysticks, so
users can reduce input latency this way.

This has been tested with a Logitech RumblePad 2 with jspoll=2,
resulting in a polling rate of 500Hz (verified with evhz).

Signed-off-by: Tobias Jakobi <tjakobi@math.uni-bielefeld.de>
Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Documentation/admin-guide/kernel-parameters.txt
drivers/hid/usbhid/hid-core.c

index 635d11135090cd7fc604c2c3496359a5b7a50f73..14ffef04113c096f9ce2840bf8c0485c81e3e86a 100644 (file)
        usbhid.mousepoll=
                        [USBHID] The interval which mice are to be polled at.
 
+       usbhid.jspoll=
+                       [USBHID] The interval which joysticks 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 961bc6fdd2d908835fa9a07d169a4746fb44189d..b06fee1b8e477090f9527ddc88d3dcb535fb857e 100644 (file)
@@ -52,6 +52,10 @@ static unsigned int hid_mousepoll_interval;
 module_param_named(mousepoll, hid_mousepoll_interval, uint, 0644);
 MODULE_PARM_DESC(mousepoll, "Polling interval of mice");
 
+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 ignoreled;
 module_param_named(ignoreled, ignoreled, uint, 0644);
 MODULE_PARM_DESC(ignoreled, "Autosuspend with active leds");
@@ -1081,9 +1085,17 @@ static int usbhid_start(struct hid_device *hid)
                               hid->name, endpoint->bInterval, interval);
                }
 
-               /* Change the polling interval of mice. */
-               if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0)
-                       interval = hid_mousepoll_interval;
+               /* Change the polling interval of mice and joysticks. */
+               switch (hid->collection->usage) {
+               case HID_GD_MOUSE:
+                       if (hid_mousepoll_interval > 0)
+                               interval = hid_mousepoll_interval;
+                       break;
+               case HID_GD_JOYSTICK:
+                       if (hid_jspoll_interval > 0)
+                               interval = hid_jspoll_interval;
+                       break;
+               }
 
                ret = -ENOMEM;
                if (usb_endpoint_dir_in(endpoint)) {