|
@@ -268,6 +268,26 @@ static __u8 easypen_m610x_rdesc_fixed[] = {
|
|
|
0xC0 /* End Collection */
|
|
|
};
|
|
|
|
|
|
+static __u8 *kye_consumer_control_fixup(struct hid_device *hdev, __u8 *rdesc,
|
|
|
+ unsigned int *rsize, int offset, const char *device_name) {
|
|
|
+ /*
|
|
|
+ * the fixup that need to be done:
|
|
|
+ * - change Usage Maximum in the Comsumer Control
|
|
|
+ * (report ID 3) to a reasonable value
|
|
|
+ */
|
|
|
+ if (*rsize >= offset + 31 &&
|
|
|
+ /* Usage Page (Consumer Devices) */
|
|
|
+ rdesc[offset] == 0x05 && rdesc[offset + 1] == 0x0c &&
|
|
|
+ /* Usage (Consumer Control) */
|
|
|
+ rdesc[offset + 2] == 0x09 && rdesc[offset + 3] == 0x01 &&
|
|
|
+ /* Usage Maximum > 12287 */
|
|
|
+ rdesc[offset + 10] == 0x2a && rdesc[offset + 12] > 0x2f) {
|
|
|
+ hid_info(hdev, "fixing up %s report descriptor\n", device_name);
|
|
|
+ rdesc[offset + 12] = 0x2f;
|
|
|
+ }
|
|
|
+ return rdesc;
|
|
|
+}
|
|
|
+
|
|
|
static __u8 *kye_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
|
|
unsigned int *rsize)
|
|
|
{
|
|
@@ -315,23 +335,12 @@ static __u8 *kye_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
|
|
}
|
|
|
break;
|
|
|
case USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE:
|
|
|
- /*
|
|
|
- * the fixup that need to be done:
|
|
|
- * - change Usage Maximum in the Comsumer Control
|
|
|
- * (report ID 3) to a reasonable value
|
|
|
- */
|
|
|
- if (*rsize >= 135 &&
|
|
|
- /* Usage Page (Consumer Devices) */
|
|
|
- rdesc[104] == 0x05 && rdesc[105] == 0x0c &&
|
|
|
- /* Usage (Consumer Control) */
|
|
|
- rdesc[106] == 0x09 && rdesc[107] == 0x01 &&
|
|
|
- /* Usage Maximum > 12287 */
|
|
|
- rdesc[114] == 0x2a && rdesc[116] > 0x2f) {
|
|
|
- hid_info(hdev,
|
|
|
- "fixing up Genius Gila Gaming Mouse "
|
|
|
- "report descriptor\n");
|
|
|
- rdesc[116] = 0x2f;
|
|
|
- }
|
|
|
+ rdesc = kye_consumer_control_fixup(hdev, rdesc, rsize, 104,
|
|
|
+ "Genius Gila Gaming Mouse");
|
|
|
+ break;
|
|
|
+ case USB_DEVICE_ID_GENIUS_GX_IMPERATOR:
|
|
|
+ rdesc = kye_consumer_control_fixup(hdev, rdesc, rsize, 83,
|
|
|
+ "Genius Gx Imperator Keyboard");
|
|
|
break;
|
|
|
}
|
|
|
return rdesc;
|
|
@@ -428,6 +437,8 @@ static const struct hid_device_id kye_devices[] = {
|
|
|
USB_DEVICE_ID_KYE_EASYPEN_M610X) },
|
|
|
{ HID_USB_DEVICE(USB_VENDOR_ID_KYE,
|
|
|
USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE) },
|
|
|
+ { HID_USB_DEVICE(USB_VENDOR_ID_KYE,
|
|
|
+ USB_DEVICE_ID_GENIUS_GX_IMPERATOR) },
|
|
|
{ }
|
|
|
};
|
|
|
MODULE_DEVICE_TABLE(hid, kye_devices);
|