From patchwork Wed Apr 8 15:29:45 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 6180991 Return-Path: X-Original-To: patchwork-linux-input@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 4DF6B9F1C4 for ; Wed, 8 Apr 2015 15:29:58 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 3D12D20263 for ; Wed, 8 Apr 2015 15:29:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3960820253 for ; Wed, 8 Apr 2015 15:29:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753913AbbDHP3y (ORCPT ); Wed, 8 Apr 2015 11:29:54 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42241 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754207AbbDHP3x (ORCPT ); Wed, 8 Apr 2015 11:29:53 -0400 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id t38FTm4H013921 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Wed, 8 Apr 2015 11:29:49 -0400 Received: from shalem.localdomain (vpn1-5-67.ams2.redhat.com [10.36.5.67]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t38FTjCb013420 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Wed, 8 Apr 2015 11:29:46 -0400 Message-ID: <55254969.5060402@redhat.com> Date: Wed, 08 Apr 2015 17:29:45 +0200 From: Hans de Goede User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Hans de Bruin , Dmitry Torokhov CC: linux-input , "linux-kernel@vger.kernel.org >> Linux Kernel Mailing List" , =?UTF-8?B?UGFsaSBSb2jDoXI=?= Subject: Re: 4.0.0-rc mouse/keyboard events get stuck References: <5522D2EF.9070505@xmsnet.nl> <55250A0B.6060608@xmsnet.nl> In-Reply-To: <55250A0B.6060608@xmsnet.nl> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, T_TVD_MIME_EPI, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Hi, On 08-04-15 12:59, Hans de Bruin wrote: > On 04/06/2015 11:23 PM, Dmitry Torokhov wrote: >> Hi Hans, >> >> On Mon, Apr 6, 2015 at 11:39 AM, Hans de Bruin wrote: >>> Since 4.0.0-rc something mu laptop has some mouse /keyboard problems. >>> When I play KDE kpatience, a card game, card stick to my mousepointer: left >>> mouse button down on a card, move mouse pointer and card to another place. >>> left mouse button up to drop the card. This should drop the card, but often >>> the mouse button up events gets stuck somewhere until I move he mouse >>> pointer a little bit. >>> In web based mail clients something similar happens when I drag mail to >>> another folder. >>> Sometime after I start a xterm and start typing, the letters don't appear >>> until move the mouse pointer. >>> >>> Bisecting is out of the question. This kernel realease was so dramatic I was >>> glad to have functioning kde screen when rc4 arrived. >>> >>> My laptop is a Dell Latitude D430, it has a touchpad and a pointer an two >>> sets of buttons. >>> >>> dmesg >>> [ 0.636492] input: AT Translated Set 2 keyboard as >>> /devices/platform/i8042/serio0/input/input4 >>> [ 0.633108] mousedev: PS/2 mouse device common for all mice >>> [ 80.543044] input: PS/2 ALPS Mouse as >>> /devices/platform/i8042/serio1/input/input8 >> >> Linus just merged 2 fixes to ALPS driver that might help you. Could >> you please try compiling tip of the tree and telling me if it fixes >> your issue? >> > > I am at rc.7 and the problem is still there. But maybe you can get away with "user error". Here is a picture of the layout of my laptop: > > http://img.clubic.com/000000DC00604500-photo-dell-latitude-d430-4.jpg > > Lets call the blue thing ts. The buttons directly beneath the keys ts-l and ts-r. For the touchpad tp, tp-l and tp-r. And because one can never have to many input devices um, um-l and um-r for a usb mouse. > > When I play kpatience and stick to one device ts or ts-l or mp and mp-l no problems arise. I can also mix devices for example um and tp-l. There are several combinations. Only one of these ts and tp-l show the problematic behavior. This is the way i use my laptop (user error?) Ok, this one is a regression which is caused by: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/drivers/input/mouse/alps.c?id=04aae283ba6a8cd4851d937bf9c6d6ef0361d794 I've attached a fix which I will formally send / submit upstream in a few minutes too. > Now something to distract you from the issue, something almost completely different. Something which is also present in 3.18 and probably before. Firefox and other programs have scrollbars on the right side. One can click on it, move the slider and release the button. Except with the combination tp and ts-l, It does not work. Al other combinations do. This one is not a regression, it is an issue which we've seem to have had for ages and no one has found, or at least described this accurately until now :) I've done some debugging and this one is fixable, but that is best left to 4.1 I'll whip up a patch and submit it when it is ready. Regards, Hans From 45442ba53c07570a4a9fce730b731449dc90ee87 Mon Sep 17 00:00:00 2001 From: Hans de Goede Date: Wed, 8 Apr 2015 16:21:40 +0200 Subject: [PATCH] alps: Fix left touchpad button getting stuck when using it with trackpoint 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 Signed-off-by: Hans de Goede --- 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, -- 2.3.4