linux/drivers/input
Daniel Kurtz 48064bdcd6 Input: synaptics - fix 1->3 contact transition reporting
Investigating the following gesture highlighted two slight implementation
errors with choosing which slots to report in which slot when multiple
contacts are present:

Action                 SGM  AGM (MTB slot:Contact)
1. Touch contact 0    (0:0)
2. Touch contact 1    (0:0, 1:1)
3. Lift  contact 0    (1:1)
4. Touch contacts 2,3 (0:2, 1:3)

In step 4, slot 1 was not being cleared first, which means the same
tracking ID was being used for reporting both the old contact 1 and the
new contact 3.  This could result in "drumroll", where the old contact 1
would appear to suddenly jump to new finger 3 position.

Similarly, if contacts 2 & 3 are not detected at the same sample, step 4
is split into two:

Action                SGM  AGM  (MTB slot:contact)
1. Touch contact 0   (0:0)
2. Touch contact 1   (0:0, 1:1)
3. Lift  contact 0   (1:1)
4. Touch contact 2   (0:2, 1:1)
5. Touch contact 3   (0:2, 1:3)

In this case, there was also a bug.  In step 4, when contact 1 moves from
SGM to AGM and contact 2 is first reported in SGM, slot 0 was actually
empty.  So slot 0 can be used to report the new SGM (contact 0),
immediately.  Since it was empty, contact 2 in slot 0 will get a new
tracking ID.

Signed-off-by: Daniel Kurtz <djkurtz@chromium.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
2013-02-13 20:21:12 -08:00
..
gameport Input: remove use of __devexit 2012-11-24 00:05:38 -08:00
joystick Input: walkera0701 - claim parport when opening the device 2013-01-21 17:32:01 -08:00
keyboard Input: add couple of missing GENERIC_HARDIRQS dependencies 2013-02-13 20:21:07 -08:00
misc Input: twl6040-vibra - use system workqueue 2013-01-25 00:06:53 -08:00
mouse Input: synaptics - fix 1->3 contact transition reporting 2013-02-13 20:21:12 -08:00
serio Input: add couple of missing GENERIC_HARDIRQS dependencies 2013-02-13 20:21:07 -08:00
tablet Input: wacom - use new input-mt routines 2013-01-06 01:11:02 -08:00
touchscreen Input: add couple of missing GENERIC_HARDIRQS dependencies 2013-02-13 20:21:07 -08:00
apm-power.c Input: random formatting fixes 2012-08-21 22:29:49 -07:00
evbug.c Input: use pr_fmt and pr_<level> 2010-11-30 23:10:26 -08:00
evdev.c Input: fix use-after-free introduced with dynamic minor changes 2012-10-22 08:50:37 +03:00
ff-core.c Input: random formatting fixes 2012-08-21 22:29:49 -07:00
ff-memless.c Input: random formatting fixes 2012-08-21 22:29:49 -07:00
input-compat.c compat: Use COMPAT_USE_64BIT_TIME in the input subsystem 2012-02-20 12:48:47 -08:00
input-compat.h compat: Use COMPAT_USE_64BIT_TIME in the input subsystem 2012-02-20 12:48:47 -08:00
input-mt.c Merge branch 'for-linus' into next 2012-11-24 00:02:54 -08:00
input-polldev.c Merge commit 'v3.2-rc3' into next 2011-11-29 01:51:07 -08:00
input.c Input: introduce managed input devices (add devres support) 2012-11-08 09:10:05 -08:00
joydev.c Input: fix use-after-free introduced with dynamic minor changes 2012-10-22 08:50:37 +03:00
Kconfig Input: add couple of missing GENERIC_HARDIRQS dependencies 2013-02-13 20:21:07 -08:00
Makefile Input: matrix-keymap - uninline and prepare for device tree support 2012-05-10 22:38:47 -07:00
matrix-keymap.c Input: marix-keymap - automatically allocate memory for keymap 2012-11-14 08:35:07 -08:00
mousedev.c Input: mousedev - move /dev/input/mice to the correct minor 2012-11-18 23:15:16 -08:00
sparse-keymap.c Input: random formatting fixes 2012-08-21 22:29:49 -07:00