From patchwork Thu Nov 24 14:25:51 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Paul Donohue X-Patchwork-Id: 9445551 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E41F9606DB for ; Thu, 24 Nov 2016 14:26:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C60B427FA7 for ; Thu, 24 Nov 2016 14:26:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BA2AC27F7F; Thu, 24 Nov 2016 14:26:34 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5AC9B27F7F for ; Thu, 24 Nov 2016 14:26:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965638AbcKXO0d (ORCPT ); Thu, 24 Nov 2016 09:26:33 -0500 Received: from Lepton.TopQuark.net ([168.235.66.66]:40458 "EHLO Mail2.TopQuark.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965482AbcKXO0c (ORCPT ); Thu, 24 Nov 2016 09:26:32 -0500 Received: from Mail1.TopQuark.net (pool-108-48-201-133.washdc.fios.verizon.net [108.48.201.133]) by Mail2.TopQuark.net (Postfix) with ESMTP id 9CBD3F60465; Thu, 24 Nov 2016 09:26:31 -0500 (EST) Received: from Mail1.TopQuark.net (unknown [127.0.0.1]) by Mail1.TopQuark.net (Postfix) with ESMTP id 3F57027EE1BB; Thu, 24 Nov 2016 09:26:29 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=PaulSD.com; h=from:to:cc :subject:date:message-id:in-reply-to:references:mime-version :content-type:content-transfer-encoding; s=mail; bh=JYkPN92L2gqw IkWEyBgJydxlVKw=; b=InxRUlX9YqG3dTXBDZNZRLTLBjr++gIkdmudLYHAXz6B vXZV9441wleFHa5Wq2P0fBSbGMi732dEEonvijpYeT3YEsNDVMLkuvtDl4x/Icm9 PHUIKXhbpG2Xewre1+D1/ivrTizQJRa1cKop9k7jB+0wo82WdC5AKZVD4mdM9sE= Received: by Mail1.TopQuark.net (Postfix, from userid 1000) id 3031627EE1D7; Thu, 24 Nov 2016 09:26:27 -0500 (EST) From: Paul Donohue To: linux-input@vger.kernel.org Cc: Ben Gamari , =?UTF-8?q?Pali=20Roh=C3=A1r?= , Michal Hocko , Paul Donohue Subject: [PATCH v6 1/3] Input: ALPS - Fix TrackStick support for SS5 hardware Date: Thu, 24 Nov 2016 09:25:51 -0500 Message-Id: <1479997553-25877-2-git-send-email-linux-kernel@PaulSD.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1479997553-25877-1-git-send-email-linux-kernel@PaulSD.com> References: <201611111459.12642@pali> <1479997553-25877-1-git-send-email-linux-kernel@PaulSD.com> MIME-Version: 1.0 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The current Alps SS5 (SS4 v2) code generates bogus TouchPad events when TrackStick packets are processed. This causes the xorg synaptics driver to print "unable to find touch point 0" and "BUG: triggered 'if (priv->num_active_touches > priv->num_slots)'" messages. It also causes unexpected TouchPad button release and reclick event sequences if the TrackStick is moved while holding a TouchPad button. This commit corrects the problem by adjusting alps_process_packet_ss4_v2() so that it only sends TrackStick reports when processing TrackStick packets. Reviewed-by: Pali Rohár Signed-off-by: Paul Donohue --- drivers/input/mouse/alps.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c index 6d7de9b..b93fe83 100644 --- a/drivers/input/mouse/alps.c +++ b/drivers/input/mouse/alps.c @@ -1346,6 +1346,18 @@ static void alps_process_packet_ss4_v2(struct psmouse *psmouse) priv->multi_packet = 0; + /* Report trackstick */ + if (alps_get_pkt_id_ss4_v2(packet) == SS4_PACKET_ID_STICK) { + if (priv->flags & ALPS_DUALPOINT) { + input_report_key(dev2, BTN_LEFT, f->ts_left); + input_report_key(dev2, BTN_RIGHT, f->ts_right); + input_report_key(dev2, BTN_MIDDLE, f->ts_middle); + input_sync(dev2); + } + return; + } + + /* Report touchpad */ alps_report_mt_data(psmouse, (f->fingers <= 4) ? f->fingers : 4); input_mt_report_finger_count(dev, f->fingers); @@ -1356,13 +1368,6 @@ static void alps_process_packet_ss4_v2(struct psmouse *psmouse) input_report_abs(dev, ABS_PRESSURE, f->pressure); input_sync(dev); - - if (priv->flags & ALPS_DUALPOINT) { - input_report_key(dev2, BTN_LEFT, f->ts_left); - input_report_key(dev2, BTN_RIGHT, f->ts_right); - input_report_key(dev2, BTN_MIDDLE, f->ts_middle); - input_sync(dev2); - } } static bool alps_is_valid_package_ss4_v2(struct psmouse *psmouse)