Skip to content

Commit c2dc9f0

Browse files
LawstorantJiri Kosina
authored andcommitted
HID: pidff: PERMISSIVE_CONTROL quirk autodetection
Fixes force feedback for devices built with MMOS firmware and many more not yet detected devices. Update quirks mask debug message to always contain all 32 bits of data. Signed-off-by: Tomasz Pakuła <tomasz.pakula.oficjalny@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.com>
1 parent c774a9d commit c2dc9f0

1 file changed

Lines changed: 11 additions & 3 deletions

File tree

drivers/hid/usbhid/hid-pidff.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,8 +1210,16 @@ static int pidff_find_special_fields(struct pidff_device *pidff)
12101210
PID_DIRECTION, 0);
12111211
pidff->device_control =
12121212
pidff_find_special_field(pidff->reports[PID_DEVICE_CONTROL],
1213-
PID_DEVICE_CONTROL_ARRAY,
1214-
!(pidff->quirks & HID_PIDFF_QUIRK_PERMISSIVE_CONTROL));
1213+
PID_DEVICE_CONTROL_ARRAY, 1);
1214+
1215+
/* Detect and set permissive control quirk */
1216+
if (!pidff->device_control) {
1217+
pr_debug("Setting PERMISSIVE_CONTROL quirk\n");
1218+
pidff->quirks |= HID_PIDFF_QUIRK_PERMISSIVE_CONTROL;
1219+
pidff->device_control = pidff_find_special_field(
1220+
pidff->reports[PID_DEVICE_CONTROL],
1221+
PID_DEVICE_CONTROL_ARRAY, 0);
1222+
}
12151223

12161224
pidff->block_load_status =
12171225
pidff_find_special_field(pidff->reports[PID_BLOCK_LOAD],
@@ -1552,7 +1560,7 @@ int hid_pidff_init_with_quirks(struct hid_device *hid, u32 initial_quirks)
15521560
ff->playback = pidff_playback;
15531561

15541562
hid_info(dev, "Force feedback for USB HID PID devices by Anssi Hannula <anssi.hannula@gmail.com>\n");
1555-
hid_dbg(dev, "Active quirks mask: 0x%x\n", pidff->quirks);
1563+
hid_dbg(dev, "Active quirks mask: 0x%08x\n", pidff->quirks);
15561564

15571565
hid_device_io_stop(hid);
15581566

0 commit comments

Comments
 (0)