Just FYI, this should be fixed in some next kernel version. I've emailed Jiri Kosina who is the maintainer of this driver and it he did a very nice job fixing this!
Here's the patch for those interested:
diff --git a/drivers/hid/hid-microsoft.c b/drivers/hid/hid-microsoft.c index d718b16..890b1b2 100644 --- a/drivers/hid/hid-microsoft.c +++ b/drivers/hid/hid-microsoft.c @@ -30,7 +30,7 @@ #define MS_NOGET 0x10
/* - * Microsoft Wireless Desktop Receiver (Model 1028) has several + * Microsoft Wireless Desktop Receiver (Model 1028) several * 'Usage Min/Max' where it ought to have 'Physical Min/Max' */ static void ms_report_fixup(struct hid_device *hdev, __u8 *rdesc, @@ -38,17 +38,12 @@ static void ms_report_fixup(struct hid_device *hdev, __u8 *rdesc, { unsigned long quirks = (unsigned long)hid_get_drvdata(hdev);
- if ((quirks & MS_RDESC) && rsize == 571 && rdesc[284] == 0x19 && - rdesc[286] == 0x2a && rdesc[304] == 0x19 && - rdesc[306] == 0x29 && rdesc[352] == 0x1a && - rdesc[355] == 0x2a && rdesc[557] == 0x19 && + if ((quirks & MS_RDESC) && rsize == 571 && rdesc[557] == 0x19 && rdesc[559] == 0x29) { dev_info(&hdev->dev, "fixing up Microsoft Wireless Receiver " "Model 1028 report descriptor\n"); - rdesc[284] = rdesc[304] = rdesc[557] = 0x35; - rdesc[352] = 0x36; - rdesc[286] = rdesc[355] = 0x46; - rdesc[306] = rdesc[559] = 0x45; + rdesc[557] = 0x35; + rdesc[559] = 0x45; } }
Just FYI, this should be fixed in some next kernel version. I've emailed Jiri Kosina who is the maintainer of this driver and it he did a very nice job fixing this!
Here's the patch for those interested:
diff --git a/drivers/ hid/hid- microsoft. c b/drivers/ hid/hid- microsoft. c hid/hid- microsoft. c hid/hid- microsoft. c
index d718b16..890b1b2 100644
--- a/drivers/
+++ b/drivers/
@@ -30,7 +30,7 @@
#define MS_NOGET 0x10
/* fixup(struct hid_device *hdev, __u8 *rdesc, fixup(struct hid_device *hdev, __u8 *rdesc, get_drvdata( hdev);
- * Microsoft Wireless Desktop Receiver (Model 1028) has several
+ * Microsoft Wireless Desktop Receiver (Model 1028) several
* 'Usage Min/Max' where it ought to have 'Physical Min/Max'
*/
static void ms_report_
@@ -38,17 +38,12 @@ static void ms_report_
{
unsigned long quirks = (unsigned long)hid_
- if ((quirks & MS_RDESC) && rsize == 571 && rdesc[284] == 0x19 && info(&hdev- >dev, "fixing up Microsoft Wireless Receiver "
- rdesc[286] == 0x2a && rdesc[304] == 0x19 &&
- rdesc[306] == 0x29 && rdesc[352] == 0x1a &&
- rdesc[355] == 0x2a && rdesc[557] == 0x19 &&
+ if ((quirks & MS_RDESC) && rsize == 571 && rdesc[557] == 0x19 &&
rdesc[559] == 0x29) {
dev_
"Model 1028 report descriptor\n");
- rdesc[284] = rdesc[304] = rdesc[557] = 0x35;
- rdesc[352] = 0x36;
- rdesc[286] = rdesc[355] = 0x46;
- rdesc[306] = rdesc[559] = 0x45;
+ rdesc[557] = 0x35;
+ rdesc[559] = 0x45;
}
}