[PATCH libinput 1/3] touchpad: use the fuzz value (if any) for the hysteresis margin
Peter Hutterer
peter.hutterer at who-t.net
Mon Mar 5 04:38:00 UTC 2018
We currently used 0.5mm on touchpads as hysteresis value. This causes pointer
movement delays, it is likely too high. Reduce it to a kernel-set fuzz value
(if any) and see how we go with that. On many touchpads, the fuzz is 8 which
would be closer to 0.2mm on e.g. a T440.
Note that the does some defuzzing anyway, but the response of that function is
nonlinear, e.g. for a fuzz of 8, the physical deltas map to:
phys 0..3 → delta 0
phys 4..7 → delta 1
phys 8..15 → delta 4, 5, 6, 7
phys 16..N → delta 16..N
In other words, we never see some logical deltas 2 and 3. While this shouldn't
matter given the average touchpad resolution, reducing the hysteresis margin
is likely to provide some better response. We never see values 8-15 either
which could be the cause of some pointer jumps we've been seeing.
see https://bugs.freedesktop.org/show_bug.cgi?id=105303
Devices with a fuzz of 0 have the hysteresis margin reduced to 0.25mm (from
0.5mm).
https://bugs.freedesktop.org/show_bug.cgi?id=105108
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
---
src/evdev-mt-touchpad.c | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/src/evdev-mt-touchpad.c b/src/evdev-mt-touchpad.c
index 833e5c99..0cd3e79d 100644
--- a/src/evdev-mt-touchpad.c
+++ b/src/evdev-mt-touchpad.c
@@ -3093,12 +3093,22 @@ tp_init_default_resolution(struct tp_dispatch *tp,
static inline void
tp_init_hysteresis(struct tp_dispatch *tp)
{
- int res_x, res_y;
+ int xmargin, ymargin;
+ const struct input_absinfo *ax = tp->device->abs.absinfo_x,
+ *ay = tp->device->abs.absinfo_y;
- res_x = tp->device->abs.absinfo_x->resolution;
- res_y = tp->device->abs.absinfo_y->resolution;
- tp->hysteresis.margin.x = res_x/2;
- tp->hysteresis.margin.y = res_y/2;
+ if (ax->fuzz)
+ xmargin = ax->fuzz;
+ else
+ xmargin = ax->resolution/4;
+
+ if (ay->fuzz)
+ ymargin = ay->fuzz;
+ else
+ ymargin = ay->resolution/4;
+
+ tp->hysteresis.margin.x = xmargin;
+ tp->hysteresis.margin.y = ymargin;
tp->hysteresis.enabled = false;
}
--
2.14.3
More information about the wayland-devel
mailing list