Date: Wed, 05 Jul 2000 09:48:16 +0200 From: Graham Wheeler <gram@cequrux.com> To: Kazutaka YOKOTA <yokota@zodiac.mech.utsunomiya-u.ac.jp>, freebsd-stable@freebsd.org, support@synaptics.com Subject: Re: FreeBSD-4.0S/psmintr out of sync/Synaptics Touchpad Message-ID: <4f463cfed0be2648d60e440d5cf2af66@cequrux.com> References: <200006090141.KAA27612@zodiac.mech.utsunomiya-u.ac.jp> <a674996d7ac981522746a905617618fd@cequrux.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Following up on my previous report, I've experienced more weirdness. The story so far: Standard PS/2 devices should generate three byte packets, consisting of a status byte, and X delta, and a Y delta. I've had lots of problems with my Synaptics touchpad on a Compaq Presario 1600 laptop running FreeBSD 4.0-S. At an earlier stage I found that I frequently got zero bytes in between the three byte packets. I adjusted the driver to skip these if present and had better success, but by no means complete success. This weekend I did a lot of experimentation and logging, and found I was getting zero bytes between the sync byte and the X displacement byte. It seemed weird to me that this was inconsistent with what I had before, but again I adjusted the driver for it, and things were working better than ever. Last night I used the zzz command to put the laptop into sleep mode. When I woke it up the touchpad wasn't working - and for the first time, it seemed to be because it was generating three byet packets correctly! So I took my patches out of the driver, rebuilt the kernel, and rebooted. Instead of working, the situation reverted to the initial problem of having zero bytes between the packets! So, I have *again* patched the driver (this is getting really tedious now). The patches are fairly minimal, but consist of: * using a synchronisation check of ((status & 0xCC) == 0x80), instead of the driver's default ((status&mask) == (laststatus&mask)). My check is much more reliable for the touchpad. * silently dropping zero bytes if they occur when we are expecting a status byte to prevent the logs from rapidly filling up with loads of synchronisation problem log messages. Since rebooting with these changes last night, I have had no further problems, but I expect it is just a matter of time before things go haywire again. The real question is: why is the driver reading these zero bytes? And why is the presence and position in the data stream of these zero bytes inconsistent? I have seen three behaviours: sync X Y (what should be happening, but hardly ever does; my current patches can deal with this) 0 sync X Y (the most common; my current patches deal with this) sync 0 X Y (what I saw on the weekend; my patches no longer deal with this) The struggle continues... gram -- Dr Graham Wheeler E-mail: gram@cequrux.com Director, Research and Development WWW: http://www.cequrux.com CEQURUX Technologies Phone: +27(21)423-6065 Firewalls/VPN Specialists Fax: +27(21)424-3656 To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-stable" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4f463cfed0be2648d60e440d5cf2af66>