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

Commit cb560737 authored by Thomas Rohwer's avatar Thomas Rohwer Committed by Dmitry Torokhov
Browse files

Input: appletouch - fix idle reset logic



Idle count should only be incremented when touchpad button
is not pressed, otherwise reset may happen at a wrong time
and touchpad will never report button release event.

Signed-off-by: default avatarThomas Rohwer <trohwer@tng.de>
Acked-by: default avatarMatthew Garrett <mjg59@srcf.ucam.org>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 7b6dff98
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -328,6 +328,7 @@ static void atp_complete(struct urb* urb)
{
	int x, y, x_z, y_z, x_f, y_f;
	int retval, i, j;
	int key;
	struct atp *dev = urb->context;

	switch (urb->status) {
@@ -468,6 +469,7 @@ static void atp_complete(struct urb* urb)
			      ATP_XFACT, &x_z, &x_f);
	y = atp_calculate_abs(dev->xy_acc + ATP_XSENSORS, ATP_YSENSORS,
			      ATP_YFACT, &y_z, &y_f);
	key = dev->data[dev->datalen - 1] & 1;

	if (x && y) {
		if (dev->x_old != -1) {
@@ -505,7 +507,7 @@ static void atp_complete(struct urb* urb)
		   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 (!key && atp_is_geyser_3(dev)) {
			dev->idlecount++;
			if (dev->idlecount == 10) {
				dev->valid = 0;
@@ -514,7 +516,7 @@ static void atp_complete(struct urb* urb)
		}
	}

	input_report_key(dev->input, BTN_LEFT, dev->data[dev->datalen - 1] & 1);
	input_report_key(dev->input, BTN_LEFT, key);
	input_sync(dev->input);

exit: