Skip to content

Commit

Permalink
HID: sony: Enable Gasia third-party PS3 controllers
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Lauri Kasanen authored and Jiri Kosina committed Feb 17, 2015
1 parent 870fd0f commit a7de9b8
Showing 1 changed file with 21 additions and 1 deletion.
22 changes: 21 additions & 1 deletion drivers/hid/hid-sony.c
Original file line number Diff line number Diff line change
Expand Up @@ -1139,9 +1139,29 @@ static int sixaxis_set_operational_usb(struct hid_device *hdev)
ret = hid_hw_raw_request(hdev, 0xf2, buf, 17, HID_FEATURE_REPORT,
HID_REQ_GET_REPORT);

if (ret < 0) {
hid_err(hdev, "can't set operational mode: step 1\n");
goto out;
}

/*
* Some compatible controllers like the Speedlink Strike FX and
* Gasia need another query plus an USB interrupt to get operational.
*/
ret = hid_hw_raw_request(hdev, 0xf5, buf, 8, HID_FEATURE_REPORT,
HID_REQ_GET_REPORT);

if (ret < 0) {
hid_err(hdev, "can't set operational mode: step 2\n");
goto out;
}

ret = hid_hw_output_report(hdev, buf, 1);

if (ret < 0)
hid_err(hdev, "can't set operational mode\n");
hid_err(hdev, "can't set operational mode: step 3\n");

out:
kfree(buf);

return ret;
Expand Down

0 comments on commit a7de9b8

Please sign in to comment.