HID: multitouch: support arrays for the split of the touches in a report
authorBenjamin Tissoires <benjamin.tissoires@gmail.com>
Wed, 14 Nov 2012 15:59:17 +0000 (16:59 +0100)
committerJiri Kosina <jkosina@suse.cz>
Thu, 15 Nov 2012 09:08:40 +0000 (10:08 +0100)
Win8 certification introduced the ability to transmit two X and two Y per
touch. The specification precises that it must be used in an array.

This test guarantees that we split the touches on the last element
in this array.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com>
Reviewed-by: Henrik Rydberg <rydberg@euromail.se>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-multitouch.c

index 3687f797b731a652ca78e84f8df27916d2db0f6c..3d2e6bbb00467523129b1c2e760ac80ff6c0ee00 100644 (file)
@@ -576,12 +576,15 @@ static int mt_event(struct hid_device *hid, struct hid_field *field,
                        return 0;
                }
 
-               if (usage->hid == td->last_slot_field)
-                       mt_complete_slot(td, field->hidinput->input);
-
-               if (field->index == td->last_field_index
-                       && td->num_received >= td->num_expected)
-                       mt_sync_frame(td, field->hidinput->input);
+               if (usage->usage_index + 1 == field->report_count) {
+                       /* we only take into account the last report. */
+                       if (usage->hid == td->last_slot_field)
+                               mt_complete_slot(td, field->hidinput->input);
+
+                       if (field->index == td->last_field_index
+                               && td->num_received >= td->num_expected)
+                               mt_sync_frame(td, field->hidinput->input);
+               }
 
        }