Skip site navigation (1)Skip section navigation (2)
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>