Comment 40 for bug 787738

Revision history for this message
In , j-kernel-bugs (j-kernel-bugs-linux-kernel-bugs) wrote :

At least the case with the Lenovo L430 touchpad & trackpoint is that when the device is detected as ETPS/2 Elantech Touchpad touching the trackpoint sends a series of bytes which confuses the elantech driver. And leads to lost sync at byte 6 / driver resynced messages.

If imps protocol is forced, both trackpoint and touchpad work fine, but advanced configuration possibilities are lost.

What I've figured out so far is that in the Elantech/synaptics mode the trackpoint sends 6 byte PS/2ish data:
0x30 0x00 0x00 0x06 0xf5 0xfc
0x30 0x00 0x00 0x06 0xfa 0xfd
0x30 0x00 0x00 0x06 0xfb 0xfe
0x30 0x00 0x00 0x06 0xfb 0xfd
0x30 0x00 0x00 0x06 0xfb 0xfe
0x30 0x00 0x00 0x06 0xf5 0xfb
0x30 0x00 0x00 0x06 0xf9 0xfe
0x30 0x00 0x00 0x06 0xf5 0xfb
0x30 0x00 0x00 0x06 0xfa 0xfd
0x30 0x00 0x00 0x06 0xf5 0xfb
0x30 0x00 0x00 0x06 0xfa 0xfd

Which should be parsed separately by the Elantech driver or some other driver?
Any way the format seems to be something like this
1st byte: [possibly Y overflow?, possibly X overflow?, Y sign, X sign, ??, Middle Btn, Right Btn, Left Btn]
2nd byte: No idea, most of the time either 0x00 or 0x80
3rd byte: No idea, most of the time either 0x00 or 0x80
4th byte: No idea about the 1st half, lower half is 0x6 for trackpoint events
5th byte: Rest of the X movement
6th byte: Rest of the Y movement

With this I at least was able to hack the elantech driver so that the trackpoint and touchpad are usable, however the problem (besides the unknown data) is that I have no idea how to detect if the device has a trackpoint, so can't really create a patch that would be suitable for other configurations.