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

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
...@@ -504,25 +504,22 @@ static void atp_complete(struct urb* urb) ...@@ -504,25 +504,22 @@ static void atp_complete(struct urb* urb)
memset(dev->xy_acc, 0, sizeof(dev->xy_acc)); 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 the first touch unless reinitialised. Do so if it's been
idle for a while in order to avoid waking the kernel up idle for a while in order to avoid waking the kernel up
several hundred times a second */ several hundred times a second */
if (atp_is_geyser_3(dev)) { if (!x && !y && !key) {
if (!x && !y && !key) { dev->idlecount++;
dev->idlecount++; if (dev->idlecount == 10) {
if (dev->idlecount == 10) { dev->valid = 0;
dev->valid = 0; schedule_work(&dev->work);
schedule_work(&dev->work);
}
} }
else } else
dev->idlecount = 0; dev->idlecount = 0;
}
input_report_key(dev->input, BTN_LEFT, key);
input_sync(dev->input);
exit: exit:
retval = usb_submit_urb(dev->urb, GFP_ATOMIC); retval = usb_submit_urb(dev->urb, GFP_ATOMIC);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment