]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.fixes/hid-rdesc-quirk-for-sony-vaio-VGX-TP1E.patch
Move xen patchset to new version's subdir.
[people/teissler/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.fixes / hid-rdesc-quirk-for-sony-vaio-VGX-TP1E.patch
diff --git a/src/patches/suse-2.6.27.31/patches.fixes/hid-rdesc-quirk-for-sony-vaio-VGX-TP1E.patch b/src/patches/suse-2.6.27.31/patches.fixes/hid-rdesc-quirk-for-sony-vaio-VGX-TP1E.patch
new file mode 100644 (file)
index 0000000..5dd821b
--- /dev/null
@@ -0,0 +1,75 @@
+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