All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Pali Rohár" <pali.rohar@gmail.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Hans de Bruin <jmdebruin@xmsnet.nl>,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4.0 REGRESSION FIX] alps: Fix left touchpad button getting stuck when using it with trackpoint
Date: Wed, 8 Apr 2015 22:26:36 +0200	[thread overview]
Message-ID: <201504082226.36289@pali> (raw)
In-Reply-To: <1428507532-25533-2-git-send-email-hdegoede@redhat.com>

[-- Attachment #1: Type: Text/Plain, Size: 3309 bytes --]

On Wednesday 08 April 2015 17:38:52 Hans de Goede wrote:
> When the left touchpad button gets pressed, and then the
> trackpoint is moved, and then the button is released, the
> following happens:
> 
> 1) touchpad packet is received, touchpad evdev node reports
> BTN_LEFT 1 2) pointingstick packet is received, the hw will
> report a BTN_LEFT 1 in this packet because when the
> trackstick is active it communicates the combined touchpad +
> pointingstick buttons in the trackstick packet, since
> alps_report_bare_ps2_packet passes NULL (*) for the dev2
> parameter to alps_report_buttons the combining is not
> detected and the pointingstick evdev node will also report
> BTN_LEFT 1
> 3) on release of the button a pointingstick packet with
> BTN_LEFT 0 is received, and the pointingstick evdev node will
> report BTN_LEFT 0
> 
> Note how because of the passing as NULL for dev2 the touchpad
> evdev node will never send BTN_LEFT 0 in this scenario
> leading to a stuck mouse button.
> 
> This is a regression in 4.0 introduced by commit 04aae283ba6a8
> ("Input: ALPS - do not mix trackstick and external PS/2 mouse
> data")
> 
> This commit fixes this by passing in the touchpad evdev as
> dev2 parameter when calling alps_report_buttons for the
> pointingstick on alps v2 devices, so that alps_report_buttons
> correctly detect that we're already reporting the button as
> pressed via the touchpad evdev node, and will also send the
> release event there.
> 
> Reported-by: Hans de Bruin <jmdebruin@xmsnet.nl>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

Patch looks good to me, so

Acked-by: Pali Rohár <pali.rohar@gmail.com>

As this is regression in 4.0 (which was not in 3.19), I'm also 
for fixing it. But decision is of course on maintainers...

I think this is nice example how touchpad+trackstick protocol at 
HW level should not looks like. It is complete mess what HW 
engineers invented and how their devices pass input data to 
operating system.

> ---
>  drivers/input/mouse/alps.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/input/mouse/alps.c
> b/drivers/input/mouse/alps.c index 80b6eca..6962c26 100644
> --- a/drivers/input/mouse/alps.c
> +++ b/drivers/input/mouse/alps.c
> @@ -1159,13 +1159,14 @@ static void
> alps_report_bare_ps2_packet(struct psmouse *psmouse, bool
> report_buttons)
>  {
>  	struct alps_data *priv = psmouse->private;
> -	struct input_dev *dev;
> +	struct input_dev *dev, *dev2 = NULL;
> 
>  	/* Figure out which device to use to report the bare packet
> */ if (priv->proto_version == ALPS_PROTO_V2 &&
>  	    (priv->flags & ALPS_DUALPOINT)) {
>  		/* On V2 devices the DualPoint Stick reports bare packets
> */ dev = priv->dev2;
> +		dev2 = psmouse->dev;
>  	} else if (unlikely(IS_ERR_OR_NULL(priv->dev3))) {
>  		/* Register dev3 mouse if we received PS/2 packet first
> time */ if (!IS_ERR(priv->dev3))
> @@ -1177,7 +1178,7 @@ static void
> alps_report_bare_ps2_packet(struct psmouse *psmouse, }
> 
>  	if (report_buttons)
> -		alps_report_buttons(dev, NULL,
> +		alps_report_buttons(dev, dev2,
>  				packet[0] & 1, packet[0] & 2, packet[0] & 4);
> 
>  	input_report_rel(dev, REL_X,

-- 
Pali Rohár
pali.rohar@gmail.com

[-- Attachment #2: This is a digitally signed message part. --]
[-- Type: application/pgp-signature, Size: 198 bytes --]

  reply	other threads:[~2015-04-08 20:26 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-08 15:38 [PATCH 4.0 REGRESSION FIX 0/1] alps: Fix left touchpad button getting stuck Hans de Goede
2015-04-08 15:38 ` [PATCH 4.0 REGRESSION FIX] alps: Fix left touchpad button getting stuck when using it with trackpoint Hans de Goede
2015-04-08 20:26   ` Pali Rohár [this message]
2015-04-12 23:00     ` Dmitry Torokhov
2015-04-12 23:00       ` Dmitry Torokhov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201504082226.36289@pali \
    --to=pali.rohar@gmail.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=hdegoede@redhat.com \
    --cc=jmdebruin@xmsnet.nl \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.