Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Jan 2011 22:45:47 +0000 (14:45 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Jan 2011 22:45:47 +0000 (14:45 -0800)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (58 commits)
  Input: wacom_w8001 - support pen or touch only devices
  Input: wacom_w8001 - use __set_bit to set keybits
  Input: bu21013_ts - fix misuse of logical operation in place of bitop
  Input: i8042 - add Acer Aspire 5100 to the Dritek list
  Input: wacom - add support for digitizer in Lenovo W700
  Input: psmouse - disable the synaptics extension on OLPC machines
  Input: psmouse - fix up Synaptics comment
  Input: synaptics - ignore bogus mt packet
  Input: synaptics - add multi-finger and semi-mt support
  Input: synaptics - report clickpad property
  input: mt: Document interface updates
  Input: fix double equality sign in uevent
  Input: introduce device properties
  hid: egalax: Add support for Wetab (726b)
  Input: include MT library as source for kerneldoc
  MAINTAINERS: Update input-mt entry
  hid: egalax: Add support for Samsung NB30 netbook
  hid: egalax: Document the new devices in Kconfig
  hid: egalax: Add support for Wetab
  hid: egalax: Convert to MT slots
  ...

Fixed up trivial conflict in drivers/input/keyboard/Kconfig

1  2 
MAINTAINERS
drivers/hid/hid-core.c
drivers/hid/hid-egalax.c
drivers/hid/hid-ids.h
drivers/input/input.c
drivers/input/keyboard/Kconfig
drivers/input/keyboard/Makefile
drivers/input/misc/Kconfig
drivers/input/misc/Makefile
include/linux/input.h

diff --combined MAINTAINERS
@@@ -161,13 -161,14 +161,13 @@@ M:      Greg Kroah-Hartman <gregkh@suse.de
  L:    linux-serial@vger.kernel.org
  W:    http://serial.sourceforge.net
  S:    Maintained
 -T:    quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6.git
  F:    drivers/serial/8250*
  F:    include/linux/serial_8250.h
  
  8390 NETWORK DRIVERS [WD80x3/SMC-ELITE, SMC-ULTRA, NE2000, 3C503, etc.]
 -M:    Paul Gortmaker <p_gortmaker@yahoo.com>
  L:    netdev@vger.kernel.org
 -S:    Maintained
 +S:    Orphan / Obsolete
  F:    drivers/net/*8390*
  F:    drivers/net/ax88796.c
  
@@@ -404,7 -405,7 +404,7 @@@ S: Supporte
  F:    drivers/usb/gadget/amd5536udc.*
  
  AMD GEODE PROCESSOR/CHIPSET SUPPORT
 -P:    Jordan Crouse
 +P:    Andres Salomon <dilinger@queued.net>
  L:    linux-geode@lists.infradead.org (moderated for non-subscribers)
  W:    http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html
  S:    Supported
@@@ -558,14 -559,14 +558,14 @@@ W:      http://maxim.org.za/at91_26.htm
  S:    Maintained
  
  ARM/BCMRING ARM ARCHITECTURE
 -M:    Leo Chen <leochen@broadcom.com>
 +M:    Jiandong Zheng <jdzheng@broadcom.com>
  M:    Scott Branden <sbranden@broadcom.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/mach-bcmring
  
  ARM/BCMRING MTD NAND DRIVER
 -M:    Leo Chen <leochen@broadcom.com>
 +M:    Jiandong Zheng <jdzheng@broadcom.com>
  M:    Scott Branden <sbranden@broadcom.com>
  L:    linux-mtd@lists.infradead.org
  S:    Maintained
@@@ -791,14 -792,11 +791,14 @@@ S:      Maintaine
  
  ARM/NOMADIK ARCHITECTURE
  M:    Alessandro Rubini <rubini@unipv.it>
 +M:    Linus Walleij <linus.walleij@stericsson.com>
  M:    STEricsson <STEricsson_nomadik_linux@list.st.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/mach-nomadik/
  F:    arch/arm/plat-nomadik/
 +F:    drivers/i2c/busses/i2c-nomadik.c
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
  
  ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
  M:    Nelson Castillo <arhuaco@freaks-unidos.net>
@@@ -817,7 -815,7 +817,7 @@@ F: drivers/mmc/host/msm_sdcc.
  F:    drivers/mmc/host/msm_sdcc.h
  F:    drivers/serial/msm_serial.h
  F:    drivers/serial/msm_serial.c
 -T:    git git://codeaurora.org/quic/kernel/dwalker/linux-msm.git
 +T:    git git://codeaurora.org/quic/kernel/davidb/linux-msm.git
  S:    Maintained
  
  ARM/TOSA MACHINE SUPPORT
@@@ -947,7 -945,7 +947,7 @@@ M: Magnus Damm <magnus.damm@gmail.com
  L:    linux-sh@vger.kernel.org
  W:    http://oss.renesas.com
  Q:    http://patchwork.kernel.org/project/linux-sh/list/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/genesis-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git rmobile-latest
  S:    Supported
  F:    arch/arm/mach-shmobile/
  F:    drivers/sh/
@@@ -1000,24 -998,12 +1000,24 @@@ F:    drivers/i2c/busses/i2c-stu300.
  F:    drivers/rtc/rtc-coh901331.c
  F:    drivers/watchdog/coh901327_wdt.c
  F:    drivers/dma/coh901318*
 +F:    drivers/mfd/ab3100*
 +F:    drivers/rtc/rtc-ab3100.c
 +F:    drivers/rtc/rtc-coh901331.c
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
  
 -ARM/U8500 ARM ARCHITECTURE
 +ARM/Ux500 ARM ARCHITECTURE
  M:    Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
 +M:    Linus Walleij <linus.walleij@stericsson.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/mach-ux500/
 +F:    drivers/dma/ste_dma40*
 +F:    drivers/mfd/ab3550*
 +F:    drivers/mfd/abx500*
 +F:    drivers/mfd/ab8500*
 +F:    drivers/mfd/stmpe*
 +F:    drivers/rtc/rtc-ab8500.c
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-stericsson.git
  
  ARM/VFP SUPPORT
  M:    Russell King <linux@arm.linux.org.uk>
@@@ -1094,12 -1080,6 +1094,12 @@@ S:    Supporte
  F:    Documentation/aoe/
  F:    drivers/block/aoe/
  
 +ATHEROS ATH GENERIC UTILITIES
 +M:    "Luis R. Rodriguez" <lrodriguez@atheros.com>
 +L:    linux-wireless@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/wireless/ath/*
 +
  ATHEROS ATH5K WIRELESS DRIVER
  M:    Jiri Slaby <jirislaby@gmail.com>
  M:    Nick Kossifidis <mickflemm@gmail.com>
@@@ -1278,15 -1258,6 +1278,15 @@@ S:    Maintaine
  F:    drivers/video/backlight/
  F:    include/linux/backlight.h
  
 +BATMAN ADVANCED
 +M:    Marek Lindner <lindner_marek@yahoo.de>
 +M:    Simon Wunderlich <siwu@hrz.tu-chemnitz.de>
 +M:    Sven Eckelmann <sven@narfation.org>
 +L:    b.a.t.m.a.n@lists.open-mesh.org
 +W:    http://www.open-mesh.org/
 +S:    Maintained
 +F:    net/batman-adv/
 +
  BAYCOM/HDLCDRV DRIVERS FOR AX.25
  M:    Thomas Sailer <t.sailer@alumni.ethz.ch>
  L:    linux-hams@vger.kernel.org
@@@ -1388,7 -1359,7 +1388,7 @@@ F:      include/net/bluetooth
  
  BONDING DRIVER
  M:    Jay Vosburgh <fubar@us.ibm.com>
 -L:    bonding-devel@lists.sourceforge.net
 +L:    netdev@vger.kernel.org
  W:    http://sourceforge.net/projects/bonding/
  S:    Supported
  F:    drivers/net/bonding/
@@@ -1858,13 -1829,6 +1858,13 @@@ W:    http://www.chelsio.co
  S:    Supported
  F:    drivers/net/cxgb4vf/
  
 +STMMAC ETHERNET DRIVER
 +M:    Giuseppe Cavallaro <peppe.cavallaro@st.com>
 +L:    netdev@vger.kernel.org
 +W:    http://www.stlinux.com
 +S:    Supported
 +F:    drivers/net/stmmac/
 +
  CYBERPRO FB DRIVER
  M:    Russell King <linux@arm.linux.org.uk>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2044,7 -2008,6 +2044,7 @@@ F:      drivers/hwmon/dme1737.
  DOCBOOK FOR DOCUMENTATION
  M:    Randy Dunlap <rdunlap@xenotime.net>
  S:    Maintained
 +F:    scripts/kernel-doc
  
  DOCKING STATION DRIVER
  M:    Shaohua Li <shaohua.li@intel.com>
@@@ -2055,7 -2018,6 +2055,7 @@@ F:      drivers/acpi/dock.
  DOCUMENTATION
  M:    Randy Dunlap <rdunlap@xenotime.net>
  L:    linux-doc@vger.kernel.org
 +T:    quilt oss.oracle.com/~rdunlap/kernel-doc-patches/current/
  S:    Maintained
  F:    Documentation/
  
@@@ -2089,7 -2051,7 +2089,7 @@@ F:      Documentation/blockdev/drbd
  
  DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS
  M:    Greg Kroah-Hartman <gregkh@suse.de>
 -T:    quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6.git
  S:    Supported
  F:    Documentation/kobject.txt
  F:    drivers/base/
@@@ -2109,7 -2071,7 +2109,7 @@@ F:      include/drm
  
  INTEL DRM DRIVERS (excluding Poulsbo, Moorestown and derivative chipsets)
  M:    Chris Wilson <chris@chris-wilson.co.uk>
 -L:    intel-gfx@lists.freedesktop.org
 +L:    intel-gfx@lists.freedesktop.org (subscribers-only)
  L:    dri-devel@lists.freedesktop.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ickle/drm-intel.git
  S:    Supported
@@@ -2473,12 -2435,9 +2473,12 @@@ F:    drivers/net/wan/sdla.
  FRAMEBUFFER LAYER
  L:    linux-fbdev@vger.kernel.org
  W:    http://linux-fbdev.sourceforge.net/
 +Q:    http://patchwork.kernel.org/project/linux-fbdev/list/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/fbdev-2.6.git
  S:    Orphan
  F:    Documentation/fb/
 -F:    drivers/video/fb*
 +F:    drivers/video/
 +F:    include/video/
  F:    include/linux/fb.h
  
  FREESCALE DMA DRIVER
@@@ -2826,10 -2785,6 +2826,10 @@@ M:    Thomas Gleixner <tglx@linutronix.de
  S:    Maintained
  F:    Documentation/timers/
  F:    kernel/hrtimer.c
 +F:    kernel/time/clockevents.c
 +F:    kernel/time/tick*.*
 +F:    kernel/time/timer_*.c
 +F     include/linux/clockevents.h
  F:    include/linux/hrtimer.h
  
  HIGH-SPEED SCC DRIVER FOR AX.25
@@@ -3065,8 -3020,10 +3065,10 @@@ F:    drivers/input
  INPUT MULTITOUCH (MT) PROTOCOL
  M:    Henrik Rydberg <rydberg@euromail.se>
  L:    linux-input@vger.kernel.org
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/rydberg/input-mt.git
  S:    Maintained
  F:    Documentation/input/multi-touch-protocol.txt
+ F:    drivers/input/input-mt.c
  K:    \b(ABS|SYN)_MT_
  
  INTEL IDLE DRIVER
@@@ -3153,8 -3110,6 +3155,8 @@@ M:      Alex Duyck <alexander.h.duyck@intel.
  M:    John Ronciak <john.ronciak@intel.com>
  L:    e1000-devel@lists.sourceforge.net
  W:    http://e1000.sourceforge.net/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next-2.6.git
  S:    Supported
  F:    Documentation/networking/e100.txt
  F:    Documentation/networking/e1000.txt
@@@ -4099,8 -4054,9 +4101,8 @@@ F:      drivers/scsi/NCR_D700.
  
  NETEFFECT IWARP RNIC DRIVER (IW_NES)
  M:    Faisal Latif <faisal.latif@intel.com>
 -M:    Chien Tung <chien.tin.tung@intel.com>
  L:    linux-rdma@vger.kernel.org
 -W:    http://www.neteffect.com
 +W:    http://www.intel.com/Products/Server/Adapters/Server-Cluster/Server-Cluster-overview.htm
  S:    Supported
  F:    drivers/infiniband/hw/nes/
  
@@@ -4363,20 -4319,6 +4365,20 @@@ M:    Deepak Saxena <dsaxena@plexity.net
  S:    Maintained
  F:    drivers/char/hw_random/omap-rng.c
  
 +OMAP HWMOD SUPPORT
 +M:    Benoît Cousson <b-cousson@ti.com>
 +M:    Paul Walmsley <paul@pwsan.com>
 +L:    linux-omap@vger.kernel.org
 +S:    Maintained
 +F:    arch/arm/mach-omap2/omap_hwmod.c
 +F:    arch/arm/plat-omap/include/plat/omap_hwmod.h
 +
 +OMAP HWMOD DATA FOR OMAP4-BASED DEVICES
 +M:    Benoît Cousson <b-cousson@ti.com>
 +L:    linux-omap@vger.kernel.org
 +S:    Maintained
 +F:    arch/arm/mach-omap2/omap_hwmod_44xx_data.c
 +
  OMAP USB SUPPORT
  M:    Felipe Balbi <balbi@ti.com>
  M:    David Brownell <dbrownell@users.sourceforge.net>
@@@ -4639,7 -4581,7 +4641,7 @@@ F:      drivers/pcmcia
  F:    include/pcmcia/
  
  PCNET32 NETWORK DRIVER
 -M:    Don Fry <pcnet32@verizon.net>
 +M:    Don Fry <pcnet32@frontier.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/pcnet32.c
@@@ -4661,7 -4603,7 +4663,7 @@@ PERFORMANCE EVENTS SUBSYSTE
  M:    Peter Zijlstra <a.p.zijlstra@chello.nl>
  M:    Paul Mackerras <paulus@samba.org>
  M:    Ingo Molnar <mingo@elte.hu>
 -M:    Arnaldo Carvalho de Melo <acme@redhat.com>
 +M:    Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
  S:    Supported
  F:    kernel/perf_event*.c
  F:    include/linux/perf_event.h
@@@ -5086,7 -5028,7 +5088,7 @@@ L:      linux-wireless@vger.kernel.or
  W:    http://linuxwireless.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  S:    Maintained
 -F:    drivers/net/wireless/rtl818x/rtl8180*
 +F:    drivers/net/wireless/rtl818x/rtl8180/
  
  RTL8187 WIRELESS DRIVER
  M:    Herton Ronaldo Krzesinski <herton@mandriva.com.br>
@@@ -5096,17 -5038,7 +5098,17 @@@ L:    linux-wireless@vger.kernel.or
  W:    http://linuxwireless.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  S:    Maintained
 -F:    drivers/net/wireless/rtl818x/rtl8187*
 +F:    drivers/net/wireless/rtl818x/rtl8187/
 +
 +RTL8192CE WIRELESS DRIVER
 +M:    Larry Finger <Larry.Finger@lwfinger.net>
 +M:    Chaoming Li <chaoming_li@realsil.com.cn>
 +L:    linux-wireless@vger.kernel.org
 +W:    http://linuxwireless.org/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
 +S:    Maintained
 +F:    drivers/net/wireless/rtlwifi/
 +F:    drivers/net/wireless/rtlwifi/rtl8192ce/
  
  S3 SAVAGE FRAMEBUFFER DRIVER
  M:    Antonino Daplas <adaplas@gmail.com>
@@@ -5186,18 -5118,6 +5188,18 @@@ L:    alsa-devel@alsa-project.org (moderat
  S:    Supported
  F:    sound/soc/s3c24xx
  
 +TIMEKEEPING, NTP
 +M:    John Stultz <johnstul@us.ibm.com>
 +M:    Thomas Gleixner <tglx@linutronix.de>
 +S:    Supported
 +F:    include/linux/clocksource.h
 +F:    include/linux/time.h
 +F:    include/linux/timex.h
 +F:    include/linux/timekeeping.h
 +F:    kernel/time/clocksource.c
 +F:    kernel/time/time*.c
 +F:    kernel/time/ntp.c
 +
  TLG2300 VIDEO4LINUX-2 DRIVER
  M:    Huang Shijie <shijie8@gmail.com>
  M:    Kang Yong <kangyong@telegent.com>
@@@ -5758,7 -5678,7 +5760,7 @@@ S:      Maintaine
  
  STAGING SUBSYSTEM
  M:    Greg Kroah-Hartman <gregkh@suse.de>
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-next-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6.git
  L:    devel@driverdev.osuosl.org
  S:    Maintained
  F:    drivers/staging/
@@@ -5768,6 -5688,12 +5770,6 @@@ M:     Ion Badulescu <ionut@badula.org
  S:    Odd Fixes
  F:    drivers/net/starfire*
  
 -STRADIS MPEG-2 DECODER DRIVER
 -M:    Nathan Laredo <laredo@gnu.org>
 -W:    http://www.stradis.com/
 -S:    Maintained
 -F:    drivers/media/video/stradis.c
 -
  SUN3/3X
  M:    Sam Creasey <sammy@sammy.net>
  W:    http://sammy.net/sun3/
@@@ -5781,7 -5707,7 +5783,7 @@@ M:      Paul Mundt <lethal@linux-sh.org
  L:    linux-sh@vger.kernel.org
  W:    http://www.linux-sh.org
  Q:    http://patchwork.kernel.org/project/linux-sh/list/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6.git sh-latest
  S:    Supported
  F:    Documentation/sh/
  F:    arch/sh/
@@@ -5903,8 -5829,6 +5905,8 @@@ M:      Chris Metcalf <cmetcalf@tilera.com
  W:    http://www.tilera.com/scm/
  S:    Supported
  F:    arch/tile/
 +F:    drivers/char/hvc_tile.c
 +F:    drivers/net/tile/
  
  TLAN NETWORK DRIVER
  M:    Samuel Chessman <chessman@tux.org>
@@@ -5988,7 -5912,7 +5990,7 @@@ S:      Maintaine
  TTY LAYER
  M:    Greg Kroah-Hartman <gregkh@suse.de>
  S:    Maintained
 -T:    quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6.git
  F:    drivers/char/tty_*
  F:    drivers/serial/serial_core.c
  F:    include/linux/serial_core.h
@@@ -5997,6 -5921,7 +5999,6 @@@ F:      include/linux/tty.
  
  TULIP NETWORK DRIVERS
  M:    Grant Grundler <grundler@parisc-linux.org>
 -M:    Kyle McMartin <kyle@mcmartin.ca>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/tulip/
@@@ -6310,7 -6235,7 +6312,7 @@@ USB SUBSYSTE
  M:    Greg Kroah-Hartman <gregkh@suse.de>
  L:    linux-usb@vger.kernel.org
  W:    http://www.linux-usb.org
 -T:    quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6.git
  S:    Supported
  F:    Documentation/usb/
  F:    drivers/net/usb/
@@@ -6648,15 -6573,6 +6650,15 @@@ F:    include/linux/mfd/wm8400
  F:    include/sound/wm????.h
  F:    sound/soc/codecs/wm*
  
 +WORKQUEUE
 +M:    Tejun Heo <tj@kernel.org>
 +L:    linux-kernel@vger.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq.git
 +S:    Maintained
 +F:    include/linux/workqueue.h
 +F:    kernel/workqueue.c
 +F:    Documentation/workqueue.txt
 +
  X.25 NETWORK LAYER
  M:    Andrew Hendry <andrew.hendry@gmail.com>
  L:    linux-x25@vger.kernel.org
@@@ -6684,14 -6600,14 +6686,14 @@@ F:   drivers/platform/x8
  
  XEN PCI SUBSYSTEM
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
 -L:    xen-devel@lists.xensource.com
 +L:    xen-devel@lists.xensource.com (moderated for non-subscribers)
  S:    Supported
  F:    arch/x86/pci/*xen*
  F:    drivers/pci/*xen*
  
  XEN SWIOTLB SUBSYSTEM
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
 -L:    xen-devel@lists.xensource.com
 +L:    xen-devel@lists.xensource.com (moderated for non-subscribers)
  S:    Supported
  F:    arch/x86/xen/*swiotlb*
  F:    drivers/xen/*swiotlb*
  XEN HYPERVISOR INTERFACE
  M:    Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
  M:    Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
 -L:    xen-devel@lists.xen.org
 +L:    xen-devel@lists.xensource.com (moderated for non-subscribers)
  L:    virtualization@lists.osdl.org
  S:    Supported
  F:    arch/x86/xen/
diff --combined drivers/hid/hid-core.c
@@@ -1300,6 -1300,9 +1300,9 @@@ static const struct hid_device_id hid_b
        { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH2) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH3) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH4) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
        { HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
        { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651) },
        { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb653) },
        { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb65a) },
        { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) },
        { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED2, USB_DEVICE_ID_TOPSEED2_RF_COMBO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) },
@@@ -1604,7 -1606,6 +1607,7 @@@ static const struct hid_device_id hid_i
        { HID_USB_DEVICE(USB_VENDOR_ID_DEALEXTREAME, USB_DEVICE_ID_DEALEXTREAME_RADIO_SI4701) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EARTHMATE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_DREAM_CHEEKY, 0x0004) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC5UH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC4UM) },
diff --combined drivers/hid/hid-egalax.c
@@@ -2,6 -2,8 +2,8 @@@
   *  HID driver for eGalax dual-touch panels
   *
   *  Copyright (c) 2010 Stephane Chatty <chatty@enac.fr>
+  *  Copyright (c) 2010 Henrik Rydberg <rydberg@euromail.se>
+  *  Copyright (c) 2010 Canonical, Ltd.
   *
   */
  
@@@ -16,6 -18,7 +18,7 @@@
  #include <linux/hid.h>
  #include <linux/module.h>
  #include <linux/usb.h>
+ #include <linux/input/mt.h>
  #include <linux/slab.h>
  #include "usbhid/usbhid.h"
  
@@@ -25,38 -28,53 +28,53 @@@ MODULE_LICENSE("GPL")
  
  #include "hid-ids.h"
  
+ #define MAX_SLOTS             2
+ /* estimated signal-to-noise ratios */
+ #define SN_MOVE                       4096
+ #define SN_PRESSURE           32
  struct egalax_data {
-       __u16 x, y, z;
-       __u8 id;
-       bool first;             /* is this the first finger in the frame? */
-       bool valid;             /* valid finger data, or just placeholder? */
-       bool activity;          /* at least one active finger previously? */
-       __u16 lastx, lasty, lastz;      /* latest valid (x, y, z) in the frame */
+       int valid;
+       int slot;
+       int touch;
+       int x, y, z;
  };
  
+ static void set_abs(struct input_dev *input, unsigned int code,
+                   struct hid_field *field, int snratio)
+ {
+       int fmin = field->logical_minimum;
+       int fmax = field->logical_maximum;
+       int fuzz = snratio ? (fmax - fmin) / snratio : 0;
+       input_set_abs_params(input, code, fmin, fmax, fuzz, 0);
+ }
  static int egalax_input_mapping(struct hid_device *hdev, struct hid_input *hi,
                struct hid_field *field, struct hid_usage *usage,
                unsigned long **bit, int *max)
  {
+       struct input_dev *input = hi->input;
        switch (usage->hid & HID_USAGE_PAGE) {
  
        case HID_UP_GENDESK:
                switch (usage->hid) {
                case HID_GD_X:
+                       field->logical_maximum = 32760;
                        hid_map_usage(hi, usage, bit, max,
                                        EV_ABS, ABS_MT_POSITION_X);
+                       set_abs(input, ABS_MT_POSITION_X, field, SN_MOVE);
                        /* touchscreen emulation */
-                       input_set_abs_params(hi->input, ABS_X,
-                                               field->logical_minimum,
-                                               field->logical_maximum, 0, 0);
+                       set_abs(input, ABS_X, field, SN_MOVE);
                        return 1;
                case HID_GD_Y:
+                       field->logical_maximum = 32760;
                        hid_map_usage(hi, usage, bit, max,
                                        EV_ABS, ABS_MT_POSITION_Y);
+                       set_abs(input, ABS_MT_POSITION_Y, field, SN_MOVE);
                        /* touchscreen emulation */
-                       input_set_abs_params(hi->input, ABS_Y,
-                                               field->logical_minimum,
-                                               field->logical_maximum, 0, 0);
+                       set_abs(input, ABS_Y, field, SN_MOVE);
                        return 1;
                }
                return 0;
@@@ -66,6 -84,7 +84,7 @@@
                case HID_DG_TIPSWITCH:
                        /* touchscreen emulation */
                        hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
+                       input_set_capability(input, EV_KEY, BTN_TOUCH);
                        return 1;
                case HID_DG_INRANGE:
                case HID_DG_CONFIDENCE:
                case HID_DG_CONTACTMAX:
                        return -1;
                case HID_DG_CONTACTID:
-                       hid_map_usage(hi, usage, bit, max,
-                                       EV_ABS, ABS_MT_TRACKING_ID);
+                       input_mt_init_slots(input, MAX_SLOTS);
                        return 1;
                case HID_DG_TIPPRESSURE:
+                       field->logical_minimum = 0;
                        hid_map_usage(hi, usage, bit, max,
                                        EV_ABS, ABS_MT_PRESSURE);
+                       set_abs(input, ABS_MT_PRESSURE, field, SN_PRESSURE);
                        /* touchscreen emulation */
-                       input_set_abs_params(hi->input, ABS_PRESSURE,
-                                               field->logical_minimum,
-                                               field->logical_maximum, 0, 0);
+                       set_abs(input, ABS_PRESSURE, field, SN_PRESSURE);
                        return 1;
                }
                return 0;
@@@ -96,10 -114,10 +114,10 @@@ static int egalax_input_mapped(struct h
                struct hid_field *field, struct hid_usage *usage,
                unsigned long **bit, int *max)
  {
+       /* tell hid-input to skip setup of these event types */
        if (usage->type == EV_KEY || usage->type == EV_ABS)
-               clear_bit(usage->code, *bit);
-       return 0;
+               set_bit(usage->type, hi->input->evbit);
+       return -1;
  }
  
  /*
   */
  static void egalax_filter_event(struct egalax_data *td, struct input_dev *input)
  {
-       td->first = !td->first; /* touchscreen emulation */
-       if (td->valid) {
-               /* emit multitouch events */
-               input_event(input, EV_ABS, ABS_MT_TRACKING_ID, td->id);
-               input_event(input, EV_ABS, ABS_MT_POSITION_X, td->x >> 3);
-               input_event(input, EV_ABS, ABS_MT_POSITION_Y, td->y >> 3);
+       input_mt_slot(input, td->slot);
+       input_mt_report_slot_state(input, MT_TOOL_FINGER, td->touch);
+       if (td->touch) {
+               input_event(input, EV_ABS, ABS_MT_POSITION_X, td->x);
+               input_event(input, EV_ABS, ABS_MT_POSITION_Y, td->y);
                input_event(input, EV_ABS, ABS_MT_PRESSURE, td->z);
-               input_mt_sync(input);
-               /*
-                * touchscreen emulation: store (x, y) as
-                * the last valid values in this frame
-                */
-               td->lastx = td->x;
-               td->lasty = td->y;
-               td->lastz = td->z;
-       }
-       /*
-        * touchscreen emulation: if this is the second finger and at least
-        * one in this frame is valid, the latest valid in the frame is
-        * the oldest on the panel, the one we want for single touch
-        */
-       if (!td->first && td->activity) {
-               input_event(input, EV_ABS, ABS_X, td->lastx >> 3);
-               input_event(input, EV_ABS, ABS_Y, td->lasty >> 3);
-               input_event(input, EV_ABS, ABS_PRESSURE, td->lastz);
-       }
-       if (!td->valid) {
-               /*
-                * touchscreen emulation: if the first finger is invalid
-                * and there previously was finger activity, this is a release
-                */ 
-               if (td->first && td->activity) {
-                       input_event(input, EV_KEY, BTN_TOUCH, 0);
-                       td->activity = false;
-               }
-               return;
-       }
-       /* touchscreen emulation: if no previous activity, emit touch event */
-       if (!td->activity) {
-               input_event(input, EV_KEY, BTN_TOUCH, 1);
-               td->activity = true;
        }
+       input_mt_report_pointer_emulation(input, true);
  }
  
  static int egalax_event(struct hid_device *hid, struct hid_field *field,
                                struct hid_usage *usage, __s32 value)
  {
         * uses a standard parallel multitouch protocol (product ID ==
         * 48xx).  The second is capacitive and uses an unusual "serial"
         * protocol with a different message for each multitouch finger
-        * (product ID == 72xx).  We do not yet generate a correct event
-        * sequence for the capacitive/serial protocol.
+        * (product ID == 72xx).
         */
        if (hid->claimed & HID_CLAIMED_INPUT) {
                struct input_dev *input = field->hidinput->input;
  
                switch (usage->hid) {
                case HID_DG_INRANGE:
+                       td->valid = value;
+                       break;
                case HID_DG_CONFIDENCE:
                        /* avoid interference from generic hidinput handling */
                        break;
                case HID_DG_TIPSWITCH:
-                       td->valid = value;
+                       td->touch = value;
                        break;
                case HID_DG_TIPPRESSURE:
                        td->z = value;
                        break;
                case HID_DG_CONTACTID:
-                       td->id = value;
+                       td->slot = clamp_val(value, 0, MAX_SLOTS - 1);
                        break;
                case HID_GD_X:
                        td->x = value;
                case HID_GD_Y:
                        td->y = value;
                        /* this is the last field in a finger */
-                       egalax_filter_event(td, input);
+                       if (td->valid)
+                               egalax_filter_event(td, input);
                        break;
                case HID_DG_CONTACTCOUNT:
                        /* touch emulation: this is the last field in a frame */
-                       td->first = false;
                        break;
  
                default:
@@@ -221,7 -198,7 +198,7 @@@ static int egalax_probe(struct hid_devi
        struct egalax_data *td;
        struct hid_report *report;
  
 -      td = kmalloc(sizeof(struct egalax_data), GFP_KERNEL);
 +      td = kzalloc(sizeof(struct egalax_data), GFP_KERNEL);
        if (!td) {
                dev_err(&hdev->dev, "cannot allocate eGalax data\n");
                return -ENOMEM;
@@@ -261,6 -238,12 +238,12 @@@ static const struct hid_device_id egala
                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
                        USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
+                       USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH2) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
+                       USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH3) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
+                       USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH4) },
        { }
  };
  MODULE_DEVICE_TABLE(hid, egalax_devices);
diff --combined drivers/hid/hid-ids.h
  #define USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER  0x0001
  #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH  0x480d
  #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1 0x720c
+ #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH2 0x72a1
+ #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH3 0x480e
+ #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH4 0x726b
  
  #define USB_VENDOR_ID_ELECOM          0x056e
  #define USB_DEVICE_ID_ELECOM_BM084    0x0061
  
 +#define USB_VENDOR_ID_DREAM_CHEEKY    0x1d34
 +
  #define USB_VENDOR_ID_ELO             0x04E7
  #define USB_DEVICE_ID_ELO_TS2700      0x0020
  
diff --combined drivers/input/input.c
   * the Free Software Foundation.
   */
  
+ #define pr_fmt(fmt) KBUILD_BASENAME ": " fmt
  #include <linux/init.h>
  #include <linux/types.h>
- #include <linux/input.h>
+ #include <linux/input/mt.h>
  #include <linux/module.h>
  #include <linux/slab.h>
  #include <linux/random.h>
@@@ -24,6 -26,7 +26,6 @@@
  #include <linux/device.h>
  #include <linux/mutex.h>
  #include <linux/rcupdate.h>
 -#include <linux/smp_lock.h>
  #include "input-compat.h"
  
  MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
@@@ -958,10 -961,8 +960,8 @@@ static int input_attach_handler(struct 
  
        error = handler->connect(handler, dev, id);
        if (error && error != -ENODEV)
-               printk(KERN_ERR
-                       "input: failed to attach handler %s to device %s, "
-                       "error: %d\n",
-                       handler->name, kobject_name(&dev->dev.kobj), error);
+               pr_err("failed to attach handler %s to device %s, error: %d\n",
+                      handler->name, kobject_name(&dev->dev.kobj), error);
  
        return error;
  }
@@@ -1109,6 -1110,8 +1109,8 @@@ static int input_devices_seq_show(struc
                seq_printf(seq, "%s ", handle->name);
        seq_putc(seq, '\n');
  
+       input_seq_print_bitmap(seq, "PROP", dev->propbit, INPUT_PROP_MAX);
        input_seq_print_bitmap(seq, "EV", dev->evbit, EV_MAX);
        if (test_bit(EV_KEY, dev->evbit))
                input_seq_print_bitmap(seq, "KEY", dev->keybit, KEY_MAX);
@@@ -1332,11 -1335,26 +1334,26 @@@ static ssize_t input_dev_show_modalias(
  }
  static DEVICE_ATTR(modalias, S_IRUGO, input_dev_show_modalias, NULL);
  
+ static int input_print_bitmap(char *buf, int buf_size, unsigned long *bitmap,
+                             int max, int add_cr);
+ static ssize_t input_dev_show_properties(struct device *dev,
+                                        struct device_attribute *attr,
+                                        char *buf)
+ {
+       struct input_dev *input_dev = to_input_dev(dev);
+       int len = input_print_bitmap(buf, PAGE_SIZE, input_dev->propbit,
+                                    INPUT_PROP_MAX, true);
+       return min_t(int, len, PAGE_SIZE);
+ }
+ static DEVICE_ATTR(properties, S_IRUGO, input_dev_show_properties, NULL);
  static struct attribute *input_dev_attrs[] = {
        &dev_attr_name.attr,
        &dev_attr_phys.attr,
        &dev_attr_uniq.attr,
        &dev_attr_modalias.attr,
+       &dev_attr_properties.attr,
        NULL
  };
  
@@@ -1470,7 -1488,7 +1487,7 @@@ static int input_add_uevent_bm_var(stru
  {
        int len;
  
-       if (add_uevent_var(env, "%s=", name))
+       if (add_uevent_var(env, "%s", name))
                return -ENOMEM;
  
        len = input_print_bitmap(&env->buf[env->buflen - 1],
@@@ -1536,6 -1554,8 +1553,8 @@@ static int input_dev_uevent(struct devi
        if (dev->uniq)
                INPUT_ADD_HOTPLUG_VAR("UNIQ=\"%s\"", dev->uniq);
  
+       INPUT_ADD_HOTPLUG_BM_VAR("PROP=", dev->propbit, INPUT_PROP_MAX);
        INPUT_ADD_HOTPLUG_BM_VAR("EV=", dev->evbit, EV_MAX);
        if (test_bit(EV_KEY, dev->evbit))
                INPUT_ADD_HOTPLUG_BM_VAR("KEY=", dev->keybit, KEY_MAX);
@@@ -1724,52 -1744,6 +1743,6 @@@ void input_free_device(struct input_de
  }
  EXPORT_SYMBOL(input_free_device);
  
- /**
-  * input_mt_create_slots() - create MT input slots
-  * @dev: input device supporting MT events and finger tracking
-  * @num_slots: number of slots used by the device
-  *
-  * This function allocates all necessary memory for MT slot handling in the
-  * input device, and adds ABS_MT_SLOT to the device capabilities. All slots
-  * are initially marked as unused by setting ABS_MT_TRACKING_ID to -1.
-  */
- int input_mt_create_slots(struct input_dev *dev, unsigned int num_slots)
- {
-       int i;
-       if (!num_slots)
-               return 0;
-       dev->mt = kcalloc(num_slots, sizeof(struct input_mt_slot), GFP_KERNEL);
-       if (!dev->mt)
-               return -ENOMEM;
-       dev->mtsize = num_slots;
-       input_set_abs_params(dev, ABS_MT_SLOT, 0, num_slots - 1, 0, 0);
-       /* Mark slots as 'unused' */
-       for (i = 0; i < num_slots; i++)
-               dev->mt[i].abs[ABS_MT_TRACKING_ID - ABS_MT_FIRST] = -1;
-       return 0;
- }
- EXPORT_SYMBOL(input_mt_create_slots);
- /**
-  * input_mt_destroy_slots() - frees the MT slots of the input device
-  * @dev: input device with allocated MT slots
-  *
-  * This function is only needed in error path as the input core will
-  * automatically free the MT slots when the device is destroyed.
-  */
- void input_mt_destroy_slots(struct input_dev *dev)
- {
-       kfree(dev->mt);
-       dev->mt = NULL;
-       dev->mtsize = 0;
- }
- EXPORT_SYMBOL(input_mt_destroy_slots);
  /**
   * input_set_capability - mark device as capable of a certain event
   * @dev: device that is capable of emitting or accepting event
@@@ -1819,9 -1793,8 +1792,8 @@@ void input_set_capability(struct input_
                break;
  
        default:
-               printk(KERN_ERR
-                       "input_set_capability: unknown type %u (code %u)\n",
-                       type, code);
+               pr_err("input_set_capability: unknown type %u (code %u)\n",
+                      type, code);
                dump_stack();
                return;
        }
@@@ -1903,8 -1876,9 +1875,9 @@@ int input_register_device(struct input_
                return error;
  
        path = kobject_get_path(&dev->dev.kobj, GFP_KERNEL);
-       printk(KERN_INFO "input: %s as %s\n",
-               dev->name ? dev->name : "Unspecified device", path ? path : "N/A");
+       pr_info("%s as %s\n",
+               dev->name ? dev->name : "Unspecified device",
+               path ? path : "N/A");
        kfree(path);
  
        error = mutex_lock_interruptible(&input_mutex);
@@@ -2186,7 -2160,7 +2159,7 @@@ static int __init input_init(void
  
        err = class_register(&input_class);
        if (err) {
-               printk(KERN_ERR "input: unable to register input_dev class\n");
+               pr_err("unable to register input_dev class\n");
                return err;
        }
  
  
        err = register_chrdev(INPUT_MAJOR, "input", &input_fops);
        if (err) {
-               printk(KERN_ERR "input: unable to register char major %d", INPUT_MAJOR);
+               pr_err("unable to register char major %d", INPUT_MAJOR);
                goto fail2;
        }
  
@@@ -196,20 -196,22 +196,22 @@@ config KEYBOARD_GPIO_POLLE
          module will be called gpio_keys_polled.
  
  config KEYBOARD_TCA6416
-       tristate "TCA6416 Keypad Support"
+       tristate "TCA6416/TCA6408A Keypad Support"
        depends on I2C
        help
          This driver implements basic keypad functionality
-         for keys connected through TCA6416 IO expander
+         for keys connected through TCA6416/TCA6408A IO expanders.
  
          Say Y here if your device has keys connected to
-         TCA6416 IO expander. Your board-specific setup logic
+         TCA6416/TCA6408A IO expander. Your board-specific setup logic
          must also provide pin-mask details(of which TCA6416 pins
          are used for keypad).
  
-         If enabled the complete TCA6416 device will be managed through
+         If enabled the entire TCA6416 device will be managed through
          this driver.
  
+         To compile this driver as a module, choose M here: the
+         module will be called tca6416_keypad.
  
  config KEYBOARD_MATRIX
        tristate "GPIO driven matrix keypad support"
@@@ -459,16 -461,15 +461,25 @@@ config KEYBOARD_OMAP
          To compile this driver as a module, choose M here: the
          module will be called omap4-keypad.
  
+ config KEYBOARD_SPEAR
+       tristate "ST SPEAR keyboard support"
+       depends on PLAT_SPEAR
+       help
+         Say Y here if you want to use the SPEAR keyboard.
+         To compile this driver as a module, choose M here: the
+         module will be called spear-keboard.
 +config KEYBOARD_TC3589X
 +      tristate "TC3589X Keypad support"
 +      depends on MFD_TC3589X
 +      help
 +        Say Y here if you want to use the keypad controller on
 +        TC35892/3 I/O expander.
 +
 +        To compile this driver as a module, choose M here: the
 +        module will be called tc3589x-keypad.
 +
  config KEYBOARD_TNETV107X
        tristate "TI TNETV107X keypad support"
        depends on ARCH_DAVINCI_TNETV107X
@@@ -38,10 -38,10 +38,11 @@@ obj-$(CONFIG_KEYBOARD_PXA930_ROTARY)       +
  obj-$(CONFIG_KEYBOARD_QT2160)         += qt2160.o
  obj-$(CONFIG_KEYBOARD_SAMSUNG)                += samsung-keypad.o
  obj-$(CONFIG_KEYBOARD_SH_KEYSC)               += sh_keysc.o
+ obj-$(CONFIG_KEYBOARD_SPEAR)          += spear-keyboard.o
  obj-$(CONFIG_KEYBOARD_STMPE)          += stmpe-keypad.o
  obj-$(CONFIG_KEYBOARD_STOWAWAY)               += stowaway.o
  obj-$(CONFIG_KEYBOARD_SUNKBD)         += sunkbd.o
 +obj-$(CONFIG_KEYBOARD_TC3589X)                += tc3589x-keypad.o
  obj-$(CONFIG_KEYBOARD_TNETV107X)      += tnetv107x-keypad.o
  obj-$(CONFIG_KEYBOARD_TWL4030)                += twl4030_keypad.o
  obj-$(CONFIG_KEYBOARD_XTKBD)          += xtkbd.o
@@@ -294,6 -294,24 +294,6 @@@ config INPUT_SGI_BTN
          To compile this driver as a module, choose M here: the
          module will be called sgi_btns.
  
 -config INPUT_WINBOND_CIR
 -      tristate "Winbond IR remote control"
 -      depends on X86 && PNP
 -      select NEW_LEDS
 -      select LEDS_CLASS
 -      select LEDS_TRIGGERS
 -      select BITREVERSE
 -      help
 -        Say Y here if you want to use the IR remote functionality found
 -        in some Winbond SuperI/O chips. Currently only the WPCD376I
 -        chip is supported (included in some Intel Media series motherboards).
 -
 -        IR Receive and wake-on-IR from suspend and power-off is currently
 -        supported.
 -
 -        To compile this driver as a module, choose M here: the module will be
 -        called winbond_cir.
 -
  config HP_SDC_RTC
        tristate "HP SDC Real Time Clock"
        depends on (GSC || HP300) && SERIO
@@@ -430,4 -448,28 +430,28 @@@ config INPUT_ADXL34X_SP
          To compile this driver as a module, choose M here: the
          module will be called adxl34x-spi.
  
+ config INPUT_CMA3000
+       tristate "VTI CMA3000 Tri-axis accelerometer"
+       help
+         Say Y here if you want to use VTI CMA3000_D0x Accelerometer
+         driver
+         This driver currently only supports I2C interface to the
+         controller. Also select the I2C method.
+         If unsure, say N
+         To compile this driver as a module, choose M here: the
+         module will be called cma3000_d0x.
+ config INPUT_CMA3000_I2C
+       tristate "Support I2C bus connection"
+       depends on INPUT_CMA3000 && I2C
+       help
+         Say Y here if you want to use VTI CMA3000_D0x Accelerometer
+         through I2C interface.
+         To compile this driver as a module, choose M here: the
+         module will be called cma3000_d0x_i2c.
  endif
@@@ -18,6 -18,8 +18,8 @@@ obj-$(CONFIG_INPUT_ATI_REMOTE2)               += ati
  obj-$(CONFIG_INPUT_ATLAS_BTNS)                += atlas_btns.o
  obj-$(CONFIG_INPUT_BFIN_ROTARY)               += bfin_rotary.o
  obj-$(CONFIG_INPUT_CM109)             += cm109.o
+ obj-$(CONFIG_INPUT_CMA3000)           += cma3000_d0x.o
+ obj-$(CONFIG_INPUT_CMA3000_I2C)               += cma3000_d0x_i2c.o
  obj-$(CONFIG_INPUT_COBALT_BTNS)               += cobalt_btns.o
  obj-$(CONFIG_INPUT_DM355EVM)          += dm355evm_keys.o
  obj-$(CONFIG_HP_SDC_RTC)              += hp_sdc_rtc.o
@@@ -38,6 -40,7 +40,6 @@@ obj-$(CONFIG_INPUT_SPARCSPKR)         += sparc
  obj-$(CONFIG_INPUT_TWL4030_PWRBUTTON) += twl4030-pwrbutton.o
  obj-$(CONFIG_INPUT_TWL4030_VIBRA)     += twl4030-vibra.o
  obj-$(CONFIG_INPUT_UINPUT)            += uinput.o
 -obj-$(CONFIG_INPUT_WINBOND_CIR)               += winbond-cir.o
  obj-$(CONFIG_INPUT_WISTRON_BTNS)      += wistron_btns.o
  obj-$(CONFIG_INPUT_WM831X_ON)         += wm831x-on.o
  obj-$(CONFIG_INPUT_YEALINK)           += yealink.o
diff --combined include/linux/input.h
@@@ -112,6 -112,7 +112,7 @@@ struct input_keymap_entry 
  #define EVIOCGNAME(len)               _IOC(_IOC_READ, 'E', 0x06, len)         /* get device name */
  #define EVIOCGPHYS(len)               _IOC(_IOC_READ, 'E', 0x07, len)         /* get physical location */
  #define EVIOCGUNIQ(len)               _IOC(_IOC_READ, 'E', 0x08, len)         /* get unique identifier */
+ #define EVIOCGPROP(len)               _IOC(_IOC_READ, 'E', 0x09, len)         /* get device properties */
  
  #define EVIOCGKEY(len)                _IOC(_IOC_READ, 'E', 0x18, len)         /* get global key state */
  #define EVIOCGLED(len)                _IOC(_IOC_READ, 'E', 0x19, len)         /* get all LEDs */
  
  #define EVIOCGRAB             _IOW('E', 0x90, int)                    /* Grab/Release device */
  
+ /*
+  * Device properties and quirks
+  */
+ #define INPUT_PROP_POINTER            0x00    /* needs a pointer */
+ #define INPUT_PROP_DIRECT             0x01    /* direct input devices */
+ #define INPUT_PROP_BUTTONPAD          0x02    /* has button(s) under pad */
+ #define INPUT_PROP_SEMI_MT            0x03    /* touch rectangle only */
+ #define INPUT_PROP_MAX                        0x1f
+ #define INPUT_PROP_CNT                        (INPUT_PROP_MAX + 1)
  /*
   * Event types
   */
  #define KEY_FRAMEFORWARD      0x1b5
  #define KEY_CONTEXT_MENU      0x1b6   /* GenDesc - system context menu */
  #define KEY_MEDIA_REPEAT      0x1b7   /* Consumer - transport control */
 +#define KEY_10CHANNELSUP        0x1b8   /* 10 channels up (10+) */
 +#define KEY_10CHANNELSDOWN      0x1b9   /* 10 channels down (10-) */
  
  #define KEY_DEL_EOL           0x1c0
  #define KEY_DEL_EOS           0x1c1
  #define ABS_MT_BLOB_ID                0x38    /* Group a set of packets as a blob */
  #define ABS_MT_TRACKING_ID    0x39    /* Unique ID of initiated contact */
  #define ABS_MT_PRESSURE               0x3a    /* Pressure on contact area */
+ #define ABS_MT_DISTANCE               0x3b    /* Contact hover distance */
  
  #ifdef __KERNEL__
  /* Implementation details, userspace should not care about these */
  #define ABS_MT_FIRST          ABS_MT_TOUCH_MAJOR
- #define ABS_MT_LAST           ABS_MT_PRESSURE
+ #define ABS_MT_LAST           ABS_MT_DISTANCE
  #endif
  
  #define ABS_MAX                       0x3f
   */
  #define MT_TOOL_FINGER                0
  #define MT_TOOL_PEN           1
+ #define MT_TOOL_MAX           1
  
  /*
   * Values describing the status of a force-feedback effect
@@@ -1109,20 -1122,13 +1124,13 @@@ struct ff_effect 
  #include <linux/timer.h>
  #include <linux/mod_devicetable.h>
  
- /**
-  * struct input_mt_slot - represents the state of an input MT slot
-  * @abs: holds current values of ABS_MT axes for this slot
-  */
- struct input_mt_slot {
-       int abs[ABS_MT_LAST - ABS_MT_FIRST + 1];
- };
  /**
   * struct input_dev - represents an input device
   * @name: name of the device
   * @phys: physical path to the device in the system hierarchy
   * @uniq: unique identification code for the device (if device has it)
   * @id: id of the device (struct input_id)
+  * @propbit: bitmap of device properties and quirks
   * @evbit: bitmap of types of events supported by the device (EV_KEY,
   *    EV_REL, etc.)
   * @keybit: bitmap of keys/buttons this device has
   *    of tracked contacts
   * @mtsize: number of MT slots the device uses
   * @slot: MT slot currently being transmitted
+  * @trkid: stores MT tracking ID for the current contact
   * @absinfo: array of &struct input_absinfo elements holding information
   *    about absolute axes (current value, min, max, flat, fuzz,
   *    resolution)
@@@ -1205,6 -1212,8 +1214,8 @@@ struct input_dev 
        const char *uniq;
        struct input_id id;
  
+       unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)];
        unsigned long evbit[BITS_TO_LONGS(EV_CNT)];
        unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];
        unsigned long relbit[BITS_TO_LONGS(REL_CNT)];
        struct input_mt_slot *mt;
        int mtsize;
        int slot;
+       int trkid;
  
        struct input_absinfo *absinfo;
  
@@@ -1490,11 -1500,6 +1502,6 @@@ static inline void input_mt_sync(struc
        input_event(dev, EV_SYN, SYN_MT_REPORT, 0);
  }
  
- static inline void input_mt_slot(struct input_dev *dev, int slot)
- {
-       input_event(dev, EV_ABS, ABS_MT_SLOT, slot);
- }
  void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code);
  
  /**
@@@ -1607,8 -1612,5 +1614,5 @@@ int input_ff_erase(struct input_dev *de
  int input_ff_create_memless(struct input_dev *dev, void *data,
                int (*play_effect)(struct input_dev *, void *, struct ff_effect *));
  
- int input_mt_create_slots(struct input_dev *dev, unsigned int num_slots);
- void input_mt_destroy_slots(struct input_dev *dev);
  #endif
  #endif