SynPS/2 Synaptics TouchPad firmware bug

Peter Hutterer peter.hutterer at who-t.net
Thu Mar 27 21:48:43 PDT 2014


On Thu, Mar 27, 2014 at 10:19:50PM +0600, Alexander E. Patrakov wrote:
> Hello.
> 
> This is a report of a touchpad firmware bug that I want you to work
> around in libinput. I found this bug while testing
> xf86-input-libinput. I guess that the synaptics driver already has a
> workaround, or the bug does not manifest itself with the following
> options:
> 
>         Option "SoftButtonAreas" "4360 0 4000 0 2880 4359 3500 0"
>         Option "AreaBottomEdge" "3500"
>         Option "VertTwoFingerScroll" "true"
>         Option "HorizTwoFingerScroll" "true"
>         Option "MinSpeed" "1"
>         Option "MaxSpeed" "10"
>         Option "FingerLow" "60"
>         Option "FingerHigh" "70"
> 
> (indeed, FingerLow would have prevented this bug for the attached trace).

for the xorg driver this is correct, for libinput it's a bit different. it
largely depends on whether we want the pressure to filter events, or to
filter completely. I haven't done anything in that direction yet at all
though.

> To reproduce the bug, get the affected touchpad, move the cursor as
> you would normally do using a finger on the right hand, then use the
> finger on the left hand to click in the bottom area of the touchpad.
> Usually the driver would register the click as expected, but sometimes
> it would move the pointer to the lower left corner and click there.
> 
> I have managed to capture one of these cases using evemu-record. The
> compressed file is attached. Please ignore the first 240 seconds or
> so, they contain some movements, scrolling and clicks.
> 
> The interesting part is:
> 
> E: 249.206319 0000 0000 0000    # ------------ SYN_REPORT (0) ----------
> E: 249.218008 0003 0035 3764    # EV_ABS / ABS_MT_POSITION_X    3764
> E: 249.218008 0003 0036 2221    # EV_ABS / ABS_MT_POSITION_Y    2221
> E: 249.218008 0003 003a 0065    # EV_ABS / ABS_MT_PRESSURE      65
> E: 249.218008 0003 0000 3764    # EV_ABS / ABS_X                3764
> E: 249.218008 0003 0001 2216    # EV_ABS / ABS_Y                2216
> E: 249.218008 0003 0018 0065    # EV_ABS / ABS_PRESSURE         65
> E: 249.218008 0000 0000 0000    # ------------ SYN_REPORT (0) ----------
> E: 249.230881 0003 0035 3752    # EV_ABS / ABS_MT_POSITION_X    3752
> E: 249.230881 0003 003a 0046    # EV_ABS / ABS_MT_PRESSURE      46
> E: 249.230881 0003 0000 3758    # EV_ABS / ABS_X                3758
> E: 249.230881 0003 0018 0046    # EV_ABS / ABS_PRESSURE         46
> E: 249.230881 0000 0000 0000    # ------------ SYN_REPORT (0) ----------
> E: 249.242648 0003 0035 1640    # EV_ABS / ABS_MT_POSITION_X    1640
> E: 249.242648 0003 0036 4681    # EV_ABS / ABS_MT_POSITION_Y    4681
> E: 249.242648 0003 003a 0025    # EV_ABS / ABS_MT_PRESSURE      25
> E: 249.242648 0003 0000 1640    # EV_ABS / ABS_X                1640
> E: 249.242648 0003 0001 4681    # EV_ABS / ABS_Y                4681
> E: 249.242648 0003 0018 0025    # EV_ABS / ABS_PRESSURE         25
> E: 249.242648 0000 0000 0000    # ------------ SYN_REPORT (0) ----------
> E: 249.254568 0003 0035 1648    # EV_ABS / ABS_MT_POSITION_X    1648
> E: 249.254568 0003 003a 0027    # EV_ABS / ABS_MT_PRESSURE      27
> E: 249.254568 0003 0000 1644    # EV_ABS / ABS_X                1644
> E: 249.254568 0003 0018 0027    # EV_ABS / ABS_PRESSURE         27
> 
> As you see, the touchpad reports a huge jump in the touch position
> without getting a new tracking ID. I.e. produces garbage data. A
> non-buggy touchpad would have recognized that this is in fact a
> different finger.
> 
> So, I would like libinput to recognize such huge jumps (e.g. any
> movements by more than 15% of the touchpad width in less than 0.03
> seconds) as firmware bugs and treat them as if this indicated a
> completely new touch.

please file this in bugzilla, this really is something that we need to keep
in one place because it'll likely have a rather complex solution that I'd
like to be able to link to.

having said that, I'm currently struggling with getting libinput up to
feature parity with the xorg drivers, hacking around broken devices will
have to wait a bit, sorry.

Cheers,
   Peter




More information about the wayland-devel mailing list