Commit c2dc9f0b authored by Tomasz Pakuła's avatar Tomasz Pakuła Committed by Jiri Kosina
Browse files

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: default avatarTomasz Pakuła <tomasz.pakula.oficjalny@gmail.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.com>
parent c774a9d7
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -1210,8 +1210,16 @@ static int pidff_find_special_fields(struct pidff_device *pidff)
					 PID_DIRECTION, 0);
	pidff->device_control =
		pidff_find_special_field(pidff->reports[PID_DEVICE_CONTROL],
			PID_DEVICE_CONTROL_ARRAY,
			!(pidff->quirks & HID_PIDFF_QUIRK_PERMISSIVE_CONTROL));
			PID_DEVICE_CONTROL_ARRAY, 1);

	/* Detect and set permissive control quirk */
	if (!pidff->device_control) {
		pr_debug("Setting PERMISSIVE_CONTROL quirk\n");
		pidff->quirks |= HID_PIDFF_QUIRK_PERMISSIVE_CONTROL;
		pidff->device_control = pidff_find_special_field(
			pidff->reports[PID_DEVICE_CONTROL],
			PID_DEVICE_CONTROL_ARRAY, 0);
	}

	pidff->block_load_status =
		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)
	ff->playback = pidff_playback;

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

	hid_device_io_stop(hid);