Skip to content

Commit

Permalink
Input: appletouch - apply idle reset logic to all touchpads
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Anton Ekblad authored and Dmitry Torokhov committed Oct 22, 2007
1 parent 14e4020 commit 46249ea
Showing 1 changed file with 11 additions and 14 deletions.
25 changes: 11 additions & 14 deletions drivers/input/mouse/appletouch.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 46249ea

Please sign in to comment.