On 30/01/15(Fri) 01:25, Ulf Brosziewski wrote: > Probably I was too sceptical about synaptics.c. The bug I observed > with the ALPS touchpad seems to be due to a kind of mismatch between > the ALPS code in pms and the event handling in wsconscomm. The patch > below contains the initial change as well as what was necessary to > fix this.
Do you think it is possible to fix the pms(4) driver instead of adding another quirk? > > diff --git a/wsconscomm.c b/wsconscomm.c > index df3512d..9c5afe7 100644 > --- a/wsconscomm.c > +++ b/wsconscomm.c > @@ -132,12 +132,6 @@ WSConsReadHwState(InputInfoPtr pInfo, > struct wscons_event event; > Bool v; > > - /* Reset cumulative values if buttons were not previously pressed */ > - if (!hw->left && !hw->right && !hw->middle) { > - hw->cumulative_dx = hw->x; > - hw->cumulative_dy = hw->y; > - } > - > while (WSConsReadEvent(pInfo, &event)) { > switch (event.type) { > case WSCONS_EVENT_MOUSE_UP: > @@ -187,9 +181,11 @@ WSConsReadHwState(InputInfoPtr pInfo, > break; > case WSCONS_EVENT_MOUSE_ABSOLUTE_X: > hw->x = event.value; > + hw->cumulative_dx = hw->x; > break; > case WSCONS_EVENT_MOUSE_ABSOLUTE_Y: > hw->y = priv->maxy - event.value + priv->miny; > + hw->cumulative_dy = hw->y; > break; > case WSCONS_EVENT_MOUSE_ABSOLUTE_Z: > hw->z = event.value; > @@ -204,8 +200,14 @@ WSConsReadHwState(InputInfoPtr pInfo, > /* XXX magic number mapping which is mirrored in pms driver */ > switch (event.value) { > case 0: > - hw->fingerWidth = 5; > - hw->numFingers = 2; > + if (priv->model != MODEL_ALPS) { > + hw->fingerWidth = 5; > + hw->numFingers = 2; > + } else { > + /* For ALPS models pms reports that w is 0 if (z <= 0)? > */ > + hw->fingerWidth = 0; > + hw->numFingers = 0; > + } > break; > case 1: > hw->fingerWidth = 5; >