mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 06:31:49 +00:00
HID: pidff: Fix initialisation forMicrosoft Sidewinder FF Pro 2
The FF2 driver (usbhid/hid-pidff.c) sends commands to the stick during ff_init. However, this is called inside a block where driver_input_lock is locked, so the results of these initial commands are discarded. This behavior is the "killer", without this nothing else works. ff_init issues commands using "hid_hw_request". This eventually goes to hid_input_report, which returns -EBUSY because driver_input_lock is locked. The change is to delay the ff_init call in hid-core.c until after this lock has been released. Calling hid_device_io_start() releases the lock so the device can be configured. We also need to call hid_device_io_stop() on exit for the lock to remain locked while ending the init of the drivers. [ benjamin.tissoires@redhat.com: imrpoved the changelog a lot ] Signed-off-by: Jim Keir <jimkeir@oracledbadirect.com> Reviewed-by: Benjamin.tissoires <benjamin.tissoires@redhat.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
3458e4c0e5
commit
afd700d933
@ -1252,6 +1252,8 @@ int hid_pidff_init(struct hid_device *hid)
|
||||
|
||||
pidff->hid = hid;
|
||||
|
||||
hid_device_io_start(hid);
|
||||
|
||||
pidff_find_reports(hid, HID_OUTPUT_REPORT, pidff);
|
||||
pidff_find_reports(hid, HID_FEATURE_REPORT, pidff);
|
||||
|
||||
@ -1315,9 +1317,13 @@ int hid_pidff_init(struct hid_device *hid)
|
||||
|
||||
hid_info(dev, "Force feedback for USB HID PID devices by Anssi Hannula <anssi.hannula@gmail.com>\n");
|
||||
|
||||
hid_device_io_stop(hid);
|
||||
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
hid_device_io_stop(hid);
|
||||
|
||||
kfree(pidff);
|
||||
return error;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user