From patchwork Thu Feb 9 19:49:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Torokhov X-Patchwork-Id: 9565401 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 95D736020C for ; Thu, 9 Feb 2017 19:56:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8480628540 for ; Thu, 9 Feb 2017 19:56:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 775C028549; Thu, 9 Feb 2017 19:56:37 +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.3 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, 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 1189D28540 for ; Thu, 9 Feb 2017 19:56:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932161AbdBIT4f (ORCPT ); Thu, 9 Feb 2017 14:56:35 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:35458 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932131AbdBIT4f (ORCPT ); Thu, 9 Feb 2017 14:56:35 -0500 Received: by mail-pg0-f65.google.com with SMTP id 204so1095008pge.2; Thu, 09 Feb 2017 11:56:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=i5OpSilnusb+BwoqjBlmbsE9tPCit//ofqmuXh+5LgI=; b=i8PwCiKqPxQRJTTSeeNINT2iEI0keO04x8ph4pIGyc4uhCg41S2z/Whwz828g4mMNr qJkYtqa0k52Bym6Ag12R576clhUsaznvS0Ck2zFbyOEMhWm4bAksO7tS8Pb58/bR/Tya h8GQtWSamRceWujgLUnaV3B1mdS7YJvZe2pn8/KjVfvhmhl/+J29w07vkCc59emvdSvv hfEpd/LcexiJiGSM0pWuPmeOdzBywCoBAY9QAObOGdfaxOyuX80H0oZ4W7H8JoJdXVpZ NnQFZ5d3rb8emI9yr9WxBxJRqICd0lEwPwcKkhtIkuBGw5g65oW7w1P/muk94z3Yfcb+ C7qg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=i5OpSilnusb+BwoqjBlmbsE9tPCit//ofqmuXh+5LgI=; b=EC60cHyBOgqVB1l0KG6LZCQ3O8uFdBHBG6G+IiMVm8YDwmdPp8tXIPQlHG+lnc+i+z 9pyqEyx08MjvxJt3LgzRy+Qa+cmquj2A2eS1POWYEITiYmeRCDe0zbcrN/TGThA2ab5E jWFuXAVCIpxZOEjLOwbahpNCHzAr+ZDaal+C/nNOv1KQJk3B/VNruulak1UKPlLxsZ2k TjNDfJUUaDB8k9N7rO0FvYbHEz9PVe9e0vV584Sw518f0ratwl0Tkt9pMi3Nrki7Mwpj OAkBm/uPsytT16ranuOI58f43bC2O0pvj32RaKsO9iBA2TQYwe6x7+W6sh8Cwql6QqA5 L85w== X-Gm-Message-State: AMke39nMpU5NB6yLYH5ZHiNPJSJZU2Iip5kNajdR9ieZxhhjw+TF3j9BUegFOlXYpBMg9w== X-Received: by 10.99.56.94 with SMTP id h30mr5934280pgn.23.1486669753552; Thu, 09 Feb 2017 11:49:13 -0800 (PST) Received: from dtor-ws.mtv.corp.google.com ([172.22.152.34]) by smtp.gmail.com with ESMTPSA id n70sm31016042pfg.34.2017.02.09.11.49.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 09 Feb 2017 11:49:12 -0800 (PST) From: Dmitry Torokhov To: Benjamin Tissoires Cc: Andrew Duggan , Christopher Heiny , Lyude Paul , linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/3] Input: synaptics - use SERIO_OOB_DATA to handle trackstick buttons Date: Thu, 9 Feb 2017 11:49:09 -0800 Message-Id: <20170209194911.32442-1-dmitry.torokhov@gmail.com> X-Mailer: git-send-email 2.11.0.483.g087da7b7c-goog 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 Instead of using custom method of "passing" extended buttons from the touchpad to trackstick, let's switch to the newly introduced SERIO_OOB_DATA channel. Signed-off-by: Dmitry Torokhov --- drivers/input/mouse/synaptics.c | 26 +++++++++++++------------- drivers/input/mouse/synaptics.h | 1 - 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c index f004f07fefaa..da7719bf887a 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c @@ -597,15 +597,13 @@ static int synaptics_is_pt_packet(unsigned char *buf) return (buf[0] & 0xFC) == 0x84 && (buf[3] & 0xCC) == 0xC4; } -static void synaptics_pass_pt_packet(struct psmouse *psmouse, - struct serio *ptport, +static void synaptics_pass_pt_packet(struct serio *ptport, unsigned char *packet) { - struct synaptics_data *priv = psmouse->private; struct psmouse *child = serio_get_drvdata(ptport); if (child && child->state == PSMOUSE_ACTIVATED) { - serio_interrupt(ptport, packet[1] | priv->pt_buttons, 0); + serio_interrupt(ptport, packet[1], 0); serio_interrupt(ptport, packet[4], 0); serio_interrupt(ptport, packet[5], 0); if (child->pktsize == 4) @@ -858,7 +856,6 @@ static void synaptics_report_ext_buttons(struct psmouse *psmouse, struct input_dev *dev = psmouse->dev; struct synaptics_data *priv = psmouse->private; int ext_bits = (SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap) + 1) >> 1; - char buf[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; int i; if (!SYN_CAP_MULTI_BUTTON_NO(priv->ext_cap)) @@ -885,15 +882,18 @@ static void synaptics_report_ext_buttons(struct psmouse *psmouse, * physically wired to the touchpad. Re-route them through * the pass-through interface. */ - if (!priv->pt_port) - return; + if (priv->pt_port) { + u8 pt_buttons; - /* The trackstick expects at most 3 buttons */ - priv->pt_buttons = SYN_CAP_EXT_BUTTON_STICK_L(hw->ext_buttons) | - SYN_CAP_EXT_BUTTON_STICK_R(hw->ext_buttons) << 1 | - SYN_CAP_EXT_BUTTON_STICK_M(hw->ext_buttons) << 2; + /* The trackstick expects at most 3 buttons */ + pt_buttons = SYN_CAP_EXT_BUTTON_STICK_L(hw->ext_buttons) | + SYN_CAP_EXT_BUTTON_STICK_R(hw->ext_buttons) << 1 | + SYN_CAP_EXT_BUTTON_STICK_M(hw->ext_buttons) << 2; - synaptics_pass_pt_packet(psmouse, priv->pt_port, buf); + serio_interrupt(priv->pt_port, + PSMOUSE_OOB_EXTRA_BTNS, SERIO_OOB_DATA); + serio_interrupt(priv->pt_port, pt_buttons, SERIO_OOB_DATA); + } } static void synaptics_report_buttons(struct psmouse *psmouse, @@ -1147,7 +1147,7 @@ static psmouse_ret_t synaptics_process_byte(struct psmouse *psmouse) if (SYN_CAP_PASS_THROUGH(priv->capabilities) && synaptics_is_pt_packet(psmouse->packet)) { if (priv->pt_port) - synaptics_pass_pt_packet(psmouse, priv->pt_port, + synaptics_pass_pt_packet(priv->pt_port, psmouse->packet); } else synaptics_process_packet(psmouse); diff --git a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h index 56faa7ec4434..116ae2546ace 100644 --- a/drivers/input/mouse/synaptics.h +++ b/drivers/input/mouse/synaptics.h @@ -183,7 +183,6 @@ struct synaptics_data { bool disable_gesture; /* disable gestures */ struct serio *pt_port; /* Pass-through serio port */ - unsigned char pt_buttons; /* Pass-through buttons */ /* * Last received Advanced Gesture Mode (AGM) packet. An AGM packet