diff mbox

PROBLEM: Missing events on thinkpad trackpoint buttons

Message ID 20150820225633.GA12900@localhost (mailing list archive)
State New, archived
Headers show

Commit Message

Dmitry Torokhov Aug. 20, 2015, 10:56 p.m. UTC
On Fri, Aug 21, 2015 at 12:24:59AM +0200, Gabor Balla wrote:
> Hi Dmitry,
> 
> On Thu, Aug 20, 2015 at 11:35 PM, Dmitry Torokhov
> <dmitry.torokhov@gmail.com> wrote:
> > On Thu, Aug 20, 2015 at 10:50:27PM +0200, Gabor Balla wrote:
> [...]
> >> 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
> [...]
> >> A quick fix follows:
> [...]
> >
> > 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?
> 
> If I'm not mistaken, the function of bit 2 depends on the state of W mode rather
> than absolute vs relative mode. From page 40 of the PDF:
> 
> "If the Wmode bit is not set (0), then Gesture is reported and bit 2 refers to
> DisGest. (..) When this bit is 1, the Relative mode mouse packet reports the
> true physical button states, and the Absolute mode packet’s Gesture bit always
> reports as zero."
> 
> So it still has a meaning in absolute mode, when Wmode is disabled.
> I've tried the patch, it works, but I don't believe it's correct.

Yes, you are right, the bot does have meaning on Absolute mode, however
we want to give option to enable gestures only when in relative mode;
I've adjusted the description accordingly.

By the way, I re-read the spec and it says that when in Relative mode we
should not touch W-mode bit at all so I adjusted it as well.

Thanks.

Comments

Dmitry Torokhov Aug. 20, 2015, 11:01 p.m. UTC | #1
On Thu, Aug 20, 2015 at 3:56 PM, Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:
> On Fri, Aug 21, 2015 at 12:24:59AM +0200, Gabor Balla wrote:
>> Hi Dmitry,
>>
>> On Thu, Aug 20, 2015 at 11:35 PM, Dmitry Torokhov
>> <dmitry.torokhov@gmail.com> wrote:
>> > On Thu, Aug 20, 2015 at 10:50:27PM +0200, Gabor Balla wrote:
>> [...]
>> >> 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
>> [...]
>> >> A quick fix follows:
>> [...]
>> >
>> > 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?
>>
>> If I'm not mistaken, the function of bit 2 depends on the state of W mode rather
>> than absolute vs relative mode. From page 40 of the PDF:
>>
>> "If the Wmode bit is not set (0), then Gesture is reported and bit 2 refers to
>> DisGest. (..) When this bit is 1, the Relative mode mouse packet reports the
>> true physical button states, and the Absolute mode packet’s Gesture bit always
>> reports as zero."
>>
>> So it still has a meaning in absolute mode, when Wmode is disabled.
>> I've tried the patch, it works, but I don't believe it's correct.
>
> Yes, you are right, the bot does have meaning on Absolute mode, however
> we want to give option to enable gestures only when in relative mode;
> I've adjusted the description accordingly.

Ah, wait, not quite still. So we actually do want to disable gestures
when in Absolute mode (non extended). Although frankly I do not think
we'll ever see pre 4.0 Synaptics device in a wild.

Thanks.
Gabor Balla Aug. 20, 2015, 11:05 p.m. UTC | #2
Hi Dmitry,

On Fri, Aug 21, 2015 at 1:01 AM, Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:
> On Thu, Aug 20, 2015 at 3:56 PM, Dmitry Torokhov
> <dmitry.torokhov@gmail.com> wrote:
>> On Fri, Aug 21, 2015 at 12:24:59AM +0200, Gabor Balla wrote:
>>> Hi Dmitry,
>>>
>>> On Thu, Aug 20, 2015 at 11:35 PM, Dmitry Torokhov
>>> <dmitry.torokhov@gmail.com> wrote:
>>> > On Thu, Aug 20, 2015 at 10:50:27PM +0200, Gabor Balla wrote:
[...]
> Ah, wait, not quite still. So we actually do want to disable gestures
> when in Absolute mode (non extended). Although frankly I do not think
> we'll ever see pre 4.0 Synaptics device in a wild.

Also notice there is a function called synaptics_set_disable_gesture that can
change that bit regardless of current mode.

Thanks (also for your patience),
Gabor
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Dmitry Torokhov Aug. 20, 2015, 11:08 p.m. UTC | #3
Hi Gabor,

On Fri, Aug 21, 2015 at 01:05:46AM +0200, Gabor Balla wrote:
> Hi Dmitry,
> 
> On Fri, Aug 21, 2015 at 1:01 AM, Dmitry Torokhov
> <dmitry.torokhov@gmail.com> wrote:
> > On Thu, Aug 20, 2015 at 3:56 PM, Dmitry Torokhov
> > <dmitry.torokhov@gmail.com> wrote:
> >> On Fri, Aug 21, 2015 at 12:24:59AM +0200, Gabor Balla wrote:
> >>> Hi Dmitry,
> >>>
> >>> On Thu, Aug 20, 2015 at 11:35 PM, Dmitry Torokhov
> >>> <dmitry.torokhov@gmail.com> wrote:
> >>> > On Thu, Aug 20, 2015 at 10:50:27PM +0200, Gabor Balla wrote:
> [...]
> > Ah, wait, not quite still. So we actually do want to disable gestures
> > when in Absolute mode (non extended). Although frankly I do not think
> > we'll ever see pre 4.0 Synaptics device in a wild.
> 
> Also notice there is a function called synaptics_set_disable_gesture that can
> change that bit regardless of current mode.

That attribute is only created when touchpad is used in relative mode,
so should be OK.

Thanks.
diff mbox

Patch

diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
index 28daca1..298f65d 100644
--- a/drivers/input/mouse/synaptics.c
+++ b/drivers/input/mouse/synaptics.c
@@ -519,14 +519,17 @@  static int synaptics_set_mode(struct psmouse *psmouse)
 	struct synaptics_data *priv = psmouse->private;
 
 	priv->mode = 0;
-	if (priv->absolute_mode)
+
+	if (priv->absolute_mode) {
 		priv->mode |= SYN_BIT_ABSOLUTE_MODE;
-	if (priv->disable_gesture)
+		if (SYN_CAP_EXTENDED(priv->capabilities))
+			priv->mode |= SYN_BIT_W_MODE;
+	} 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;
 
 	if (synaptics_mode_cmd(psmouse, priv->mode))
 		return -1;
@@ -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;
 
 	/*