aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Jakobi <tjakobi@math.uni-bielefeld.de>2017-02-25 14:27:27 -0500
committerJiri Kosina <jkosina@suse.cz>2017-03-06 08:25:03 -0500
commit933bfe4d271ef5931bc7513a1239751ed251db04 (patch)
tree24eba935f0b52b2f2540de6ef626bae364027a6c
parent81bbef23db51c0b450d90607fbbc2ad80ee0d43f (diff)
HID: usbhid: extend polling interval configuration to joysticks
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>
-rw-r--r--Documentation/admin-guide/kernel-parameters.txt3
-rw-r--r--drivers/hid/usbhid/hid-core.c18
2 files changed, 18 insertions, 3 deletions
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 635d11135090..14ffef04113c 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -4085,6 +4085,9 @@
4085 usbhid.mousepoll= 4085 usbhid.mousepoll=
4086 [USBHID] The interval which mice are to be polled at. 4086 [USBHID] The interval which mice are to be polled at.
4087 4087
4088 usbhid.jspoll=
4089 [USBHID] The interval which joysticks are to be polled at.
4090
4088 usb-storage.delay_use= 4091 usb-storage.delay_use=
4089 [UMS] The delay in seconds before a new device is 4092 [UMS] The delay in seconds before a new device is
4090 scanned for Logical Units (default 1). 4093 scanned for Logical Units (default 1).
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index 961bc6fdd2d9..b06fee1b8e47 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -52,6 +52,10 @@ static unsigned int hid_mousepoll_interval;
52module_param_named(mousepoll, hid_mousepoll_interval, uint, 0644); 52module_param_named(mousepoll, hid_mousepoll_interval, uint, 0644);
53MODULE_PARM_DESC(mousepoll, "Polling interval of mice"); 53MODULE_PARM_DESC(mousepoll, "Polling interval of mice");
54 54
55static unsigned int hid_jspoll_interval;
56module_param_named(jspoll, hid_jspoll_interval, uint, 0644);
57MODULE_PARM_DESC(jspoll, "Polling interval of joysticks");
58
55static unsigned int ignoreled; 59static unsigned int ignoreled;
56module_param_named(ignoreled, ignoreled, uint, 0644); 60module_param_named(ignoreled, ignoreled, uint, 0644);
57MODULE_PARM_DESC(ignoreled, "Autosuspend with active leds"); 61MODULE_PARM_DESC(ignoreled, "Autosuspend with active leds");
@@ -1081,9 +1085,17 @@ static int usbhid_start(struct hid_device *hid)
1081 hid->name, endpoint->bInterval, interval); 1085 hid->name, endpoint->bInterval, interval);
1082 } 1086 }
1083 1087
1084 /* Change the polling interval of mice. */ 1088 /* Change the polling interval of mice and joysticks. */
1085 if (hid->collection->usage == HID_GD_MOUSE && hid_mousepoll_interval > 0) 1089 switch (hid->collection->usage) {
1086 interval = hid_mousepoll_interval; 1090 case HID_GD_MOUSE:
1091 if (hid_mousepoll_interval > 0)
1092 interval = hid_mousepoll_interval;
1093 break;
1094 case HID_GD_JOYSTICK:
1095 if (hid_jspoll_interval > 0)
1096 interval = hid_jspoll_interval;
1097 break;
1098 }
1087 1099
1088 ret = -ENOMEM; 1100 ret = -ENOMEM;
1089 if (usb_endpoint_dir_in(endpoint)) { 1101 if (usb_endpoint_dir_in(endpoint)) {