HID: sony: Drop invalid Sixaxis input reports
authorFrank Praznik <frank.praznik@oh.rr.com>
Thu, 23 Jul 2015 23:01:16 +0000 (19:01 -0400)
committerJiri Kosina <jkosina@suse.com>
Fri, 24 Jul 2015 12:59:37 +0000 (14:59 +0200)
When connected via Bluetooth the sixaxis periodically sends reports with an ID
of 1, the second byte 0xff and the rest zeroed.  These reports are not related
to the controller state and must be dropped to avoid generating false input
events.

Link: http://www.spinics.net/lists/linux-bluetooth/msg63028.html
Signed-off-by: Frank Praznik <frank.praznik@oh.rr.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/hid-sony.c

index 69586b31640940d1ea58cf20aff50697a4abca52..ed0496abf573a90be06b0c1f7a2cd785e1a52616 100644 (file)
@@ -1277,6 +1277,17 @@ static int sony_raw_event(struct hid_device *hdev, struct hid_report *report,
         * has to be BYTE_SWAPPED before passing up to joystick interface
         */
        if ((sc->quirks & SIXAXIS_CONTROLLER) && rd[0] == 0x01 && size == 49) {
+               /*
+                * When connected via Bluetooth the Sixaxis occasionally sends
+                * a report with the second byte 0xff and the rest zeroed.
+                *
+                * This report does not reflect the actual state of the
+                * controller must be ignored to avoid generating false input
+                * events.
+                */
+               if (rd[1] == 0xff)
+                       return -EINVAL;
+
                swap(rd[41], rd[42]);
                swap(rd[43], rd[44]);
                swap(rd[45], rd[46]);