-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
HID: Add driver for Holtek gaming mouse 04d9:a067
This mouse is sold as Sharkoon Drakonia and Perixx MX-2000 and reports a too high usage maximum and logical maximum. This driver fixes the report descriptor so those values don't exceed HID_MAX_USAGES. Signed-off-by: Christian Ohm <chr.ohm@gmx.net> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
- Loading branch information
Christian Ohm
authored and
Jiri Kosina
committed
May 28, 2013
1 parent
f755407
commit 41de326
Showing
4 changed files
with
75 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
/* | ||
* HID driver for Holtek gaming mice | ||
* Copyright (c) 2013 Christian Ohm | ||
* Heavily inspired by various other HID drivers that adjust the report | ||
* descriptor. | ||
*/ | ||
|
||
/* | ||
* This program is free software; you can redistribute it and/or modify it | ||
* under the terms of the GNU General Public License as published by the Free | ||
* Software Foundation; either version 2 of the License, or (at your option) | ||
* any later version. | ||
*/ | ||
|
||
#include <linux/hid.h> | ||
#include <linux/module.h> | ||
#include <linux/usb.h> | ||
|
||
#include "hid-ids.h" | ||
|
||
/* | ||
* The report descriptor of some Holtek based gaming mice specifies an | ||
* excessively large number of consumer usages (2^15), which is more than | ||
* HID_MAX_USAGES. This prevents proper parsing of the report descriptor. | ||
* | ||
* This driver fixes the report descriptor for USB ID 04d9:a067, sold as | ||
* Sharkoon Drakonia and Perixx MX-2000. | ||
*/ | ||
|
||
static __u8 *holtek_mouse_report_fixup(struct hid_device *hdev, __u8 *rdesc, | ||
unsigned int *rsize) | ||
{ | ||
struct usb_interface *intf = to_usb_interface(hdev->dev.parent); | ||
|
||
if (intf->cur_altsetting->desc.bInterfaceNumber == 1) { | ||
/* Change usage maximum and logical maximum from 0x7fff to | ||
* 0x2fff, so they don't exceed HID_MAX_USAGES */ | ||
if (*rsize >= 122 && rdesc[115] == 0xff && rdesc[116] == 0x7f | ||
&& rdesc[120] == 0xff && rdesc[121] == 0x7f) { | ||
hid_info(hdev, "Fixing up report descriptor\n"); | ||
rdesc[116] = rdesc[121] = 0x2f; | ||
} | ||
} | ||
return rdesc; | ||
} | ||
|
||
static const struct hid_device_id holtek_mouse_devices[] = { | ||
{ HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, | ||
USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A067) }, | ||
{ } | ||
}; | ||
MODULE_DEVICE_TABLE(hid, holtek_mouse_devices); | ||
|
||
static struct hid_driver holtek_mouse_driver = { | ||
.name = "holtek_mouse", | ||
.id_table = holtek_mouse_devices, | ||
.report_fixup = holtek_mouse_report_fixup, | ||
}; | ||
|
||
static int __init holtek_mouse_init(void) | ||
{ | ||
return hid_register_driver(&holtek_mouse_driver); | ||
} | ||
|
||
static void __exit holtek_mouse_exit(void) | ||
{ | ||
hid_unregister_driver(&holtek_mouse_driver); | ||
} | ||
|
||
module_exit(holtek_mouse_exit); | ||
module_init(holtek_mouse_init); | ||
MODULE_LICENSE("GPL"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters