History log of /haiku/src/add-ons/kernel/bus_managers/ps2/ps2_synaptics.cpp
Revision Date Author Comments
# cd6365c7 17-May-2018 Jérôme Duval <jerome.duval@gmail.com>

style fixes


# 79cb8f02 13-May-2018 Adrien Destugues <pulkomandy@pulkomandy.tk>

PS/2 synaptics: minimal clickpad support

Handled as a 1-button mouse. We didn't really support this since the old
Macintosh ADB mouses, so let's see if that code aged well!

Change-Id: Ibed2423023e821ae4ce608f0ddbc5ac32bfbd8f7


# 258b7d4a 10-May-2018 Adrien Destugues <pulkomandy@pulkomandy.tk>

ps2_synaptics: support Lenovo use of extra buttons

On some Thinkpads, the extra buttons are used for the trackpoint, so
they should be reported as "main" buttons, not extended ones. An
(undocumented) information query was added to the firmware to report
when this is the case, however it is not advertised as supported by the
firmware itself by the usual mechanism.

What we do is (just as the Linux driver) detect that the tocuhpad has a
PS/2 passthrough (likely used to daisy-chain a trackpoint on the same
PS/2 port) and also advertises extra buttons (an unlikely case, it is
already uncommon to even get a middle button these days...) and assume
that the information query is available then.

When the query is available and reports the quirk, the extended buttons
are reported as 0, 1, 2 (left, right, middle), instead of extra buttons
the userland would have no idea what to do with.

Change-Id: Iad5a9e140b6e49c298dcc901f4e331a4a847d7b2


# e003057f 10-May-2018 Adrien Destugues <pulkomandy@pulkomandy.tk>

PS/2 Synaptics: add support for extended buttons

It is possible to get up to 8 extra buttons on synaptics touchpads.
On some Thinkpad models, these are used to implement the trackpoint
buttons (reported as buttons 4, 5 and 6). Since the touchpad itself has
no buttons (it is a clickpad), we may at least try to handle these
properly.

Change-Id: I5d4021e36fb3ac86ecf213c5666f9b6ddd3e2bca


# ebdb22de 10-May-2018 Zoltán Mizsei <zmizsei@extrowerk.com>

Fix ps2 debug build on x86_64

Change-Id: I579656b6b0619b44aa4a02c87720762cb5dd1415


# 14c42c37 04-Dec-2014 Adrien Destugues <pulkomandy@gmail.com>

Synaptics: remove useless delay.

As pointed by Axel and explained in Synaptic docs, the touchpad should
delay the first command itself until it's ready, so an arbitrary delay
should not be needed after reset.

Note: I don't have a touchpad on my machine. Please test this :)


# c2872486 03-Dec-2014 Adrien Destugues <pulkomandy@gmail.com>

Reset PS/2 devices before probing as synaptics touchpad.

Patch from dukscry, fixes #8616.


# 4b722b91 27-Jun-2011 Siarzhuk Zharski <zharik@gmx.li>

Proper handling of middle mouse event on capFourButtons and capMiddleButton
capable touchpads.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42329 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7f4deb44 26-Jun-2011 Siarzhuk Zharski <zharik@gmx.li>

* Implemented PS2_CMD_RESEND command handlig;

* Workaround for touchpad reset timeouts on some HP/Compaq KBCs. Looks like such
KBC marks the mouse reset request (xFF) as correctly sent (by xFA answer) but
does not wait enough time for the answer from touchpad. So complete answer
finally contains xFE xAA x00 bytes. The workaround detects this xFE xAA answer
and issues the RESEND (xFE) request to touchpad. This forces touchpad to resend
the last packet of data (xAA x00) that can be processed normally by the host;

* Fix for handling passthrough_command() call. The parent device was disabled at
start of processing command and was not re-enabled back in case any error return.
This fixes the touchpad "pass-through" feature handling on the same HP/Compaq HW.
This KBC has the "pass-through" capability marked ON but cannot handle it as
currently implemented - there is no answer from corresponding port. The parent
device stay in disabled state after this;

* Fix ps2_dev_publish() for handling passthrough devices (parent_dev != NULL)
This workaround postpone the publishing such device until the parent device
finishes it's opening and set the PS2_ENABLED_FALG. It prevent from mixing
the Synaptics multi-command sequences from synaptics_open() and ps2_dev_publish()
routines and failing both initializations;

Fixes #2867 #3594 #4315



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42325 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9b35c5d3 06-Apr-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

- Generate helper events for ALPS touchpads. This is needed for tap drag and edge motion. This emulates the synaptics touchpad somehow. For example, we need more events to decide if a tap is a
simple click or becomes a tap drag. ALPS does not send these events.
- Enable ALPS.
- Force const edge motion speed. Synaptics sends events with a certain frequency ALPS don't. Even worse ALPS stops sending events durring a edge motion when you don't move your finger. Current
speed is 200 pixel/s. In theory synaptics has different event frequency modes which would result in a different edge motion speed in the previous approach. Please check if synaptics works/speed is correct. Will try to get a synaptics laptop for testing...
- fix class variable names.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41190 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a16bab72 06-Apr-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Initialize the synaptics cookie again. Not sure but maybe this fixes a crash on startup (if there is an interrupt before the ring buffer is created...).



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41189 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c152c70b 30-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

- ALPS and synaptics are sharing the same code to generate mouse events now. The movement generation is calibrated on the synaptics touchpad, though.
ALPS movements are fine now, hope the synaptics is still working. Please test! There are still some leftovers form switching from a c struct to a c++
class will fix that later.
- Support ALPS devices with passthrough.
- ALPS is still disabled because tap and edge motion is not working yet. The
problem is that synaptics generates more helper events which makes this a lot
easier to implement. My plan is to emulate this events to imitate the synatics touchpad.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41140 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e637ccf5 28-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Reapply the ps2 cpp patch. Thanks Axel.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41134 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 79bdca06 28-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Revert r41129 to get history back.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41133 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 278a2b8a 27-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Making the ps2 busmanager c++.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41129 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 14c42c37834c22ec722b28bb5462d494dac9b23c 04-Dec-2014 Adrien Destugues <pulkomandy@gmail.com>

Synaptics: remove useless delay.

As pointed by Axel and explained in Synaptic docs, the touchpad should
delay the first command itself until it's ready, so an arbitrary delay
should not be needed after reset.

Note: I don't have a touchpad on my machine. Please test this :)


# c2872486ecdbb9e151eef60bdfca0382ba57acda 03-Dec-2014 Adrien Destugues <pulkomandy@gmail.com>

Reset PS/2 devices before probing as synaptics touchpad.

Patch from dukscry, fixes #8616.


# 4b722b91dbef7f8d005bfaec6174faa7cfcaecb4 27-Jun-2011 Siarzhuk Zharski <zharik@gmx.li>

Proper handling of middle mouse event on capFourButtons and capMiddleButton
capable touchpads.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42329 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7f4deb4400434bb3c210a7b0333eddd4800290bf 26-Jun-2011 Siarzhuk Zharski <zharik@gmx.li>

* Implemented PS2_CMD_RESEND command handlig;

* Workaround for touchpad reset timeouts on some HP/Compaq KBCs. Looks like such
KBC marks the mouse reset request (xFF) as correctly sent (by xFA answer) but
does not wait enough time for the answer from touchpad. So complete answer
finally contains xFE xAA x00 bytes. The workaround detects this xFE xAA answer
and issues the RESEND (xFE) request to touchpad. This forces touchpad to resend
the last packet of data (xAA x00) that can be processed normally by the host;

* Fix for handling passthrough_command() call. The parent device was disabled at
start of processing command and was not re-enabled back in case any error return.
This fixes the touchpad "pass-through" feature handling on the same HP/Compaq HW.
This KBC has the "pass-through" capability marked ON but cannot handle it as
currently implemented - there is no answer from corresponding port. The parent
device stay in disabled state after this;

* Fix ps2_dev_publish() for handling passthrough devices (parent_dev != NULL)
This workaround postpone the publishing such device until the parent device
finishes it's opening and set the PS2_ENABLED_FALG. It prevent from mixing
the Synaptics multi-command sequences from synaptics_open() and ps2_dev_publish()
routines and failing both initializations;

Fixes #2867 #3594 #4315



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42325 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9b35c5d38ddff53d71b9f6b0644704b87c5ad9bb 06-Apr-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

- Generate helper events for ALPS touchpads. This is needed for tap drag and edge motion. This emulates the synaptics touchpad somehow. For example, we need more events to decide if a tap is a
simple click or becomes a tap drag. ALPS does not send these events.
- Enable ALPS.
- Force const edge motion speed. Synaptics sends events with a certain frequency ALPS don't. Even worse ALPS stops sending events durring a edge motion when you don't move your finger. Current
speed is 200 pixel/s. In theory synaptics has different event frequency modes which would result in a different edge motion speed in the previous approach. Please check if synaptics works/speed is correct. Will try to get a synaptics laptop for testing...
- fix class variable names.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41190 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a16bab72a73194534d048c254684d34327ae1791 06-Apr-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Initialize the synaptics cookie again. Not sure but maybe this fixes a crash on startup (if there is an interrupt before the ring buffer is created...).



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41189 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c152c70b467536ee3e54c43674f70e1f849c4532 30-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

- ALPS and synaptics are sharing the same code to generate mouse events now. The movement generation is calibrated on the synaptics touchpad, though.
ALPS movements are fine now, hope the synaptics is still working. Please test! There are still some leftovers form switching from a c struct to a c++
class will fix that later.
- Support ALPS devices with passthrough.
- ALPS is still disabled because tap and edge motion is not working yet. The
problem is that synaptics generates more helper events which makes this a lot
easier to implement. My plan is to emulate this events to imitate the synatics touchpad.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41140 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e637ccf5c1c22c87fa0cb695a2d62d6ee1d92308 28-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Reapply the ps2 cpp patch. Thanks Axel.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41134 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 79bdca06506e69ebd8d9a1eecc5a246b21286472 28-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Revert r41129 to get history back.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41133 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 278a2b8aaa75b3252ca8de1eef36ca6afc836ac1 27-Mar-2011 Clemens Zeidler <clemens.zeidler@googlemail.com>

Making the ps2 busmanager c++.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@41129 a95241bf-73f2-0310-859d-f6bbb57e9c96