79bacf6
From 954d6154959c8c196fa4b89fc98a4fb377c6a38d Mon Sep 17 00:00:00 2001
79bacf6
From: Benjamin Tissoires <benjamin.tissoires@redhat.com>
79bacf6
Date: Fri, 8 Jan 2016 17:58:49 +0100
79bacf6
Subject: [PATCH] HID: sony: do not bail out when the sixaxis refuses the
79bacf6
 output report
79bacf6
79bacf6
When setting the operational mode, some third party (Speedlink Strike-FX)
79bacf6
gamepads refuse the output report. Failing here means we refuse to
79bacf6
initialize the gamepad while this should be harmless.
79bacf6
79bacf6
The weird part is that the initial commit that added this: a7de9b8
79bacf6
("HID: sony: Enable Gasia third-party PS3 controllers") mentions this
79bacf6
very same controller as one requiring this output report.
79bacf6
Anyway, it's broken for one user at least, so let's change it.
79bacf6
We will report an error, but at least the controller should work.
79bacf6
79bacf6
And no, these devices present themselves as legacy Sony controllers
79bacf6
(VID:PID of 054C:0268, as in the official ones) so there are no ways
79bacf6
of discriminating them from the official ones.
79bacf6
79bacf6
https://bugzilla.redhat.com/show_bug.cgi?id=1255325
79bacf6
79bacf6
Reported-and-tested-by: Max Fedotov <thesourcehim@gmail.com>
79bacf6
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
79bacf6
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
79bacf6
---
79bacf6
 drivers/hid/hid-sony.c | 6 ++++--
79bacf6
 1 file changed, 4 insertions(+), 2 deletions(-)
79bacf6
79bacf6
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
79bacf6
index 661f94f8ab8b..11f91c0c2458 100644
79bacf6
--- a/drivers/hid/hid-sony.c
79bacf6
+++ b/drivers/hid/hid-sony.c
79bacf6
@@ -1411,8 +1411,10 @@ static int sixaxis_set_operational_usb(struct hid_device *hdev)
79bacf6
 	}
79bacf6
 
79bacf6
 	ret = hid_hw_output_report(hdev, buf, 1);
79bacf6
-	if (ret < 0)
79bacf6
-		hid_err(hdev, "can't set operational mode: step 3\n");
79bacf6
+	if (ret < 0) {
79bacf6
+		hid_info(hdev, "can't set operational mode: step 3, ignoring\n");
79bacf6
+		ret = 0;
79bacf6
+	}
79bacf6
 
79bacf6
 out:
79bacf6
 	kfree(buf);
79bacf6
-- 
79bacf6
2.5.0
79bacf6