[Bug 231058] no support for active PS/2 multiplexing results in erratic behaviour of Synaptics touchpad on HP 8560w

bugzilla-noreply at freebsd.org bugzilla-noreply at freebsd.org
Tue Sep 25 23:18:42 UTC 2018


https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=231058

--- Comment #3 from Michael Figiel <mifigiel at gmail.com> ---
(In reply to Vladimir Kondratyev from comment #1)
Hello Vladimir,
sorry for responding late and thank you for looking into it. 

I toyed with the controller and can give you some more info:
the machine (hp 8560w) claims to have following devices attached to aux port of
the i8042:
port 0: the trackpoint, the one returning ext. id 0x46
port 1,2 : nothing
port 3: touchpad, returning id 0x47

I've attached acpi PS2M section from the HP 8560w, it lists two id strings
starting with SYN -- maybe both devices are Synaptics' ?

The active multiplexer implementation on 8560w doesn't work as expected: I
can't disable single ports (that should be possible by sending 0x9[0-3] and
0xA7 sequence), so I always get data from both devices.

I'll attach the log of the initialization of the 0x47 device. It doesn't
advertise passthrough.

The trackpoint is recognized as a generic PS/2 mouse, it reports only two
buttons, but actually all three are working.

I've got two mostly working configurations: 
1) I send all commands to port 3, to the touchpad, and get working Synaptics
touchpad, with occasional device resests if I touch the trackpoint or any of
it's buttons (no passthrough on that machine, at least not advertised by the
touchpad) -- you are right, the trackpoint sends generic ps2 packets, but
additionally there ist the issue of interleaving both data streams.

2) I send all commands to port 0, and get a generic PS2 mouse. I removed the id
0x46 from psm.c, so this is the situation before your patch. All buttons work, 
but  it's two times button one, two times two and two times button three,
without any possiblity to tell them apart - not a big deal. I think,
occasionally there are problems with interleaving both streams but generally it
works well. But then there is no point enabling multiplexing in first place...

> The simpler way is to enable multiplexing only for synaptics devices and just > only for configuring/querying stage and return to legacy mode after.
> trackpad/trackpoint packet separation problem should be solved in that case.
This amounts to hidden multiplexing -- the data streams of both devices will be
interleaved, at the level of three bytes. Additionally, the controller might
try to be helpfull, and mangle the data (e.g. using bit 3 of byte one of a
packet to mark the source, a problem with six byte packets). But I haven't
tried it - that's just what this document claims. 

I think, with this special hardware there are only two viable solutions:
1) removing the 0x46 id, leaving i8042 in legacy mode and using the touchpad
and the stick as one generic ps/2 device. One has no gestures, no multi-touch
(two fingers scrolling), but I think it's possible to configure the scrolling
zones on the edges in X11. Actually that sounds like reverting your change :-/

2) to implement a proper multiplexing driver

If you want any logs/traces I'd be happy to provide them. I think it should be
possible to give you access via ssh to the 8560w, at least for a few days.

But if you think that's not worth the effort, it's OK, because solution 1) is
good enough for me, I can maintain a patch locally, there is no point in 
reverting your change if it works well for others.

-- 
You are receiving this mail because:
You are the assignee for the bug.


More information about the freebsd-bugs mailing list