mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
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: Dmitry Torokhov <dtor@mail.ru>
This commit is contained in:
parent
14e4020630
commit
46249ea60f
1 changed files with 11 additions and 14 deletions
|
@ -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);
|
||||
}
|
||||
if (!x && !y && !key) {
|
||||
dev->idlecount++;
|
||||
if (dev->idlecount == 10) {
|
||||
dev->valid = 0;
|
||||
schedule_work(&dev->work);
|
||||
}
|
||||
else
|
||||
dev->idlecount = 0;
|
||||
}
|
||||
|
||||
input_report_key(dev->input, BTN_LEFT, key);
|
||||
input_sync(dev->input);
|
||||
} else
|
||||
dev->idlecount = 0;
|
||||
|
||||
exit:
|
||||
retval = usb_submit_urb(dev->urb, GFP_ATOMIC);
|
||||
|
|
Loading…
Reference in a new issue