aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/hid
diff options
context:
space:
mode:
authorLauri Kasanen <cand@gmx.com>2015-02-16 08:06:59 -0500
committerJiri Kosina <jkosina@suse.cz>2015-02-17 07:17:45 -0500
commita7de9b867be0662e72db69fd40a4f1d2aa80ecc0 (patch)
tree7fee5412df7c76c1e1a354ba93c19dce95001565 /drivers/hid
parent870fd0f5df4e131467612cc46db46fc3b69fd706 (diff)
HID: sony: Enable Gasia third-party PS3 controllers
Without this, my "Gasia Co.,Ltd PS(R) Gamepad" would not send any events. Now everything works including the leds. Based on work by Andrew Haines and Antonio Ospite. cc: Antonio Ospite <ao2@ao2.it> cc: Andrew Haines <AndrewD207@aol.com> Signed-off-by: Lauri Kasanen <cand@gmx.com> Reviewed-by: Antonio Ospite <ao2@ao2.it> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid')
-rw-r--r--drivers/hid/hid-sony.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index 31e9d2561106..f3d44e5266f0 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -1139,9 +1139,29 @@ static int sixaxis_set_operational_usb(struct hid_device *hdev)
1139 ret = hid_hw_raw_request(hdev, 0xf2, buf, 17, HID_FEATURE_REPORT, 1139 ret = hid_hw_raw_request(hdev, 0xf2, buf, 17, HID_FEATURE_REPORT,
1140 HID_REQ_GET_REPORT); 1140 HID_REQ_GET_REPORT);
1141 1141
1142 if (ret < 0) {
1143 hid_err(hdev, "can't set operational mode: step 1\n");
1144 goto out;
1145 }
1146
1147 /*
1148 * Some compatible controllers like the Speedlink Strike FX and
1149 * Gasia need another query plus an USB interrupt to get operational.
1150 */
1151 ret = hid_hw_raw_request(hdev, 0xf5, buf, 8, HID_FEATURE_REPORT,
1152 HID_REQ_GET_REPORT);
1153
1154 if (ret < 0) {
1155 hid_err(hdev, "can't set operational mode: step 2\n");
1156 goto out;
1157 }
1158
1159 ret = hid_hw_output_report(hdev, buf, 1);
1160
1142 if (ret < 0) 1161 if (ret < 0)
1143 hid_err(hdev, "can't set operational mode\n"); 1162 hid_err(hdev, "can't set operational mode: step 3\n");
1144 1163
1164out:
1145 kfree(buf); 1165 kfree(buf);
1146 1166
1147 return ret; 1167 return ret;