From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S262165AbTFOMFf (ORCPT ); Sun, 15 Jun 2003 08:05:35 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S262169AbTFOMFf (ORCPT ); Sun, 15 Jun 2003 08:05:35 -0400 Received: from mailc.telia.com ([194.22.190.4]:43508 "EHLO mailc.telia.com") by vger.kernel.org with ESMTP id S262165AbTFOMFc (ORCPT ); Sun, 15 Jun 2003 08:05:32 -0400 X-Original-Recipient: linux-kernel@vger.kernel.org To: Vojtech Pavlik Cc: Kernel Mailing List , Joseph Fannin , Jens Taprogge Subject: Re: [PATCH] Synaptics TouchPad driver for 2.5.70 References: <20030615001905.A27084@ucw.cz> From: Peter Osterlund Date: 15 Jun 2003 14:18:57 +0200 In-Reply-To: <20030615001905.A27084@ucw.cz> Message-ID: User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Vojtech Pavlik writes: > On Wed, Jun 11, 2003 at 07:05:31AM +0200, Peter Osterlund wrote: > > > [ I'm resending this because the previous message never showed up on > > the list. Maybe it was too big. ] > > > > Hi! > > > > Here is a driver for the Synaptics TouchPad for 2.5.70. It is largely > > based on the XFree86 driver. This driver operates the touchpad in > > absolute mode and emulates a three button mouse with two scroll > > wheels. Features include: > > > > * Multi finger tapping. > > * Vertical and horizontal scrolling. > > * Edge scrolling during drag operations. > > * Palm detection. > > * Corner tapping. > > ... you may want to put these nice features into the mousedev.c driver > for now, so that the touchpad works with standard XFree without the > event based driver. No need. There is now a working XFree86 driver here: http://w1.894.telia.com/~u89404340/touchpad/index.html It needs the following incremental kernel patch though. diff -u -r -N --exclude='.*' --exclude='*.o' --exclude='*.ko' --exclude='*~' ../../linus/main/linux/drivers/input/mouse/Kconfig linux/drivers/input/mouse/Kconfig --- ../../linus/main/linux/drivers/input/mouse/Kconfig Sun Jun 15 14:10:15 2003 +++ linux/drivers/input/mouse/Kconfig Sun Jun 15 13:53:38 2003 @@ -37,7 +37,7 @@ This touchpad is found on many modern laptop computers. Note that you also need a user space driver to interpret the data generated by the kernel. A compatible driver for XFree86 is available - from http://... + from http://w1.894.telia.com/~u89404340/touchpad/index.html If unsure, say Y. diff -u -r -N --exclude='.*' --exclude='*.o' --exclude='*.ko' --exclude='*~' ../../linus/main/linux/drivers/input/mouse/synaptics.c linux/drivers/input/mouse/synaptics.c --- ../../linus/main/linux/drivers/input/mouse/synaptics.c Sun Jun 15 14:10:15 2003 +++ linux/drivers/input/mouse/synaptics.c Sun Jun 15 11:39:46 2003 @@ -179,9 +179,9 @@ static int query_hardware(struct psmouse *psmouse) { struct synaptics_data *priv = psmouse->private; - int retries = 3; + int retries = 0; - while ((retries++ <= 3) && synaptics_reset(psmouse)) + while ((retries++ < 3) && synaptics_reset(psmouse)) printk(KERN_ERR "synaptics reset failed\n"); if (synaptics_identify(psmouse, &priv->identity)) @@ -274,8 +274,7 @@ * Functions to interpret the absolute mode packets ****************************************************************************/ -static void synaptics_parse_hw_state(struct synaptics_data *priv, - struct synaptics_hw_state *hw) +static void synaptics_parse_hw_state(struct synaptics_data *priv, struct synaptics_hw_state *hw) { unsigned char *buf = priv->proto_buf; @@ -347,10 +346,12 @@ input_report_abs(dev, ABS_Y, hw.y); input_report_abs(dev, ABS_PRESSURE, hw.z); - if (hw.w != priv->old_w) { - input_event(dev, EV_MSC, MSC_GESTURE, hw.w); - priv->old_w = hw.w; - } + /* + * This will generate an event even if w is unchanged, but that is + * exactly what we want, because user space drivers may depend on + * this for gesture decoding. + */ + input_event(dev, EV_MSC, MSC_GESTURE, hw.w); input_report_key(dev, BTN_LEFT, hw.left); input_report_key(dev, BTN_RIGHT, hw.right); diff -u -r -N --exclude='.*' --exclude='*.o' --exclude='*.ko' --exclude='*~' ../../linus/main/linux/drivers/input/mouse/synaptics.h linux/drivers/input/mouse/synaptics.h --- ../../linus/main/linux/drivers/input/mouse/synaptics.h Sun Jun 15 14:10:15 2003 +++ linux/drivers/input/mouse/synaptics.h Sun Jun 15 11:40:14 2003 @@ -83,8 +83,6 @@ unsigned char last_byte; /* last received byte */ int inSync; /* Packets in sync */ int proto_buf_tail; - - int old_w; /* Previous w value */ }; #endif /* _SYNAPTICS_H */ -- Peter Osterlund - petero2@telia.com http://w1.894.telia.com/~u89404340