+++ /dev/null
-From: Jiri Kosina <jkosina@suse.cz>
-Subject: HID: Fix Sony Vaio VGX report descriptor
-References: bnc#437758
-Patch-mainline: queued in subsystem tree, planned for 2.6.28
-
-Sony Vaio VGX has wrongly mouse pointer declared as constant non-data
-variable, which make HID code to completely ignore all the Pointer
-usages.
-
-Fix the report descriptor before it enters the parses to contain correct
-data.
-
-Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-
----
- drivers/hid/usbhid/hid-quirks.c | 16 ++++++++++++++++
- include/linux/hid.h | 1 +
- 2 files changed, 17 insertions(+)
-
---- a/drivers/hid/usbhid/hid-quirks.c
-+++ b/drivers/hid/usbhid/hid-quirks.c
-@@ -383,6 +383,7 @@
- #define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001
-
- #define USB_VENDOR_ID_SONY 0x054c
-+#define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE 0x024b
- #define USB_DEVICE_ID_SONY_PS3_CONTROLLER 0x0268
-
- #define USB_VENDOR_ID_SOUNDGRAPH 0x15c2
-@@ -761,6 +762,8 @@ static const struct hid_rdesc_blacklist
-
- { USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP, HID_QUIRK_RDESC_SUNPLUS_WDESKTOP },
-
-+ { USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE, HID_QUIRK_RDESC_SONY_VAIO_VGX },
-+
- { USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1, HID_QUIRK_RDESC_SWAPPED_MIN_MAX },
- { USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_2, HID_QUIRK_RDESC_SWAPPED_MIN_MAX },
-
-@@ -1133,6 +1136,16 @@ static void usbhid_fixup_button_consumer
- }
- }
-
-+/* Sony Vaio VGX has wrongly mouse pointer declared as constant */
-+static void usbhid_fixup_sony_vaio_vgx(unsigned char *rdesc, int rsize)
-+{
-+ if (rsize >= 56 && rdesc[54] == 0x81
-+ && rdesc[55] == 0x07) {
-+ printk(KERN_INFO "Fixing up Sony Vaio VGX report descriptor\n");
-+ rdesc[55] = 0x06;
-+ }
-+}
-+
- /*
- * Microsoft Wireless Desktop Receiver (Model 1028) has
- * 'Usage Min/Max' where it ought to have 'Physical Min/Max'
-@@ -1175,6 +1188,9 @@ static void __usbhid_fixup_report_descri
-
- if (quirks & HID_QUIRK_RDESC_SUNPLUS_WDESKTOP)
- usbhid_fixup_sunplus_wdesktop(rdesc, rsize);
-+
-+ if (quirks & HID_QUIRK_RDESC_SONY_VAIO_VGX)
-+ usbhid_fixup_sony_vaio_vgx(rdesc, rsize);
- }
-
- /**
---- a/include/linux/hid.h
-+++ b/include/linux/hid.h
-@@ -298,6 +298,7 @@ struct hid_item {
- #define HID_QUIRK_RDESC_SAMSUNG_REMOTE 0x00000040
- #define HID_QUIRK_RDESC_MICROSOFT_RECV_1028 0x00000080
- #define HID_QUIRK_RDESC_SUNPLUS_WDESKTOP 0x00000100
-+#define HID_QUIRK_RDESC_SONY_VAIO_VGX 0x00000200
-
- /*
- * This is the global environment of the parser. This information is