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