svn commit: r199948 - head/sys/dev/usb/input
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Sun Nov 29 20:48:20 UTC 2009
Author: nwhitehorn
Date: Sun Nov 29 20:48:19 2009
New Revision: 199948
URL: http://svn.freebsd.org/changeset/base/199948
Log:
Early-generation touchpads do not send periodic calibration frames for
baseline subtraction, and are very temperature sensitive, so would slowly
drift out of a calibrated state when under load. Escape this by taking
the last frame before we decide that the pad is idle as a finger-free
baseline.
Tested on: iBook G4
Modified:
head/sys/dev/usb/input/atp.c
Modified: head/sys/dev/usb/input/atp.c
==============================================================================
--- head/sys/dev/usb/input/atp.c Sun Nov 29 20:47:43 2009 (r199947)
+++ head/sys/dev/usb/input/atp.c Sun Nov 29 20:48:19 2009 (r199948)
@@ -1850,6 +1850,21 @@ atp_intr(struct usb_xfer *xfer, usb_erro
sc->sc_idlecount++;
if (sc->sc_idlecount >= ATP_IDLENESS_THRESHOLD) {
DPRINTFN(ATP_LLEVEL_INFO, "idle\n");
+
+ /*
+ * Use the last frame before we go idle for
+ * calibration on pads which do not send
+ * calibration frames.
+ */
+ if (sc->sc_params->prot < ATP_PROT_GEYSER3) {
+ memcpy(sc->base_x, sc->cur_x,
+ sc->sc_params->n_xsensors *
+ sizeof(*(sc->base_x)));
+ memcpy(sc->base_y, sc->cur_y,
+ sc->sc_params->n_ysensors *
+ sizeof(*(sc->base_y)));
+ }
+
sc->sc_idlecount = 0;
usbd_transfer_start(sc->sc_xfer[ATP_RESET]);
}
More information about the svn-src-head
mailing list