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

Commit 46249ea6 authored by Anton Ekblad's avatar Anton Ekblad Committed by Dmitry Torokhov
Browse files

Input: appletouch - apply idle reset logic to all touchpads



Not only Geyser 3 but also Geyser 1 need to be reset after they become
idle to stop them from needlessly waking up the kernel. Do idle reset
on all touchpads, regardless of their version - if we see 10 empty
packets the touchpad needs to be reset; good touchpads should not send
empty packets anyway.

Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 14e40206
Loading
Loading
Loading
Loading
+11 −14
Original line number Diff line number Diff line
@@ -504,25 +504,22 @@ static void atp_complete(struct urb* urb)
		memset(dev->xy_acc, 0, sizeof(dev->xy_acc));
	}

	/* Geyser 3 will continue to send packets continually after
	input_report_key(dev->input, BTN_LEFT, key);
	input_sync(dev->input);

	/* Many Geysers will continue to send packets continually after
	   the first touch unless reinitialised. Do so if it's been
	   idle for a while in order to avoid waking the kernel up
	   several hundred times a second */

	if (atp_is_geyser_3(dev)) {
	if (!x && !y && !key) {
		dev->idlecount++;
		if (dev->idlecount == 10) {
			dev->valid = 0;
			schedule_work(&dev->work);
		}
		}
		else
	} else
		dev->idlecount = 0;
	}

	input_report_key(dev->input, BTN_LEFT, key);
	input_sync(dev->input);

exit:
	retval = usb_submit_urb(dev->urb, GFP_ATOMIC);