Commit ea7498ef authored by Peter Hutterer's avatar Peter Hutterer

touchpad: use the fuzz value (if any) for the hysteresis margin

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.


Devices with a fuzz of 0 have the hysteresis margin reduced to 0.25mm (from
0.5mm). Peter Hutterer's avatarPeter Hutterer <>
parent 50418a01
......@@ -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;
xmargin = ax->resolution/4;
if (ay->fuzz)
ymargin = ay->fuzz;
ymargin = ay->resolution/4;
tp->hysteresis.margin.x = xmargin;
tp->hysteresis.margin.y = ymargin;
tp->hysteresis.enabled = false;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment