|
@@ -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]);
|