[PATCH] usbhid: call report_fixup before comparing descriptors
From: Kevin Daughtridge <hidden>
Date: 2012-09-17 20:05:12
Also in:
linux-input
From: Kevin Daughtridge <hidden>
Date: 2012-09-17 20:05:12
Also in:
linux-input
hid_post_reset checks the stored report descriptor against what is currently returned by the device. An HID driver's report_fixup method may have changed the stored descriptor, however, creating false positives. These leave some devices nonfunctional after a resume, with a "reset_resume error 1" reported. This patch passes the new descriptor to the driver's report_fixup method, if any, before it is compared to the stored one. BugLink: http://bugs.launchpad.net/bugs/1049623 Signed-off-by: Kevin Daughtridge <redacted> ---
--- a/drivers/hid/usbhid/hid-core.c 2012-08-20 10:17:09.000000000 -0700
+++ b/drivers/hid/usbhid/hid-core.c 2012-09-16 18:51:45.381868737 -0700@@ -1436,6 +1436,10 @@ static int hid_post_reset(struct usb_int kfree(rdesc); return 1; } + + if (hid->driver && hid->driver->report_fixup) + rdesc = hid->driver->report_fixup(hid, rdesc, &status); + status = memcmp(rdesc, hid->rdesc, hid->rsize); kfree(rdesc); if (status != 0) {