Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d3e69b9a authored by Benson Leung's avatar Benson Leung Committed by Jiri Kosina
Browse files

HID: multitouch: Release all touch slots on reset_resume



When resetting a device (especially after power loss) it is unlikely
that the firmware will keep the contact tracking data for the previous
touches and will be able to reconcile it with the new contacts, so
let's release all slots on reset resume as start anew.

Signed-off-by: default avatarBenson Leung <bleung@chromium.org>
Signed-off-by: default avatarDmitry Torokhov <dtor@chromium.org>
Reviewed-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 45c5c682
Loading
Loading
Loading
Loading
+22 −0
Original line number Original line Diff line number Diff line
@@ -1150,8 +1150,30 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
}
}


#ifdef CONFIG_PM
#ifdef CONFIG_PM
static void mt_release_contacts(struct hid_device *hid)
{
	struct hid_input *hidinput;

	list_for_each_entry(hidinput, &hid->inputs, list) {
		struct input_dev *input_dev = hidinput->input;
		struct input_mt *mt = input_dev->mt;
		int i;

		if (mt) {
			for (i = 0; i < mt->num_slots; i++) {
				input_mt_slot(input_dev, i);
				input_mt_report_slot_state(input_dev,
							   MT_TOOL_FINGER,
							   false);
			}
			input_sync(input_dev);
		}
	}
}

static int mt_reset_resume(struct hid_device *hdev)
static int mt_reset_resume(struct hid_device *hdev)
{
{
	mt_release_contacts(hdev);
	mt_set_maxcontacts(hdev);
	mt_set_maxcontacts(hdev);
	mt_set_input_mode(hdev);
	mt_set_input_mode(hdev);
	return 0;
	return 0;