HID: pass numbered reports properly to hidraw
authorJiri Kosina <jkosina@suse.cz>
Fri, 28 Mar 2008 13:11:22 +0000 (14:11 +0100)
committerJiri Kosina <jkosina@suse.cz>
Tue, 22 Apr 2008 09:34:57 +0000 (11:34 +0200)
The numbered reports need to be passed properly to hidraw (i.e. with the first
data field indicating the report number), otherwise userspace has no idea
about the identification of the report.

Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-core.c

index d7b2f6868a6df8625e3a6ef43980ed30c17d5655..10f925b892d7493cb40856cfbd7cda0c6d51315c 100644 (file)
@@ -988,8 +988,13 @@ int hid_input_report(struct hid_device *hid, int type, u8 *data, int size, int i
 
        if ((hid->claimed & HID_CLAIMED_HIDDEV) && hid->hiddev_report_event)
                hid->hiddev_report_event(hid, report);
-       if (hid->claimed & HID_CLAIMED_HIDRAW)
-               hidraw_report_event(hid, data, size);
+       if (hid->claimed & HID_CLAIMED_HIDRAW) {
+               /* numbered reports need to be passed with the report num */
+               if (report_enum->numbered)
+                       hidraw_report_event(hid, data - 1, size + 1);
+               else
+                       hidraw_report_event(hid, data, size);
+       }
 
        for (n = 0; n < report->maxfield; n++)
                hid_input_field(hid, report->field[n], data, interrupt);