Date: Wed, 4 Aug 2004 23:10:01 -0700 (PDT) From: =?ISO-8859-1?Q?Mikko_Ty=F6l=E4j=E4rvi?= <mbsd@pacbell.net> To: "Alexandre \"Sunny\" Kovalenko" <Alex.Kovalenko@verizon.net> Cc: freebsd-current@freebsd.org Subject: Re: Challenge getting touchpad to work since src/sys/isa/psm.c 1.71 Message-ID: <20040804230815.R695@sotec.home> In-Reply-To: <1091671902.698.4.camel@RabbitsDen> References: <200408042100.i74L0PiQ056577@bunrab.catwhisker.org> <1091671902.698.4.camel@RabbitsDen>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 4 Aug 2004, Alexandre "Sunny" Kovalenko wrote:
> On Wed, 2004-08-04 at 17:00, David Wolfskill wrote:
>> Sorry about the delay; right around the time of the commit, I was having
>> some thermal issues with my laptop (a Dell Inspiron 5000e). I believe
>> those are fixed now -- it's gone through 5 days, each of which has
>> involved a "buildworld cycle" for each of -STABLE & -CURRENT, without
>> incident.
>>
>> But I'm now having trouble getting a "touchpad tap" to be recognized as
>> a press/release of a mouse button in -CURRENT; I believe that the recent
>> commit to src/sys/isa/psm.c 1.71 is involved.
> Rolling psm.c back to 1.70 restores tapping behavior of the touchpad on
> my AVERATEC 3150H. Unfortunately with 200+ lines of diff, I could not
> come up with the better idea at the moment.
>
> I can test patches or try out settings if necessary.
Here is what I'm using:
$.02,
/Mikko
--- psm.c.orig Wed Aug 4 22:34:32 2004
+++ psm.c Wed Aug 4 22:34:38 2004
@@ -103,6 +103,13 @@
#define PSM_INPUT_TIMEOUT 2000000 /* 2 sec */
#endif
+#ifndef PSM_TAP_TIMEOUT
+#define PSM_TAP_TIMEOUT 125000
+#endif
+#ifndef PSM_TAP_THRESHOLD
+#define PSM_TAP_THRESHOLD 25
+#endif
+
/* end of driver specific options */
#define PSM_DRIVER_NAME "psm"
@@ -181,6 +188,8 @@
struct cdev *bdev;
int lasterr;
int cmdcount;
+ struct timeval taptimeout; /* (Synaptics) width of a "tap" pulse */
+ int zmax; /* (Synaptics) pressure measured during tap */
};
static devclass_t psm_devclass;
#define PSM_SOFTC(unit) ((struct psm_softc*)devclass_get_softc(psm_devclass, unit))
@@ -2531,11 +2540,20 @@
} else {
sc->flags |= PSM_FLAGS_FINGERDOWN;
}
-
+ sc->zmax = imax(z, sc->zmax);
sc->xold = x0;
sc->yold = y0;
} else {
sc->flags &= ~PSM_FLAGS_FINGERDOWN;
+ sc->flags &= ~PSM_FLAGS_FINGERDOWN;
+ if (sc->zmax > PSM_TAP_THRESHOLD
+ && timevalcmp(&sc->lastsoftintr, &sc->taptimeout, <=)) {
+ ms.button |= MOUSE_BUTTON1DOWN;
+ }
+ sc->zmax = 0;
+ sc->taptimeout.tv_sec = PSM_TAP_TIMEOUT / 1000000;
+ sc->taptimeout.tv_usec = PSM_TAP_TIMEOUT % 1000000;
+ timevaladd(&sc->taptimeout, &sc->lastsoftintr);
}
z = 0;
break;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040804230815.R695>
