Fix multimedia keys on Genius GX keyboard (rhbz 928561)
This commit is contained in:
parent
c06b674219
commit
1b87d09575
|
@ -0,0 +1,118 @@
|
|||
From 0adb9c2c5ed42f199cb2a630c37d18dee385fae2 Mon Sep 17 00:00:00 2001
|
||||
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Date: Mon, 15 Jul 2013 10:12:18 +0200
|
||||
Subject: [PATCH] HID: kye: Add report fixup for Genius Gx Imperator Keyboard
|
||||
|
||||
Genius Gx Imperator Keyboard presents the same problem in its report
|
||||
descriptors than Genius Gila Gaming Mouse.
|
||||
Use the same fixup for both.
|
||||
|
||||
Fixes:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=928561
|
||||
|
||||
Reported-and-tested-by: Honza Brazdil <jbrazdil@redhat.com>
|
||||
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
|
||||
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
|
||||
---
|
||||
drivers/hid/hid-core.c | 1 +
|
||||
drivers/hid/hid-ids.h | 1 +
|
||||
drivers/hid/hid-kye.c | 45 ++++++++++++++++++++++++++++-----------------
|
||||
3 files changed, 30 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
|
||||
index 8de5cb8..b0f2f45 100644
|
||||
--- a/drivers/hid/hid-core.c
|
||||
+++ b/drivers/hid/hid-core.c
|
||||
@@ -1594,6 +1594,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) },
|
||||
{ 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) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_I405X) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X) },
|
||||
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
|
||||
index c5aea29..0288531 100644
|
||||
--- a/drivers/hid/hid-ids.h
|
||||
+++ b/drivers/hid/hid-ids.h
|
||||
@@ -479,6 +479,7 @@
|
||||
#define USB_VENDOR_ID_KYE 0x0458
|
||||
#define USB_DEVICE_ID_KYE_ERGO_525V 0x0087
|
||||
#define USB_DEVICE_ID_GENIUS_GILA_GAMING_MOUSE 0x0138
|
||||
+#define USB_DEVICE_ID_GENIUS_GX_IMPERATOR 0x4018
|
||||
#define USB_DEVICE_ID_KYE_GPEN_560 0x5003
|
||||
#define USB_DEVICE_ID_KYE_EASYPEN_I405X 0x5010
|
||||
#define USB_DEVICE_ID_KYE_MOUSEPEN_I608X 0x5011
|
||||
diff --git a/drivers/hid/hid-kye.c b/drivers/hid/hid-kye.c
|
||||
index 1e2ee2aa..7384512 100644
|
||||
--- a/drivers/hid/hid-kye.c
|
||||
+++ b/drivers/hid/hid-kye.c
|
||||
@@ -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);
|
||||
--
|
||||
1.8.3.1
|
||||
|
|
@ -760,6 +760,9 @@ Patch25102: net-sctp-fix-ipv6-ipsec-encryption-bug-in-sctp_v6_xmit.patch
|
|||
#CVE-2013-4345 rhbz 1007690 1009136
|
||||
Patch25104: ansi_cprng-Fix-off-by-one-error-in-non-block-size-request.patch
|
||||
|
||||
#rhbz 928561
|
||||
Patch25105: 0001-HID-kye-Add-report-fixup-for-Genius-Gx-Imperator-Key.patch
|
||||
|
||||
# END OF PATCH DEFINITIONS
|
||||
|
||||
%endif
|
||||
|
@ -1468,6 +1471,9 @@ ApplyPatch net-sctp-fix-ipv6-ipsec-encryption-bug-in-sctp_v6_xmit.patch
|
|||
#CVE-2013-4345 rhbz 1007690 1009136
|
||||
ApplyPatch ansi_cprng-Fix-off-by-one-error-in-non-block-size-request.patch
|
||||
|
||||
#rhbz 928561
|
||||
ApplyPatch 0001-HID-kye-Add-report-fixup-for-Genius-Gx-Imperator-Key.patch
|
||||
|
||||
# END OF PATCH APPLICATIONS
|
||||
|
||||
%endif
|
||||
|
@ -2280,6 +2286,9 @@ fi
|
|||
# and build.
|
||||
|
||||
%changelog
|
||||
* Fri Sep 20 2013 Josh Boyer <jwboyer@fedoraproject.org>
|
||||
- Fix multimedia keys on Genius GX keyboard (rhbz 928561)
|
||||
|
||||
* Tue Sep 17 2013 Josh Boyer <jwboyer@fedoraproject.org>
|
||||
- CVE-2013-4345 ansi_cprng: off by one error in non-block size request (rhbz 1007690 1009136)
|
||||
|
||||
|
|
Loading…
Reference in New Issue