From patchwork Thu Feb 26 23:20:07 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mathias Gottschlag X-Patchwork-Id: 5896721 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 D21249F37F for ; Thu, 26 Feb 2015 23:20:57 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id C99E9203AB for ; Thu, 26 Feb 2015 23:20:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E5971203AE for ; Thu, 26 Feb 2015 23:20:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754270AbbBZXUx (ORCPT ); Thu, 26 Feb 2015 18:20:53 -0500 Received: from mail-wg0-f49.google.com ([74.125.82.49]:33832 "EHLO mail-wg0-f49.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753969AbbBZXUY (ORCPT ); Thu, 26 Feb 2015 18:20:24 -0500 Received: by wghn12 with SMTP id n12so15744084wgh.1; Thu, 26 Feb 2015 15:20:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=baroQYbUCPhBU/olbEtuES/wPpwbG36oU7SFfYAmmiI=; b=aD48U43GlwlRm4JaJ66pjfESifxPA3efVzLCJw2iMHgEK6TGSgXmqNLXTRp06yxjSO /KWVSvI8KZOt+4ip4g+dCAznka5IbpN0wbQXnJoz+GajarhkW8lKu6OlW3Pk194a6ae1 RHi8p+m4E/FcITpsVMefBB6/wgyNUYZ3rJP49KEhm2fN4qqZyWAqnz3DSaidPVy2YqkM E8lpV0bz4p3xGS/6QFG12eS0pnbU8P3e3VfPrS2ozvqHW1yphXnkwY4MOJNUVyfnyPRK sXAqOcabT9xjuoQ0IGT1IWZ/6bFY6SOb8Mk0OI9DvQgmfEN4WzlczqizJbceSO3ReIO5 GKzg== X-Received: by 10.194.47.201 with SMTP id f9mr3630199wjn.17.1424992823011; Thu, 26 Feb 2015 15:20:23 -0800 (PST) Received: from mathias-laptop.lan (HSI-KBW-37-209-111-36.hsi15.kabel-badenwuerttemberg.de. [37.209.111.36]) by mx.google.com with ESMTPSA id q10sm3408376wjr.41.2015.02.26.15.20.22 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 26 Feb 2015 15:20:22 -0800 (PST) From: Mathias Gottschlag To: Dmitry Torokhov Cc: Hans de Goede , linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, Mathias Gottschlag Subject: [PATCHv2 3/4] psmouse: Disable resolution/rate/scale changes for FocalTech touchpads. Date: Fri, 27 Feb 2015 00:20:07 +0100 Message-Id: <1424992808-29891-4-git-send-email-mgottschlag@gmail.com> X-Mailer: git-send-email 2.1.0 In-Reply-To: <1424992808-29891-1-git-send-email-mgottschlag@gmail.com> References: <1423940502-12353-1-git-send-email-mgottschlag@gmail.com> <1424992808-29891-1-git-send-email-mgottschlag@gmail.com> 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.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham 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 These PS/2 commands make some touchpads stop responding, so this commit adds some dummy functions to replace the generic implementation. Because scale changes were not encapsulated in a method of struct psmouse yet, this commit adds a method set_scale to psmouse. Signed-off-by: Mathias Gottschlag --- drivers/input/mouse/focaltech.c | 24 ++++++++++++++++++++++++ drivers/input/mouse/psmouse-base.c | 18 +++++++++++++++++- drivers/input/mouse/psmouse.h | 7 +++++++ 3 files changed, 48 insertions(+), 1 deletion(-) diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c index 0cfc646..d96a847 100644 --- a/drivers/input/mouse/focaltech.c +++ b/drivers/input/mouse/focaltech.c @@ -386,6 +386,23 @@ static int focaltech_read_size(struct psmouse *psmouse) return 0; } + +void focaltech_set_resolution(struct psmouse *psmouse, unsigned int resolution) +{ + /* not supported yet */ +} + +static void focaltech_set_rate(struct psmouse *psmouse, unsigned int rate) +{ + /* not supported yet */ +} + +static void focaltech_set_scale(struct psmouse *psmouse, + enum psmouse_scale scale) +{ + /* not supported yet */ +} + int focaltech_init(struct psmouse *psmouse) { struct focaltech_data *priv; @@ -420,6 +437,13 @@ int focaltech_init(struct psmouse *psmouse) psmouse->cleanup = focaltech_reset; /* resync is not supported yet */ psmouse->resync_time = 0; + /* + * rate/resolution/scale changes are not supported yet, and the generic + * implementations of these functions seem to confuse some touchpads + */ + psmouse->set_resolution = focaltech_set_resolution; + psmouse->set_rate = focaltech_set_rate; + psmouse->set_scale = focaltech_set_scale; return 0; diff --git a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c index 68469fe..58537eb 100644 --- a/drivers/input/mouse/psmouse-base.c +++ b/drivers/input/mouse/psmouse-base.c @@ -454,6 +454,20 @@ static void psmouse_set_rate(struct psmouse *psmouse, unsigned int rate) } /* + * Here we set the mouse scaling. + */ + +static void psmouse_set_scale(struct psmouse *psmouse, enum psmouse_scale scale) +{ + if (scale == PSMOUSE_SCALE21) { + ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE21); + } else { + ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11); + } + psmouse->scale = scale; +} + +/* * psmouse_poll() - default poll handler. Everyone except for ALPS uses it. */ @@ -689,6 +703,7 @@ static void psmouse_apply_defaults(struct psmouse *psmouse) psmouse->set_rate = psmouse_set_rate; psmouse->set_resolution = psmouse_set_resolution; + psmouse->set_scale = psmouse_set_scale; psmouse->poll = psmouse_poll; psmouse->protocol_handler = psmouse_process_byte; psmouse->pktsize = 3; @@ -1160,7 +1175,7 @@ static void psmouse_initialize(struct psmouse *psmouse) if (psmouse_max_proto != PSMOUSE_PS2) { psmouse->set_rate(psmouse, psmouse->rate); psmouse->set_resolution(psmouse, psmouse->resolution); - ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_SETSCALE11); + psmouse->set_scale(psmouse, PSMOUSE_SCALE11); } } @@ -1492,6 +1507,7 @@ static int psmouse_connect(struct serio *serio, struct serio_driver *drv) psmouse->rate = psmouse_rate; psmouse->resolution = psmouse_resolution; + psmouse->scale = PSMOUSE_SCALE11; psmouse->resetafter = psmouse_resetafter; psmouse->resync_time = parent ? 0 : psmouse_resync_time; psmouse->smartscroll = psmouse_smartscroll; diff --git a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h index c2ff137..80fc62c 100644 --- a/drivers/input/mouse/psmouse.h +++ b/drivers/input/mouse/psmouse.h @@ -36,6 +36,11 @@ typedef enum { PSMOUSE_FULL_PACKET } psmouse_ret_t; +enum psmouse_scale { + PSMOUSE_SCALE11, + PSMOUSE_SCALE21 +}; + struct psmouse { void *private; struct input_dev *dev; @@ -60,6 +65,7 @@ struct psmouse { unsigned int rate; unsigned int resolution; + enum psmouse_scale scale; unsigned int resetafter; unsigned int resync_time; bool smartscroll; /* Logitech only */ @@ -67,6 +73,7 @@ struct psmouse { psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse); void (*set_rate)(struct psmouse *psmouse, unsigned int rate); void (*set_resolution)(struct psmouse *psmouse, unsigned int resolution); + void (*set_scale)(struct psmouse *psmouse, enum psmouse_scale scale); int (*reconnect)(struct psmouse *psmouse); void (*disconnect)(struct psmouse *psmouse);