Re: PROBLEM: Missing events on thinkpad trackpoint buttons

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Gabor,

On Thu, Aug 20, 2015 at 10:50:27PM +0200, Gabor Balla wrote:
> Hi,
> 
> I could also reproduce this issue using a T450s, but have probably found the
> issue behind it.
> 
> At some point a new PS/2 mode was introduced by Synaptics, called EWmode. This
> can be enabled by setting bit 2 of the mode byte. But previously this bit was
> used for 'Disable Gesture', whatever that stands for, and it was reused for
> selecting EWmode. Now if plain Wmode is selected, with bit 0 of the mode byte,
> than disable gesture is on by default and bit 2 selects EWmode instead.
> 
> Reference:
> http://www.synaptics.com/sites/default/files/511-000275-01_RevB.pdf
> 
> The current implementation of the driver doesn't take EWmode into account, and
> enables it, when setting both Wmode and what it thinks to be the disable
> gesture bit. It is probably selecting EWmode that causes the glitch.
> 
> A quick fix follows:
> 
> diff -ru a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
> --- a/drivers/input/mouse/synaptics.c2015-08-20 22:25:05.261546729 +0200
> +++ b/drivers/input/mouse/synaptics.c2015-08-20 22:21:28.560038539 +0200
> @@ -521,7 +521,7 @@
>  priv->mode = 0;
>  if (priv->absolute_mode)
>  priv->mode |= SYN_BIT_ABSOLUTE_MODE;
> -if (priv->disable_gesture && !SYN_CAP_EXTENDED(priv->capabilities))
> +if (priv->disable_gesture)

It looks like the patch "direction" is reverted. Also, the presence of
extended capabilities is not the indication that gesture mode should not
be used: in relative mode bit 2 disables gesture reporting, in absolute
mode it enables Extended W-mode.

Does the patch below also work for you?

Thanks.

-- 
Dmitry


Input: synaptics - fix handling of disabling gesture mode

Bit 2 of the mode byte only disables gesture reporting when touchpad is in
relative mode, when in absolute mode it activates the so-called Extended
W-mode that confuses driver and causes missing button presses on some
Thinkpads (x250, T450s).

Reported-by: Nick Bowler <nbowler@xxxxxxxxxx>
Suggested-by: Gabor Balla <gaborwho@xxxxxxxxx>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>
---
 drivers/input/mouse/synaptics.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
index 28daca1..97c5dde 100644
--- a/drivers/input/mouse/synaptics.c
+++ b/drivers/input/mouse/synaptics.c
@@ -519,12 +519,15 @@ static int synaptics_set_mode(struct psmouse *psmouse)
 	struct synaptics_data *priv = psmouse->private;
 
 	priv->mode = 0;
+
 	if (priv->absolute_mode)
 		priv->mode |= SYN_BIT_ABSOLUTE_MODE;
-	if (priv->disable_gesture)
+	else if (priv->disable_gesture)
 		priv->mode |= SYN_BIT_DISABLE_GESTURE;
+
 	if (psmouse->rate >= 80)
 		priv->mode |= SYN_BIT_HIGH_RATE;
+
 	if (SYN_CAP_EXTENDED(priv->capabilities))
 		priv->mode |= SYN_BIT_W_MODE;
 
@@ -1482,7 +1485,7 @@ static int __synaptics_init(struct psmouse *psmouse, bool absolute_mode)
 	}
 
 	priv->absolute_mode = absolute_mode;
-	if (SYN_ID_DISGEST_SUPPORTED(priv->identity))
+	if (!absolute_mode && SYN_ID_DISGEST_SUPPORTED(priv->identity))
 		priv->disable_gesture = true;
 
 	/*
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux