Merge commit 'v3.3-rc6' into next
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 9 Mar 2012 18:55:17 +0000 (10:55 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 9 Mar 2012 18:55:17 +0000 (10:55 -0800)
14 files changed:
1  2 
MAINTAINERS
drivers/hid/hid-core.c
drivers/hid/hid-ids.h
drivers/input/evdev.c
drivers/input/keyboard/nomadik-ske-keypad.c
drivers/input/keyboard/samsung-keypad.c
drivers/input/mouse/psmouse-base.c
drivers/input/mouse/sentelic.c
drivers/input/serio/at32psif.c
drivers/input/tablet/wacom_sys.c
drivers/input/tablet/wacom_wac.c
drivers/input/touchscreen/atmel-wm97xx.c
drivers/input/touchscreen/usbtouchscreen.c
kernel/time/timekeeping.c

diff --combined MAINTAINERS
@@@ -159,7 -159,7 +159,7 @@@ S: Maintaine
  F:    drivers/net/ethernet/realtek/r8169.c
  
  8250/16?50 (AND CLONE UARTS) SERIAL DRIVER
- M:    Greg Kroah-Hartman <gregkh@suse.de>
+ M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  L:    linux-serial@vger.kernel.org
  W:    http://serial.sourceforge.net
  S:    Maintained
@@@ -184,11 -184,6 +184,6 @@@ S:        Maintaine
  F:    Documentation/filesystems/9p.txt
  F:    fs/9p/
  
- A2232 SERIAL BOARD DRIVER
- L:    linux-m68k@lists.linux-m68k.org
- S:    Orphan
- F:    drivers/staging/generic_serial/ser_a2232*
  AACRAID SCSI RAID DRIVER
  M:    Adaptec OEM Raid Solutions <aacraid@adaptec.com>
  L:    linux-scsi@vger.kernel.org
@@@ -274,7 -269,6 +269,6 @@@ S: Orpha
  F:    drivers/platform/x86/wmi.c
  
  AD1889 ALSA SOUND DRIVER
- M:    Kyle McMartin <kyle@mcmartin.ca>
  M:    Thibaut Varene <T-Bone@parisc-linux.org>
  W:    http://wiki.parisc-linux.org/AD1889
  L:    linux-parisc@vger.kernel.org
@@@ -347,7 -341,7 +341,7 @@@ S: Supporte
  F:    drivers/mfd/adp5520.c
  F:    drivers/video/backlight/adp5520_bl.c
  F:    drivers/leds/leds-adp5520.c
- F:    drivers/gpio/adp5520-gpio.c
+ F:    drivers/gpio/gpio-adp5520.c
  F:    drivers/input/keyboard/adp5520-keys.c
  
  ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587)
@@@ -356,7 -350,7 +350,7 @@@ L: device-drivers-devel@blackfin.uclinu
  W:    http://wiki.analog.com/ADP5588
  S:    Supported
  F:    drivers/input/keyboard/adp5588-keys.c
- F:    drivers/gpio/adp5588-gpio.c
+ F:    drivers/gpio/gpio-adp5588.c
  
  ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863)
  M:    Michael Hennerich <michael.hennerich@analog.com>
@@@ -511,8 -505,8 +505,8 @@@ M: Joerg Roedel <joerg.roedel@amd.com
  L:    iommu@lists.linux-foundation.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git
  S:    Supported
- F:    arch/x86/kernel/amd_iommu*.c
- F:    arch/x86/include/asm/amd_iommu*.h
+ F:    drivers/iommu/amd_iommu*.[ch]
+ F:    include/linux/amd-iommu.h
  
  AMD MICROCODE UPDATE SUPPORT
  M:    Andreas Herrmann <andreas.herrmann3@amd.com>
@@@ -542,6 -536,7 +536,7 @@@ F: sound/soc/codecs/adau
  F:    sound/soc/codecs/adav*
  F:    sound/soc/codecs/ad1*
  F:    sound/soc/codecs/ssm*
+ F:    sound/soc/codecs/sigmadsp.*
  
  ANALOG DEVICES INC ASOC DRIVERS
  L:    uclinux-dist-devel@blackfin.uclinux.org
@@@ -749,6 -744,7 +744,7 @@@ M: Barry Song <baohua.song@csr.com
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  F:    arch/arm/mach-prima2/
+ F:    drivers/dma/sirf-dma*
  
  ARM/EBSA110 MACHINE SUPPORT
  M:    Russell King <linux@arm.linux.org.uk>
@@@ -789,20 -785,22 +785,22 @@@ L:      linux-arm-kernel@lists.infradead.or
  S:    Maintained
  T:    git git://git.pengutronix.de/git/imx/linux-2.6.git
  F:    arch/arm/mach-mx*/
+ F:    arch/arm/mach-imx/
  F:    arch/arm/plat-mxc/
  
- ARM/FREESCALE IMX51
- M:    Amit Kucheria <amit.kucheria@canonical.com>
+ ARM/FREESCALE IMX6
+ M:    Shawn Guo <shawn.guo@linaro.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
- F:    arch/arm/mach-mx5/
+ T:    git git://git.linaro.org/people/shawnguo/linux-2.6.git
+ F:    arch/arm/mach-imx/*imx6*
  
- ARM/FREESCALE IMX6
+ ARM/FREESCALE MXS ARM ARCHITECTURE
  M:    Shawn Guo <shawn.guo@linaro.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  T:    git git://git.linaro.org/people/shawnguo/linux-2.6.git
- F:    arch/arm/mach-imx/*imx6*
+ F:    arch/arm/mach-mxs/
  
  ARM/GLOMATION GESBC9312SX MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
@@@ -911,7 -909,6 +909,6 @@@ M: Lennert Buytenhek <kernel@wantstofly
  M:    Nicolas Pitre <nico@fluxnic.net>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Odd Fixes
- F:    arch/arm/mach-loki/
  F:    arch/arm/mach-kirkwood/
  F:    arch/arm/mach-mv78xx0/
  F:    arch/arm/mach-orion5x/
@@@ -1046,35 -1043,18 +1043,18 @@@ ARM/SAMSUNG ARM ARCHITECTURE
  M:    Ben Dooks <ben-linux@fluff.org>
  M:    Kukjin Kim <kgene.kim@samsung.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+ L:    linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
  W:    http://www.fluff.org/ben/linux/
  S:    Maintained
  F:    arch/arm/plat-samsung/
  F:    arch/arm/plat-s3c24xx/
  F:    arch/arm/plat-s5p/
+ F:    arch/arm/mach-s3c24*/
+ F:    arch/arm/mach-s3c64xx/
  F:    drivers/*/*s3c2410*
  F:    drivers/*/*/*s3c2410*
- ARM/S3C2410 ARM ARCHITECTURE
- M:    Ben Dooks <ben-linux@fluff.org>
- L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
- W:    http://www.fluff.org/ben/linux/
- S:    Maintained
- F:    arch/arm/mach-s3c2410/
- ARM/S3C244x ARM ARCHITECTURE
- M:    Ben Dooks <ben-linux@fluff.org>
- L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
- W:    http://www.fluff.org/ben/linux/
- S:    Maintained
- F:    arch/arm/mach-s3c2440/
- F:    arch/arm/mach-s3c2443/
- ARM/S3C64xx ARM ARCHITECTURE
- M:    Ben Dooks <ben-linux@fluff.org>
- L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
- W:    http://www.fluff.org/ben/linux/
- S:    Maintained
- F:    arch/arm/mach-s3c64xx/
+ F:    drivers/spi/spi-s3c*
+ F:    sound/soc/samsung/*
  
  ARM/S5P EXYNOS ARM ARCHITECTURES
  M:    Kukjin Kim <kgene.kim@samsung.com>
@@@ -1090,8 -1070,8 +1070,8 @@@ L:      linux-arm-kernel@lists.infradead.or
  S:    Maintained
  F:    arch/arm/mach-s5pv210/mach-aquila.c
  F:    arch/arm/mach-s5pv210/mach-goni.c
- F:    arch/arm/mach-exynos4/mach-universal_c210.c
- F:    arch/arm/mach-exynos4/mach-nuri.c
+ F:    arch/arm/mach-exynos/mach-universal_c210.c
+ F:    arch/arm/mach-exynos/mach-nuri.c
  
  ARM/SAMSUNG S5P SERIES FIMC SUPPORT
  M:    Kyungmin Park <kyungmin.park@samsung.com>
@@@ -1119,7 -1099,6 +1099,6 @@@ M:      Tomasz Stanislawski <t.stanislaws@sa
  L:    linux-arm-kernel@lists.infradead.org
  L:    linux-media@vger.kernel.org
  S:    Maintained
- F:    arch/arm/plat-s5p/dev-tv.c
  F:    drivers/media/video/s5p-tv/
  
  ARM/SHMOBILE ARM ARCHITECTURE
@@@ -1133,13 -1112,6 +1112,6 @@@ S:     Supporte
  F:    arch/arm/mach-shmobile/
  F:    drivers/sh/
  
- ARM/TELECHIPS ARM ARCHITECTURE
- M:    "Hans J. Koch" <hjk@hansjkoch.de>
- L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
- S:    Maintained
- F:    arch/arm/plat-tcc/
- F:    arch/arm/mach-tcc8k/
  ARM/TECHNOLOGIC SYSTEMS TS7250 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -1161,14 -1133,13 +1133,13 @@@ L:   linux-arm-kernel@lists.infradead.or
  W:    http://www.mcuos.com
  S:    Maintained
  F:    arch/arm/mach-w90x900/
- F:    arch/arm/mach-nuc93x/
  F:    drivers/input/keyboard/w90p910_keypad.c
  F:    drivers/input/touchscreen/w90p910_ts.c
  F:    drivers/watchdog/nuc900_wdt.c
  F:    drivers/net/ethernet/nuvoton/w90p910_ether.c
  F:    drivers/mtd/nand/nuc900_nand.c
  F:    drivers/rtc/rtc-nuc900.c
- F:    drivers/spi/spi_nuc900.c
+ F:    drivers/spi/spi-nuc900.c
  F:    drivers/usb/host/ehci-w90x900.c
  F:    drivers/video/nuc900fb.c
  
@@@ -1193,7 -1164,6 +1164,6 @@@ L:      linux-arm-kernel@lists.infradead.or
  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*
@@@ -1373,7 -1343,7 +1343,7 @@@ F:      drivers/net/ethernet/cadence
  ATMEL SPI DRIVER
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
  S:    Supported
- F:    drivers/spi/atmel_spi.*
+ F:    drivers/spi/spi-atmel.*
  
  ATMEL USBA UDC DRIVER
  M:    Nicolas Ferre <nicolas.ferre@atmel.com>
@@@ -1435,6 -1405,7 +1405,7 @@@ F:      net/ax25
  B43 WIRELESS DRIVER
  M:    Stefano Brivio <stefano.brivio@polimi.it>
  L:    linux-wireless@vger.kernel.org
+ L:    b43-dev@lists.infradead.org (moderated for non-subscribers)
  W:    http://linuxwireless.org/en/users/Drivers/b43
  S:    Maintained
  F:    drivers/net/wireless/b43/
@@@ -1512,7 -1483,7 +1483,7 @@@ M:      Sonic Zhang <sonic.zhang@analog.com
  L:    uclinux-dist-devel@blackfin.uclinux.org
  W:    http://blackfin.uclinux.org
  S:    Supported
- F:    drivers/tty/serial/bfin_5xx.c
+ F:    drivers/tty/serial/bfin_uart.c
  
  BLACKFIN WATCHDOG DRIVER
  M:    Mike Frysinger <vapier.adi@gmail.com>
@@@ -1603,7 -1574,7 +1574,7 @@@ M:      Franky (Zhenhui) Lin <frankyl@broadc
  M:    Kan Yan <kanyan@broadcom.com>
  L:    linux-wireless@vger.kernel.org
  S:    Supported
- F:    drivers/staging/brcm80211/
+ F:    drivers/net/wireless/brcm80211/
  
  BROADCOM BNX2FC 10 GIGABIT FCOE DRIVER
  M:    Bhanu Prakash Gollapudi <bprakash@broadcom.com>
@@@ -1611,6 -1582,13 +1582,13 @@@ L:    linux-scsi@vger.kernel.or
  S:    Supported
  F:    drivers/scsi/bnx2fc/
  
+ BROADCOM SPECIFIC AMBA DRIVER (BCMA)
+ M:    RafaÅ‚ MiÅ‚ecki <zajec5@gmail.com>
+ L:    linux-wireless@vger.kernel.org
+ S:    Maintained
+ F:    drivers/bcma/
+ F:    include/linux/bcma/
  BROCADE BFA FC SCSI DRIVER
  M:    Jing Huang <huangj@brocade.com>
  L:    linux-scsi@vger.kernel.org
@@@ -1642,7 -1620,7 +1620,7 @@@ BT8XXGPIO DRIVE
  M:    Michael Buesch <m@bues.ch>
  W:    http://bu3sch.de/btgpio.php
  S:    Maintained
- F:    drivers/gpio/bt8xxgpio.c
+ F:    drivers/gpio/gpio-bt8xx.c
  
  BTRFS FILE SYSTEM
  M:    Chris Mason <chris.mason@oracle.com>
@@@ -1670,6 -1648,14 +1648,14 @@@ T:    git git://git.alsa-project.org/alsa-
  S:    Maintained
  F:    sound/pci/oxygen/
  
+ C6X ARCHITECTURE
+ M:    Mark Salter <msalter@redhat.com>
+ M:    Aurelien Jacquiot <a-jacquiot@ti.com>
+ L:    linux-c6x-dev@linux-c6x.org
+ W:    http://www.linux-c6x.org/wiki/index.php/Main_Page
+ S:    Maintained
+ F:    arch/c6x/
  CACHEFILES: FS-CACHE BACKEND FOR CACHING ON MOUNTED FILESYSTEMS
  M:    David Howells <dhowells@redhat.com>
  L:    linux-cachefs@redhat.com
@@@ -1683,7 -1669,7 +1669,7 @@@ L:      linux-media@vger.kernel.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
  S:    Maintained
  F:    Documentation/video4linux/cafe_ccic
- F:    drivers/media/video/cafe_ccic*
+ F:    drivers/media/video/marvell-ccic/
  
  CAIF NETWORK LAYER
  M:    Sjur Braendeland <sjur.brandeland@stericsson.com>
@@@ -1707,11 -1693,9 +1693,9 @@@ F:     arch/x86/include/asm/tce.
  
  CAN NETWORK LAYER
  M:    Oliver Hartkopp <socketcan@hartkopp.net>
- M:    Oliver Hartkopp <oliver.hartkopp@volkswagen.de>
- M:    Urs Thuermann <urs.thuermann@volkswagen.de>
  L:    linux-can@vger.kernel.org
- L:    netdev@vger.kernel.org
- W:    http://developer.berlios.de/projects/socketcan/
+ W:    http://gitorious.org/linux-can
+ T:    git git://gitorious.org/linux-can/linux-can-next.git
  S:    Maintained
  F:    net/can/
  F:    include/linux/can.h
@@@ -1722,9 -1706,10 +1706,10 @@@ F:    include/linux/can/gw.
  
  CAN NETWORK DRIVERS
  M:    Wolfgang Grandegger <wg@grandegger.com>
+ M:    Marc Kleine-Budde <mkl@pengutronix.de>
  L:    linux-can@vger.kernel.org
- L:    netdev@vger.kernel.org
- W:    http://developer.berlios.de/projects/socketcan/
+ W:    http://gitorious.org/linux-can
+ T:    git git://gitorious.org/linux-can/linux-can-next.git
  S:    Maintained
  F:    drivers/net/can/
  F:    include/linux/can/dev.h
@@@ -1791,9 -1776,9 +1776,9 @@@ X:      net/wireless/wext
  
  CHAR and MISC DRIVERS
  M:    Arnd Bergmann <arnd@arndb.de>
- M:    Greg Kroah-Hartman <greg@kroah.com>
+ M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
- S:    Maintained
+ S:    Supported
  F:    drivers/char/*
  F:    drivers/misc/*
  
@@@ -1908,12 -1893,6 +1893,6 @@@ L:     platform-driver-x86@vger.kernel.or
  S:    Maintained
  F:    drivers/platform/x86/compal-laptop.c
  
- COMPUTONE INTELLIPORT MULTIPORT CARD
- W:    http://www.wittsend.com/computone.html
- S:    Orphan
- F:    Documentation/serial/computone.txt
- F:    drivers/staging/tty/ip2/
  CONEXANT ACCESSRUNNER USB DRIVER
  M:    Simon Arlott <cxacru@fire.lp0.eu>
  L:    accessrunner-general@lists.sourceforge.net
@@@ -2110,13 -2089,6 +2089,13 @@@ W:    http://www.cyclades.com
  S:    Orphan
  F:    drivers/net/wan/pc300*
  
 +CYTTSP TOUCHSCREEN DRIVER
 +M:      Javier Martinez Canillas <javier@dowhile0.org>
 +L:      linux-input@vger.kernel.org
 +S:      Maintained
 +F:      drivers/input/touchscreen/cyttsp*
 +F:      include/linux/input/cyttsp.h
 +
  DAMA SLAVE for AX.25
  M:    Joerg Reuter <jreuter@yaina.de>
  W:    http://yaina.de/jreuter/
@@@ -2135,7 -2107,7 +2114,7 @@@ DAVICOM FAST ETHERNET (DMFE) NETWORK DR
  L:    netdev@vger.kernel.org
  S:    Orphan
  F:    Documentation/networking/dmfe.txt
- F:    drivers/net/ethernet/tulip/dmfe.c
+ F:    drivers/net/ethernet/dec/tulip/dmfe.c
  
  DC390/AM53C974 SCSI driver
  M:    Kurt Garloff <garloff@suse.de>
@@@ -2208,6 -2180,13 +2187,13 @@@ T:    git git://git.kernel.org/pub/scm/lin
  S:    Maintained
  F:    drivers/usb/dwc3/
  
+ DEVICE FREQUENCY (DEVFREQ)
+ M:    MyungJoo Ham <myungjoo.ham@samsung.com>
+ M:    Kyungmin Park <kyungmin.park@samsung.com>
+ L:    linux-kernel@vger.kernel.org
+ S:    Maintained
+ F:    drivers/devfreq/
  DEVICE NUMBER REGISTRY
  M:    Torben Mathiasen <device@lanana.org>
  W:    http://lanana.org/docs/device-list/index.html
@@@ -2224,15 -2203,6 +2210,6 @@@ F:     drivers/md/dm
  F:    include/linux/device-mapper.h
  F:    include/linux/dm-*.h
  
- DIGI INTL. EPCA DRIVER
- M:    "Digi International, Inc" <Eng.Linux@digi.com>
- L:    Eng.Linux@digi.com
- W:    http://www.digi.com
- S:    Orphan
- F:    Documentation/serial/digiepca.txt
- F:    drivers/staging/tty/epca*
- F:    drivers/staging/tty/digi*
  DIOLAN U2C-12 I2C DRIVER
  M:    Guenter Roeck <guenter.roeck@ericsson.com>
  L:    linux-i2c@vger.kernel.org
@@@ -2269,6 -2239,17 +2246,17 @@@ T:    git git://git.kernel.org/pub/scm/lin
  S:    Supported
  F:    fs/dlm/
  
+ DMA BUFFER SHARING FRAMEWORK
+ M:    Sumit Semwal <sumit.semwal@linaro.org>
+ S:    Maintained
+ L:    linux-media@vger.kernel.org
+ L:    dri-devel@lists.freedesktop.org
+ L:    linaro-mm-sig@lists.linaro.org
+ F:    drivers/base/dma-buf*
+ F:    include/linux/dma-buf*
+ F:    Documentation/dma-buf-sharing.txt
+ T:    git git://git.linaro.org/people/sumitsemwal/linux-dma-buf.git
  DMA GENERIC OFFLOAD ENGINE SUBSYSTEM
  M:    Vinod Koul <vinod.koul@intel.com>
  M:    Dan Williams <dan.j.williams@intel.com>
@@@ -2299,7 -2280,7 +2287,7 @@@ F:      drivers/acpi/dock.
  DOCUMENTATION
  M:    Randy Dunlap <rdunlap@xenotime.net>
  L:    linux-doc@vger.kernel.org
- T:    quilt http://userweb.kernel.org/~rdunlap/kernel-doc-patches/current/
+ T:    quilt http://xenotime.net/kernel-doc-patches/current/
  S:    Maintained
  F:    Documentation/
  
@@@ -2332,7 -2313,7 +2320,7 @@@ F:      lib/lru_cache.
  F:    Documentation/blockdev/drbd/
  
  DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS
- M:    Greg Kroah-Hartman <gregkh@suse.de>
+ M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6.git
  S:    Supported
  F:    Documentation/kobject.txt
@@@ -2362,6 -2343,9 +2350,9 @@@ F:      include/drm/i915
  
  DRM DRIVERS FOR EXYNOS
  M:    Inki Dae <inki.dae@samsung.com>
+ M:    Joonyoung Shim <jy0922.shim@samsung.com>
+ M:    Seung-Woo Kim <sw0312.kim@samsung.com>
+ M:    Kyungmin Park <kyungmin.park@samsung.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Supported
  F:    drivers/gpu/drm/exynos
@@@ -2414,7 -2398,7 +2405,7 @@@ F:      net/bridge/netfilter/ebt*.
  
  ECRYPT FILE SYSTEM
  M:    Tyler Hicks <tyhicks@canonical.com>
- M:    Dustin Kirkland <kirkland@canonical.com>
+ M:    Dustin Kirkland <dustin.kirkland@gazzang.com>
  L:    ecryptfs@vger.kernel.org
  W:    https://launchpad.net/ecryptfs
  S:    Supported
@@@ -2716,7 -2700,7 +2707,7 @@@ FIREWIRE SUBSYSTE
  M:    Stefan Richter <stefanr@s5r6.in-berlin.de>
  L:    linux1394-devel@lists.sourceforge.net
  W:    http://ieee1394.wiki.kernel.org/
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394.git
  S:    Maintained
  F:    drivers/firewire/
  F:    include/linux/firewire*.h
@@@ -2853,6 -2837,14 +2844,14 @@@ L:    platform-driver-x86@vger.kernel.or
  S:    Maintained
  F:    drivers/platform/x86/fujitsu-laptop.c
  
+ FUJITSU M-5MO LS CAMERA ISP DRIVER
+ M:    Kyungmin Park <kyungmin.park@samsung.com>
+ M:    Heungjun Kim <riverful.kim@samsung.com>
+ L:    linux-media@vger.kernel.org
+ S:    Maintained
+ F:    drivers/media/video/m5mols/
+ F:    include/media/m5mols.h
  FUSE: FILESYSTEM IN USERSPACE
  M:    Miklos Szeredi <miklos@szeredi.hu>
  L:    fuse-devel@lists.sourceforge.net
@@@ -2936,6 -2928,7 +2935,7 @@@ F:      include/linux/gigaset_dev.
  
  GPIO SUBSYSTEM
  M:    Grant Likely <grant.likely@secretlab.ca>
+ M:    Linus Walleij <linus.walleij@stericsson.com>
  S:    Maintained
  T:    git git://git.secretlab.ca/git/linux-2.6.git
  F:    Documentation/gpio.txt
@@@ -2953,7 -2946,7 +2953,7 @@@ GRETH 10/100/1G Ethernet MAC device dri
  M:    Kristoffer Glembo <kristoffer@gaisler.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
- F:    drivers/net/greth*
+ F:    drivers/net/ethernet/aeroflex/
  
  GSPCA FINEPIX SUBDRIVER
  M:    Frank Zago <frank@zago.net>
@@@ -3053,7 -3046,6 +3053,6 @@@ F:      drivers/hwspinlock/hwspinlock_
  F:    include/linux/hwspinlock.h
  
  HARMONY SOUND DRIVER
- M:    Kyle McMartin <kyle@mcmartin.ca>
  L:    linux-parisc@vger.kernel.org
  S:    Maintained
  F:    sound/parisc/harmony.*
@@@ -3117,6 -3109,7 +3116,7 @@@ F:      include/linux/hid
  
  HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS
  M:    Thomas Gleixner <tglx@linutronix.de>
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
  S:    Maintained
  F:    Documentation/timers/
  F:    kernel/hrtimer.c
@@@ -3204,6 -3197,16 +3204,16 @@@ M:    William Irwin <wli@holomorphy.com
  S:    Maintained
  F:    fs/hugetlbfs/
  
+ Hyper-V CORE AND DRIVERS
+ M:    K. Y. Srinivasan <kys@microsoft.com>
+ M:    Haiyang Zhang <haiyangz@microsoft.com>
+ L:    devel@linuxdriverproject.org
+ S:    Maintained
+ F:    drivers/hv/
+ F:    drivers/hid/hid-hyperv.c
+ F:    drivers/net/hyperv/
+ F:    drivers/staging/hv/
  I2C/SMBUS STUB DRIVER
  M:    "Mark M. Hoffman" <mhoffman@lightlink.com>
  L:    linux-i2c@vger.kernel.org
@@@ -3213,6 -3216,7 +3223,7 @@@ F:      drivers/i2c/busses/i2c-stub.
  I2C SUBSYSTEM
  M:    "Jean Delvare (PC drivers, core)" <khali@linux-fr.org>
  M:    "Ben Dooks (embedded platforms)" <ben-linux@fluff.org>
+ M:    "Wolfram Sang (embedded platforms)" <w.sang@pengutronix.de>
  L:    linux-i2c@vger.kernel.org
  W:    http://i2c.wiki.kernel.org/
  T:    quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-i2c/
@@@ -3312,6 -3316,12 +3323,12 @@@ S:    Maintaine
  F:    net/ieee802154/
  F:    drivers/ieee802154/
  
+ IIO SUBSYSTEM AND DRIVERS
+ M:    Jonathan Cameron <jic23@cam.ac.uk>
+ L:    linux-iio@vger.kernel.org
+ S:    Maintained
+ F:    drivers/staging/iio/
  IKANOS/ADI EAGLE ADSL USB DRIVER
  M:    Matthieu Castet <castet.matthieu@free.fr>
  M:    Stanislaw Gruszka <stf_xl@wp.pl>
@@@ -3599,8 -3609,7 +3616,7 @@@ F:      net/netfilter/ipvs
  IPWIRELESS DRIVER
  M:    Jiri Kosina <jkosina@suse.cz>
  M:    David Sterba <dsterba@suse.cz>
- S:    Maintained
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/ipwireless_cs.git
+ S:    Odd Fixes
  F:    drivers/tty/ipwireless/
  
  IPX NETWORK LAYER
@@@ -3626,7 -3635,7 +3642,7 @@@ F:      net/irda
  IRQ SUBSYSTEM
  M:    Thomas Gleixner <tglx@linutronix.de>
  S:    Maintained
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git irq/core
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/core
  F:    kernel/irq/
  
  ISAPNP
@@@ -3771,7 -3780,7 +3787,7 @@@ F:      Documentation/kdump
  
  KERNEL AUTOMOUNTER v4 (AUTOFS4)
  M:    Ian Kent <raven@themaw.net>
- L:    autofs@linux.kernel.org
+ L:    autofs@vger.kernel.org
  S:    Maintained
  F:    fs/autofs4/
  
@@@ -3795,7 -3804,6 +3811,6 @@@ S:      Odd Fixe
  
  KERNEL NFSD, SUNRPC, AND LOCKD SERVERS
  M:    "J. Bruce Fields" <bfields@fieldses.org>
- M:    Neil Brown <neilb@suse.de>
  L:    linux-nfs@vger.kernel.org
  W:    http://nfs.sourceforge.net/
  S:    Supported
@@@ -3893,8 -3901,7 +3908,7 @@@ L:      keyrings@linux-nfs.or
  S:    Supported
  F:    Documentation/security/keys-trusted-encrypted.txt
  F:    include/keys/encrypted-type.h
- F:    security/keys/encrypted.c
- F:    security/keys/encrypted.h
+ F:    security/keys/encrypted-keys/
  
  KGDB / KDB /debug_core
  M:    Jason Wessel <jason.wessel@windriver.com>
@@@ -3983,11 -3990,11 +3997,11 @@@ M:   Rusty Russell <rusty@rustcorp.com.au
  L:    lguest@lists.ozlabs.org
  W:    http://lguest.ozlabs.org/
  S:    Odd Fixes
- F:    Documentation/virtual/lguest/
+ F:    arch/x86/include/asm/lguest*.h
  F:    arch/x86/lguest/
  F:    drivers/lguest/
  F:    include/linux/lguest*.h
- F:    arch/x86/include/asm/lguest*.h
+ F:    tools/lguest/
  
  LINUX FOR IBM pSERIES (RS/6000)
  M:    Paul Mackerras <paulus@au.ibm.com>
@@@ -4027,7 -4034,7 +4041,7 @@@ M:      Josh Boyer <jwboyer@gmail.com
  M:    Matt Porter <mporter@kernel.crashing.org>
  W:    http://www.penguinppc.org/
  L:    linuxppc-dev@lists.ozlabs.org
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jwboyer/powerpc-4xx.git
+ T:    git git://git.infradead.org/users/jwboyer/powerpc-4xx.git
  S:    Maintained
  F:    arch/powerpc/platforms/40x/
  F:    arch/powerpc/platforms/44x/
@@@ -4114,7 -4121,7 +4128,7 @@@ F:      drivers/hwmon/lm90.
  LOCKDEP AND LOCKSTAT
  M:    Peter Zijlstra <peterz@infradead.org>
  M:    Ingo Molnar <mingo@redhat.com>
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/peterz/linux-2.6-lockdep.git
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git core/locking
  S:    Maintained
  F:    Documentation/lockdep*.txt
  F:    Documentation/lockstat.txt
@@@ -4127,10 -4134,11 +4141,11 @@@ L:   linux-ntfs-dev@lists.sourceforge.ne
  W:    http://www.linux-ntfs.org/content/view/19/37/
  S:    Maintained
  F:    Documentation/ldm.txt
- F:    fs/partitions/ldm.*
+ F:    block/partitions/ldm.*
  
  LogFS
  M:    Joern Engel <joern@logfs.org>
+ M:    Prasad Joshi <prasadjoshi.linux@gmail.com>
  L:    logfs@logfs.org
  W:    logfs.org
  S:    Maintained
@@@ -4272,13 -4280,6 +4287,6 @@@ S:     Orpha
  F:    drivers/video/matrox/matroxfb_*
  F:    include/linux/matroxfb.h
  
- MAX1668 TEMPERATURE SENSOR DRIVER
- M:    "David George" <david.george@ska.ac.za>
- L:    lm-sensors@lm-sensors.org
- S:    Maintained
- F:    Documentation/hwmon/max1668
- F:    drivers/hwmon/max1668.c
  MAX6650 HARDWARE MONITOR AND FAN CONTROLLER DRIVER
  M:    "Hans J. Koch" <hjk@hansjkoch.de>
  L:    lm-sensors@lm-sensors.org
@@@ -4296,7 -4297,9 +4304,9 @@@ T:      git git://git.kernel.org/pub/scm/lin
  S:    Maintained
  F:    Documentation/dvb/
  F:    Documentation/video4linux/
+ F:    Documentation/DocBook/media/
  F:    drivers/media/
+ F:    drivers/staging/media/
  F:    include/media/
  F:    include/linux/dvb/
  F:    include/linux/videodev*.h
@@@ -4318,8 -4321,9 +4328,9 @@@ F:      include/linux/mm.
  F:    mm/
  
  MEMORY RESOURCE CONTROLLER
+ M:    Johannes Weiner <hannes@cmpxchg.org>
+ M:    Michal Hocko <mhocko@suse.cz>
  M:    Balbir Singh <bsingharora@gmail.com>
- M:    Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
  M:    KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
  L:    cgroups@vger.kernel.org
  L:    linux-mm@kvack.org
@@@ -4681,7 -4685,7 +4692,7 @@@ NTFS FILESYSTE
  M:    Anton Altaparmakov <anton@tuxera.com>
  L:    linux-ntfs-dev@lists.sourceforge.net
  W:    http://www.tuxera.com/
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs-2.6.git
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/aia21/ntfs.git
  S:    Supported
  F:    Documentation/filesystems/ntfs.txt
  F:    fs/ntfs/
@@@ -4702,6 -4706,8 +4713,8 @@@ Q:      http://patchwork.kernel.org/project/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git
  S:    Maintained
  F:    arch/arm/*omap*/
+ F:    drivers/i2c/busses/i2c-omap.c
+ F:    include/linux/i2c-omap.h
  
  OMAP CLOCK FRAMEWORK SUPPORT
  M:    Paul Walmsley <paul@pwsan.com>
@@@ -4867,6 -4873,14 +4880,14 @@@ S:    Maintaine
  T:    git git://openrisc.net/~jonas/linux
  F:    arch/openrisc
  
+ OPENVSWITCH
+ M:    Jesse Gross <jesse@nicira.com>
+ L:    dev@openvswitch.org
+ W:    http://openvswitch.org
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jesse/openvswitch.git
+ S:    Maintained
+ F:    net/openvswitch/
  OPL4 DRIVER
  M:    Clemens Ladisch <clemens@ladisch.de>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
@@@ -4984,9 -4998,8 +5005,8 @@@ F:      Documentation/blockdev/paride.tx
  F:    drivers/block/paride/
  
  PARISC ARCHITECTURE
- M:    Kyle McMartin <kyle@mcmartin.ca>
- M:    Helge Deller <deller@gmx.de>
  M:    "James E.J. Bottomley" <jejb@parisc-linux.org>
+ M:    Helge Deller <deller@gmx.de>
  L:    linux-parisc@vger.kernel.org
  W:    http://www.parisc-linux.org/
  Q:    http://patchwork.kernel.org/project/linux-parisc/list/
@@@ -5101,6 -5114,7 +5121,7 @@@ M:      Peter Zijlstra <a.p.zijlstra@chello.
  M:    Paul Mackerras <paulus@samba.org>
  M:    Ingo Molnar <mingo@elte.hu>
  M:    Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
  S:    Supported
  F:    kernel/events/*
  F:    include/linux/perf_event.h
@@@ -5132,10 -5146,19 +5153,19 @@@ L:   linux-mtd@lists.infradead.or
  S:    Maintained
  F:    drivers/mtd/devices/phram.c
  
+ PICOXCELL SUPPORT
+ M:    Jamie Iles <jamie@jamieiles.com>
+ L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+ T:    git git://github.com/jamieiles/linux-2.6-ji.git
+ S:    Supported
+ F:    arch/arm/mach-picoxcell
+ F:    drivers/*/picoxcell*
+ F:    drivers/*/*/picoxcell*
  PIN CONTROL SUBSYSTEM
  M:    Linus Walleij <linus.walleij@linaro.org>
  S:    Maintained
- F:    drivers/pinmux/
+ F:    drivers/pinctrl/
  
  PKTCDVD DRIVER
  M:    Peter Osterlund <petero2@telia.com>
@@@ -5180,6 -5203,7 +5210,7 @@@ F:      drivers/scsi/pm8001
  
  POSIX CLOCKS and TIMERS
  M:    Thomas Gleixner <tglx@linutronix.de>
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
  S:    Supported
  F:    fs/timerfd.c
  F:    include/linux/timer*
@@@ -5317,35 -5341,27 +5348,27 @@@ F:   drivers/media/video/pvrusb2
  PXA2xx/PXA3xx SUPPORT
  M:    Eric Miao <eric.y.miao@gmail.com>
  M:    Russell King <linux@arm.linux.org.uk>
+ M:    Haojian Zhuang <haojian.zhuang@marvell.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+ T:    git git://github.com/hzhuang1/linux.git
+ T:    git git://git.linaro.org/people/ycmiao/pxa-linux.git
  S:    Maintained
  F:    arch/arm/mach-pxa/
  F:    drivers/pcmcia/pxa2xx*
- F:    drivers/spi/pxa2xx*
+ F:    drivers/spi/spi-pxa2xx*
  F:    drivers/usb/gadget/pxa2*
  F:    include/sound/pxa2xx-lib.h
  F:    sound/arm/pxa*
  F:    sound/soc/pxa
  
- PXA168 SUPPORT
- M:    Eric Miao <eric.y.miao@gmail.com>
- M:    Jason Chagas <jason.chagas@marvell.com>
- L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
- S:    Maintained
- PXA910 SUPPORT
+ MMP SUPPORT
  M:    Eric Miao <eric.y.miao@gmail.com>
- L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
- S:    Maintained
- MMP2 SUPPORT (aka ARMADA610)
  M:    Haojian Zhuang <haojian.zhuang@marvell.com>
- M:    Eric Miao <eric.y.miao@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa-linux-2.6.git
+ T:    git git://github.com/hzhuang1/linux.git
+ T:    git git://git.linaro.org/people/ycmiao/pxa-linux.git
  S:    Maintained
+ F:    arch/arm/mach-mmp/
  
  PXA MMCI DRIVER
  S:    Orphan
@@@ -5384,6 -5400,7 +5407,7 @@@ S:      Supporte
  F:    drivers/scsi/qla4xxx/
  
  QLOGIC QLA3XXX NETWORK DRIVER
+ M:    Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
  M:    Ron Mercer <ron.mercer@qlogic.com>
  M:    linux-driver@qlogic.com
  L:    netdev@vger.kernel.org
@@@ -5554,11 -5571,6 +5578,6 @@@ M:     Maxim Levitsky <maximlevitsky@gmail.
  S:    Maintained
  F:    drivers/memstick/host/r592.*
  
- RISCOM8 DRIVER
- S:    Orphan
- F:    Documentation/serial/riscom8.txt
- F:    drivers/staging/tty/riscom8*
  ROCKETPORT DRIVER
  P:    Comtrol Corp.
  W:    http://www.comtrol.com
@@@ -5618,7 -5630,7 +5637,7 @@@ W:      http://www.ibm.com/developerworks/li
  S:    Supported
  F:    arch/s390/
  F:    drivers/s390/
- F:    fs/partitions/ibm.c
+ F:    block/partitions/ibm.c
  F:    Documentation/s390/
  F:    Documentation/DocBook/s390*
  
@@@ -5674,12 -5686,17 +5693,17 @@@ F:   drivers/media/video/*7146
  F:    include/media/*7146*
  
  SAMSUNG AUDIO (ASoC) DRIVERS
- M:    Jassi Brar <jassisinghbrar@gmail.com>
  M:    Sangbeom Kim <sbkim73@samsung.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
  F:    sound/soc/samsung
  
+ SAMSUNG FRAMEBUFFER DRIVER
+ M:    Jingoo Han <jg1.han@samsung.com>
+ L:    linux-fbdev@vger.kernel.org
+ S:    Maintained
+ F:    drivers/video/s3c-fb.c
  SERIAL DRIVERS
  M:    Alan Cox <alan@linux.intel.com>
  L:    linux-serial@vger.kernel.org
@@@ -5696,6 -5713,7 +5720,7 @@@ F:      drivers/dma/dw_dmac.
  TIMEKEEPING, NTP
  M:    John Stultz <johnstul@us.ibm.com>
  M:    Thomas Gleixner <tglx@linutronix.de>
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
  S:    Supported
  F:    include/linux/clocksource.h
  F:    include/linux/time.h
@@@ -5720,6 -5738,7 +5745,7 @@@ F:      drivers/watchdog/sc1200wdt.
  SCHEDULER
  M:    Ingo Molnar <mingo@elte.hu>
  M:    Peter Zijlstra <peterz@infradead.org>
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git sched/core
  S:    Maintained
  F:    kernel/sched*
  F:    include/linux/sched.h
@@@ -5817,13 -5836,14 +5843,14 @@@ L:   linux-mmc@vger.kernel.or
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc.git
  S:    Maintained
  F:    drivers/mmc/host/sdhci.*
+ F:    drivers/mmc/host/sdhci-pltfm.[ch]
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE, OPEN FIRMWARE BINDINGS (SDHCI-OF)
  M:    Anton Vorontsov <avorontsov@ru.mvista.com>
  L:    linuxppc-dev@lists.ozlabs.org
  L:    linux-mmc@vger.kernel.org
  S:    Maintained
- F:    drivers/mmc/host/sdhci-of.*
+ F:    drivers/mmc/host/sdhci-pltfm.[ch]
  
  SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) SAMSUNG DRIVER
  M:    Ben Dooks <ben-linux@fluff.org>
@@@ -5838,9 -5858,9 +5865,9 @@@ S:      Maintaine
  F:    drivers/mmc/host/sdhci-spear.c
  
  SECURITY SUBSYSTEM
- M:    James Morris <jmorris@namei.org>
+ M:    James Morris <james.l.morris@oracle.com>
  L:    linux-security-module@vger.kernel.org (suggested Cc:)
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6.git
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/linux-security.git
  W:    http://security.wiki.kernel.org/
  S:    Supported
  F:    security/
@@@ -5851,7 -5871,7 +5878,7 @@@ S:      Supporte
  
  SELINUX SECURITY MODULE
  M:    Stephen Smalley <sds@tycho.nsa.gov>
- M:    James Morris <jmorris@namei.org>
+ M:    James Morris <james.l.morris@oracle.com>
  M:    Eric Paris <eparis@parisplace.org>
  L:    selinux@tycho.nsa.gov (subscribers-only, general discussion)
  W:    http://selinuxproject.org
@@@ -5902,7 -5922,6 +5929,6 @@@ F:      drivers/net/ethernet/emulex/benet
  
  SFC NETWORK DRIVER
  M:    Solarflare linux maintainers <linux-net-drivers@solarflare.com>
- M:    Steve Hodgson <shodgson@solarflare.com>
  M:    Ben Hutchings <bhutchings@solarflare.com>
  L:    netdev@vger.kernel.org
  S:    Supported
@@@ -5967,6 -5986,7 +5993,7 @@@ L:      davinci-linux-open-source@linux.davi
  Q:    http://patchwork.kernel.org/project/linux-davinci/list/
  S:    Supported
  F:    arch/arm/mach-davinci
+ F:    drivers/i2c/busses/i2c-davinci.c
  
  SIS 190 ETHERNET DRIVER
  M:    Francois Romieu <romieu@fr.zoreil.com>
@@@ -6110,13 -6130,6 +6137,6 @@@ S:     Maintaine
  F:    drivers/ssb/
  F:    include/linux/ssb/
  
- BROADCOM SPECIFIC AMBA DRIVER (BCMA)
- M:    RafaÅ‚ MiÅ‚ecki <zajec5@gmail.com>
- L:    linux-wireless@vger.kernel.org
- S:    Maintained
- F:    drivers/bcma/
- F:    include/linux/bcma/
  SONY VAIO CONTROL DEVICE DRIVER
  M:    Mattia Dongili <malattia@linux.it>
  L:    platform-driver-x86@vger.kernel.org
@@@ -6203,9 -6216,7 +6223,7 @@@ M:      Viresh Kumar <viresh.kumar@st.com
  W:    http://www.st.com/spear
  S:    Maintained
  F:    arch/arm/mach-spear*/clock.c
- F:    arch/arm/mach-spear*/include/mach/clkdev.h
  F:    arch/arm/plat-spear/clock.c
- F:    arch/arm/plat-spear/include/plat/clkdev.h
  F:    arch/arm/plat-spear/include/plat/clock.h
  
  SPEAR PAD MULTIPLEXING SUPPORT
@@@ -6221,11 -6232,6 +6239,6 @@@ F:     arch/arm/mach-spear3xx/spear3*0_evb.
  F:    arch/arm/mach-spear6xx/spear600.c
  F:    arch/arm/mach-spear6xx/spear600_evb.c
  
- SPECIALIX IO8+ MULTIPORT SERIAL CARD DRIVER
- S:    Orphan
- F:    Documentation/serial/specialix.txt
- F:    drivers/staging/tty/specialix*
  SPI SUBSYSTEM
  M:    Grant Likely <grant.likely@secretlab.ca>
  L:    spi-devel-general@lists.sourceforge.net
@@@ -6267,15 -6273,15 +6280,15 @@@ S:   Maintaine
  F:    arch/alpha/kernel/srm_env.c
  
  STABLE BRANCH
- M:    Greg Kroah-Hartman <greg@kroah.com>
- L:    stable@kernel.org
- S:    Maintained
+ M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+ L:    stable@vger.kernel.org
+ S:    Supported
  
  STAGING SUBSYSTEM
- M:    Greg Kroah-Hartman <gregkh@suse.de>
+ M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
  L:    devel@driverdev.osuosl.org
- S:    Maintained
+ S:    Supported
  F:    drivers/staging/
  
  STAGING - AGERE HERMES II and II.5 WIRELESS DRIVERS
@@@ -6303,11 -6309,6 +6316,6 @@@ M:     Manu Abraham <abraham.manu@gmail.com
  S:    Odd Fixes
  F:    drivers/staging/crystalhd/
  
- STAGING - CYPRESS WESTBRIDGE SUPPORT
- M:    David Cross <david.cross@cypress.com>
- S:    Odd Fixes
- F:    drivers/staging/westbridge/
  STAGING - ECHO CANCELLER
  M:    Steve Underwood <steveu@coppice.org>
  M:    David Rowe <david@rowetel.com>
@@@ -6329,12 -6330,6 +6337,6 @@@ M:     David Täht <d@teklibre.com
  S:    Odd Fixes
  F:    drivers/staging/frontier/
  
- STAGING - HYPER-V (MICROSOFT)
- M:    Hank Janssen <hjanssen@microsoft.com>
- M:    Haiyang Zhang <haiyangz@microsoft.com>
- S:    Odd Fixes
- F:    drivers/staging/hv/
  STAGING - INDUSTRIAL IO
  M:    Jonathan Cameron <jic23@cam.ac.uk>
  L:    linux-iio@vger.kernel.org
@@@ -6345,7 -6340,7 +6347,7 @@@ STAGING - LIRC (LINUX INFRARED REMOTE C
  M:    Jarod Wilson <jarod@wilsonet.com>
  W:    http://www.lirc.org/
  S:    Odd Fixes
- F:    drivers/staging/lirc/
+ F:    drivers/staging/media/lirc/
  
  STAGING - NVIDIA COMPLIANT EMBEDDED CONTROLLER INTERFACE (nvec)
  M:    Julian Andres Klode <jak@jak-linux.org>
@@@ -6381,7 -6376,7 +6383,7 @@@ F:      drivers/staging/sm7xx
  STAGING - SOFTLOGIC 6x10 MPEG CODEC
  M:    Ben Collins <bcollins@bluecherry.net>
  S:    Odd Fixes
- F:    drivers/staging/solo6x10/
+ F:    drivers/staging/media/solo6x10/
  
  STAGING - SPEAKUP CONSOLE SPEECH DRIVER
  M:    William Hubbs <w.d.hubbs@gmail.com>
@@@ -6398,11 -6393,6 +6400,6 @@@ M:     Omar Ramirez Luna <omar.ramirez@ti.c
  S:    Odd Fixes
  F:    drivers/staging/tidspbridge/
  
- STAGING - TRIDENT TVMASTER TMxxxx USB VIDEO CAPTURE DRIVERS
- L:    linux-media@vger.kernel.org
- S:    Odd Fixes
- F:    drivers/staging/tm6000/
  STAGING - USB ENE SM/MS CARD READER DRIVER
  M:    Al Cho <acho@novell.com>
  S:    Odd Fixes
@@@ -6419,7 -6409,7 +6416,7 @@@ S:      Odd Fixe
  F:    drivers/staging/winbond/
  
  STAGING - XGI Z7,Z9,Z11 PCI DISPLAY DRIVER
- M:    Arnaud Patard <apatard@mandriva.com>
+ M:    Arnaud Patard <arnaud.patard@rtp-net.org>
  S:    Odd Fixes
  F:    drivers/staging/xgifb/
  
@@@ -6510,6 -6500,13 +6507,13 @@@ W:    http://tcp-lp-mod.sourceforge.net
  S:    Maintained
  F:    net/ipv4/tcp_lp.c
  
+ TEAM DRIVER
+ M:    Jiri Pirko <jpirko@redhat.com>
+ L:    netdev@vger.kernel.org
+ S:    Supported
+ F:    drivers/net/team/
+ F:    include/linux/if_team.h
  TEGRA SUPPORT
  M:    Colin Cross <ccross@android.com>
  M:    Olof Johansson <olof@lixom.net>
@@@ -6647,7 -6644,7 +6651,7 @@@ TRACIN
  M:    Steven Rostedt <rostedt@goodmis.org>
  M:    Frederic Weisbecker <fweisbec@gmail.com>
  M:    Ingo Molnar <mingo@redhat.com>
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git perf/core
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
  S:    Maintained
  F:    Documentation/trace/ftrace.txt
  F:    arch/*/*/*/ftrace.h
@@@ -6664,10 -6661,10 +6668,10 @@@ S:   Maintaine
  K:    ^Subject:.*(?i)trivial
  
  TTY LAYER
- M:    Greg Kroah-Hartman <gregkh@suse.de>
- S:    Maintained
+ M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+ S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6.git
- F:    drivers/tty/*
+ F:    drivers/tty/
  F:    drivers/tty/serial/serial_core.c
  F:    include/linux/serial_core.h
  F:    include/linux/serial.h
@@@ -6677,7 -6674,7 +6681,7 @@@ TULIP NETWORK DRIVER
  M:    Grant Grundler <grundler@parisc-linux.org>
  L:    netdev@vger.kernel.org
  S:    Maintained
- F:    drivers/net/ethernet/tulip/
+ F:    drivers/net/ethernet/dec/tulip/
  
  TUN/TAP driver
  M:    Maxim Krasnyansky <maxk@qualcomm.com>
@@@ -6953,7 -6950,7 +6957,7 @@@ S:      Maintaine
  F:    drivers/usb/serial/digi_acceleport.c
  
  USB SERIAL DRIVER
- M:    Greg Kroah-Hartman <gregkh@suse.de>
+ M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  L:    linux-usb@vger.kernel.org
  S:    Supported
  F:    Documentation/usb/usb-serial.txt
@@@ -6968,9 -6965,8 +6972,8 @@@ S:      Maintaine
  F:    drivers/usb/serial/empeg.c
  
  USB SERIAL KEYSPAN DRIVER
- M:    Greg Kroah-Hartman <greg@kroah.com>
+ M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  L:    linux-usb@vger.kernel.org
- W:    http://www.kroah.com/linux/
  S:    Maintained
  F:    drivers/usb/serial/*keyspan*
  
@@@ -6998,7 -6994,7 +7001,7 @@@ F:      Documentation/video4linux/sn9c102.tx
  F:    drivers/media/video/sn9c102/
  
  USB SUBSYSTEM
- M:    Greg Kroah-Hartman <gregkh@suse.de>
+ M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  L:    linux-usb@vger.kernel.org
  W:    http://www.linux-usb.org
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6.git
@@@ -7085,7 -7081,7 +7088,7 @@@ F:      fs/hppfs
  
  USERSPACE I/O (UIO)
  M:    "Hans J. Koch" <hjk@hansjkoch.de>
- M:    Greg Kroah-Hartman <gregkh@suse.de>
+ M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  S:    Maintained
  F:    Documentation/DocBook/uio-howto.tmpl
  F:    drivers/uio/
@@@ -7203,7 -7199,7 +7206,7 @@@ S:      Maintaine
  F:    drivers/net/vmxnet3/
  
  VMware PVSCSI driver
- M:    Alok Kataria <akataria@vmware.com>
+ M:    Arvind Kumar <arvindkumar@vmware.com>
  M:    VMware PV-Drivers <pv-drivers@vmware.com>
  L:    linux-scsi@vger.kernel.org
  S:    Maintained
@@@ -7275,7 -7271,7 +7278,7 @@@ WATCHDOG DEVICE DRIVER
  M:    Wim Van Sebroeck <wim@iguana.be>
  L:    linux-watchdog@vger.kernel.org
  W:    http://www.linux-watchdog.org/
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog.git
+ T:    git git://www.linux-watchdog.org/linux-watchdog.git
  S:    Maintained
  F:    Documentation/watchdog/
  F:    drivers/watchdog/
@@@ -7360,6 -7356,7 +7363,7 @@@ S:      Supporte
  F:    Documentation/hwmon/wm83??
  F:    arch/arm/mach-s3c64xx/mach-crag6410*
  F:    drivers/leds/leds-wm83*.c
+ F:    drivers/hwmon/wm83??-hwmon.c
  F:    drivers/input/misc/wm831x-on.c
  F:    drivers/input/touchscreen/wm831x-ts.c
  F:    drivers/input/touchscreen/wm97*.c
@@@ -7397,7 -7394,7 +7401,7 @@@ M:      Thomas Gleixner <tglx@linutronix.de
  M:    Ingo Molnar <mingo@redhat.com>
  M:    "H. Peter Anvin" <hpa@zytor.com>
  M:    x86@kernel.org
- T:    git git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/core
  S:    Maintained
  F:    Documentation/x86/
  F:    arch/x86/
diff --combined drivers/hid/hid-core.c
@@@ -90,7 -90,7 +90,7 @@@ static struct hid_field *hid_register_f
        struct hid_field *field;
  
        if (report->maxfield == HID_MAX_FIELDS) {
-               dbg_hid("too many fields in report\n");
+               hid_err(report->device, "too many fields in report\n");
                return NULL;
        }
  
@@@ -121,7 -121,7 +121,7 @@@ static int open_collection(struct hid_p
        usage = parser->local.usage[0];
  
        if (parser->collection_stack_ptr == HID_COLLECTION_STACK_SIZE) {
-               dbg_hid("collection stack overflow\n");
+               hid_err(parser->device, "collection stack overflow\n");
                return -1;
        }
  
                collection = kmalloc(sizeof(struct hid_collection) *
                                parser->device->collection_size * 2, GFP_KERNEL);
                if (collection == NULL) {
-                       dbg_hid("failed to reallocate collection array\n");
+                       hid_err(parser->device, "failed to reallocate collection array\n");
                        return -1;
                }
                memcpy(collection, parser->device->collection,
  static int close_collection(struct hid_parser *parser)
  {
        if (!parser->collection_stack_ptr) {
-               dbg_hid("collection stack underflow\n");
+               hid_err(parser->device, "collection stack underflow\n");
                return -1;
        }
        parser->collection_stack_ptr--;
@@@ -197,7 -197,7 +197,7 @@@ static unsigned hid_lookup_collection(s
  static int hid_add_usage(struct hid_parser *parser, unsigned usage)
  {
        if (parser->local.usage_index >= HID_MAX_USAGES) {
-               dbg_hid("usage index exceeded\n");
+               hid_err(parser->device, "usage index exceeded\n");
                return -1;
        }
        parser->local.usage[parser->local.usage_index] = usage;
@@@ -222,12 -222,13 +222,13 @@@ static int hid_add_field(struct hid_par
  
        report = hid_register_report(parser->device, report_type, parser->global.report_id);
        if (!report) {
-               dbg_hid("hid_register_report failed\n");
+               hid_err(parser->device, "hid_register_report failed\n");
                return -1;
        }
  
        if (parser->global.logical_maximum < parser->global.logical_minimum) {
-               dbg_hid("logical range invalid %d %d\n", parser->global.logical_minimum, parser->global.logical_maximum);
+               hid_err(parser->device, "logical range invalid %d %d\n",
+                               parser->global.logical_minimum, parser->global.logical_maximum);
                return -1;
        }
  
@@@ -307,7 -308,7 +308,7 @@@ static int hid_parser_global(struct hid
        case HID_GLOBAL_ITEM_TAG_PUSH:
  
                if (parser->global_stack_ptr == HID_GLOBAL_STACK_SIZE) {
-                       dbg_hid("global environment stack overflow\n");
+                       hid_err(parser->device, "global environment stack overflow\n");
                        return -1;
                }
  
        case HID_GLOBAL_ITEM_TAG_POP:
  
                if (!parser->global_stack_ptr) {
-                       dbg_hid("global environment stack underflow\n");
+                       hid_err(parser->device, "global environment stack underflow\n");
                        return -1;
                }
  
  
        case HID_GLOBAL_ITEM_TAG_REPORT_SIZE:
                parser->global.report_size = item_udata(item);
-               if (parser->global.report_size > 32) {
-                       dbg_hid("invalid report_size %d\n",
+               if (parser->global.report_size > 96) {
+                       hid_err(parser->device, "invalid report_size %d\n",
                                        parser->global.report_size);
                        return -1;
                }
        case HID_GLOBAL_ITEM_TAG_REPORT_COUNT:
                parser->global.report_count = item_udata(item);
                if (parser->global.report_count > HID_MAX_USAGES) {
-                       dbg_hid("invalid report_count %d\n",
+                       hid_err(parser->device, "invalid report_count %d\n",
                                        parser->global.report_count);
                        return -1;
                }
        case HID_GLOBAL_ITEM_TAG_REPORT_ID:
                parser->global.report_id = item_udata(item);
                if (parser->global.report_id == 0) {
-                       dbg_hid("report_id 0 is invalid\n");
+                       hid_err(parser->device, "report_id 0 is invalid\n");
                        return -1;
                }
                return 0;
  
        default:
-               dbg_hid("unknown global tag 0x%x\n", item->tag);
+               hid_err(parser->device, "unknown global tag 0x%x\n", item->tag);
                return -1;
        }
  }
@@@ -414,14 -415,14 +415,14 @@@ static int hid_parser_local(struct hid_
                         * items and the first delimiter set.
                         */
                        if (parser->local.delimiter_depth != 0) {
-                               dbg_hid("nested delimiters\n");
+                               hid_err(parser->device, "nested delimiters\n");
                                return -1;
                        }
                        parser->local.delimiter_depth++;
                        parser->local.delimiter_branch++;
                } else {
                        if (parser->local.delimiter_depth < 1) {
-                               dbg_hid("bogus close delimiter\n");
+                               hid_err(parser->device, "bogus close delimiter\n");
                                return -1;
                        }
                        parser->local.delimiter_depth--;
@@@ -506,7 -507,7 +507,7 @@@ static int hid_parser_main(struct hid_p
                ret = hid_add_field(parser, HID_FEATURE_REPORT, data);
                break;
        default:
-               dbg_hid("unknown main item tag 0x%x\n", item->tag);
+               hid_err(parser->device, "unknown main item tag 0x%x\n", item->tag);
                ret = 0;
        }
  
@@@ -678,12 -679,12 +679,12 @@@ int hid_parse_report(struct hid_device 
        while ((start = fetch_item(start, end, &item)) != NULL) {
  
                if (item.format != HID_ITEM_FORMAT_SHORT) {
-                       dbg_hid("unexpected long global item\n");
+                       hid_err(device, "unexpected long global item\n");
                        goto err;
                }
  
                if (dispatch_type[item.type](parser, &item)) {
-                       dbg_hid("item %u %u %u %u parsing failed\n",
+                       hid_err(device, "item %u %u %u %u parsing failed\n",
                                item.format, (unsigned)item.size,
                                (unsigned)item.type, (unsigned)item.tag);
                        goto err;
  
                if (start == end) {
                        if (parser->collection_stack_ptr) {
-                               dbg_hid("unbalanced collection at end of report description\n");
+                               hid_err(device, "unbalanced collection at end of report description\n");
                                goto err;
                        }
                        if (parser->local.delimiter_depth) {
-                               dbg_hid("unbalanced delimiter at end of report description\n");
+                               hid_err(device, "unbalanced delimiter at end of report description\n");
                                goto err;
                        }
                        vfree(parser);
                }
        }
  
-       dbg_hid("item fetching failed at offset %d\n", (int)(end - start));
+       hid_err(device, "item fetching failed at offset %d\n", (int)(end - start));
  err:
        vfree(parser);
        return ret;
@@@ -873,7 -874,7 +874,7 @@@ static void hid_process_event(struct hi
                ret = hdrv->event(hid, field, usage, value);
                if (ret != 0) {
                        if (ret < 0)
-                               dbg_hid("%s's event failed with %d\n",
+                               hid_err(hid, "%s's event failed with %d\n",
                                                hdrv->name, ret);
                        return;
                }
@@@ -995,12 -996,13 +996,13 @@@ int hid_set_field(struct hid_field *fie
        hid_dump_input(field->report->device, field->usage + offset, value);
  
        if (offset >= field->report_count) {
-               dbg_hid("offset (%d) exceeds report_count (%d)\n", offset, field->report_count);
+               hid_err(field->report->device, "offset (%d) exceeds report_count (%d)\n",
+                               offset, field->report_count);
                return -1;
        }
        if (field->logical_minimum < 0) {
                if (value != snto32(s32ton(value, size), size)) {
-                       dbg_hid("value %d is out of range\n", value);
+                       hid_err(field->report->device, "value %d is out of range\n", value);
                        return -1;
                }
        }
@@@ -1157,7 -1159,7 +1159,7 @@@ static bool hid_match_one_id(struct hid
                (id->product == HID_ANY_ID || id->product == hdev->product);
  }
  
static const struct hid_device_id *hid_match_id(struct hid_device *hdev,
+ const struct hid_device_id *hid_match_id(struct hid_device *hdev,
                const struct hid_device_id *id)
  {
        for (; id->bus; id++)
@@@ -1404,11 -1406,13 +1406,13 @@@ static const struct hid_device_id hid_h
        { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_TRUETOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0011) },
-       { 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_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2515) },
        { HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_3) },
        { HID_USB_DEVICE(USB_VENDOR_ID_HANVON, USB_DEVICE_ID_HANVON_MULTITOUCH) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_HANVON_ALT, USB_DEVICE_ID_HANVON_ALT_MULTITOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_IDEACOM, USB_DEVICE_ID_IDEACOM_IDC6650) },
        { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK, USB_DEVICE_ID_HOLTEK_ON_LINE_GRIP) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ILITEK, USB_DEVICE_ID_ILITEK_MULTITOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) },
        { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_PCI) },
        { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) },
        { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ARVO) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKU) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPLUS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KOVAPLUS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRED) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_DUAL_BOX_PRO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH) },
+       { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_XAT, USB_DEVICE_ID_XAT_CSR) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, USB_DEVICE_ID_XIROKU_SPX) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, USB_DEVICE_ID_XIROKU_MPX) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, USB_DEVICE_ID_XIROKU_CSR) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, USB_DEVICE_ID_XIROKU_SPX1) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, USB_DEVICE_ID_XIROKU_MPX1) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, USB_DEVICE_ID_XIROKU_CSR1) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, USB_DEVICE_ID_XIROKU_SPX2) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, USB_DEVICE_ID_XIROKU_MPX2) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_XIROKU, USB_DEVICE_ID_XIROKU_CSR2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_X_TENSIONS, USB_DEVICE_ID_SPEEDLINK_VAD_CEZANNE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },
@@@ -1768,11 -1787,12 +1787,12 @@@ static const struct hid_device_id hid_i
        { 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_DREAM_CHEEKY, 0x000a) },
        { 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) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0001) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0002) },
-       { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0003) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0004) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_4_PHIDGETSERVO_30) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_1_PHIDGETSERVO_30) },
        { HID_USB_DEVICE(USB_VENDOR_ID_PANJIT, 0x0004) },
        { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_POWERCOM, USB_DEVICE_ID_POWERCOM_UPS) },
 +#if defined(CONFIG_MOUSE_SYNAPTICS_USB) || defined(CONFIG_MOUSE_SYNAPTICS_USB_MODULE)
 +      { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_INT_TP) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_CPAD) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_STICK) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_WP) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_COMP_TP) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_WTP) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_DPAD) },
 +#endif
        { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP) },
        { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) },
diff --combined drivers/hid/hid-ids.h
@@@ -21,6 -21,7 +21,7 @@@
  #define USB_VENDOR_ID_3M              0x0596
  #define USB_DEVICE_ID_3M1968          0x0500
  #define USB_DEVICE_ID_3M2256          0x0502
+ #define USB_DEVICE_ID_3M3266          0x0506
  
  #define USB_VENDOR_ID_A4TECH          0x09da
  #define USB_DEVICE_ID_A4TECH_WCP32PU  0x0006
  #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI  0x0239
  #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO   0x023a
  #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS   0x023b
+ #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI  0x0255
  #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO   0x0256
  #define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY  0x030a
  #define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY   0x030b
  #define USB_DEVICE_ID_ATEN_4PORTKVM   0x2205
  #define USB_DEVICE_ID_ATEN_4PORTKVMC  0x2208
  
+ #define USB_VENDOR_ID_ATMEL           0x03eb
+ #define USB_DEVICE_ID_ATMEL_MULTITOUCH        0x211c
  #define USB_VENDOR_ID_AVERMEDIA               0x07ca
  #define USB_DEVICE_ID_AVER_FM_MR800   0xb800
  
  
  #define USB_VENDOR_ID_DWAV            0x0eef
  #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_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480D     0x480d
+ #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_480E     0x480e
+ #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_720C     0x720c
+ #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_726B     0x726b
+ #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72A1     0x72a1
+ #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_72FA     0x72fa
+ #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_7302     0x7302
+ #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_A001     0xa001
  
  #define USB_VENDOR_ID_ELECOM          0x056e
  #define USB_DEVICE_ID_ELECOM_BM084    0x0061
  #define USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR        0x0002
  
  #define USB_VENDOR_ID_GENERAL_TOUCH   0x0dfc
- #define USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS 0x0001
+ #define USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS 0x0003
  
  #define USB_VENDOR_ID_GLAB            0x06c2
  #define USB_DEVICE_ID_4_PHIDGETSERVO_30       0x0038
  #define USB_VENDOR_ID_HANVON          0x20b3
  #define USB_DEVICE_ID_HANVON_MULTITOUCH       0x0a18
  
+ #define USB_VENDOR_ID_HANVON_ALT      0x22ed
+ #define USB_DEVICE_ID_HANVON_ALT_MULTITOUCH   0x1010
  #define USB_VENDOR_ID_HAPP            0x078b
  #define USB_DEVICE_ID_UGCI_DRIVING    0x0010
  #define USB_DEVICE_ID_UGCI_FLYING     0x0020
  #define USB_VENDOR_ID_PI_ENGINEERING  0x05f3
  #define USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL        0xff
  
+ #define USB_VENDOR_ID_PIXART                          0x093a
+ #define USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN     0x8001
+ #define USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1    0x8002
+ #define USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2    0x8003
  #define USB_VENDOR_ID_PLAYDOTCOM      0x0b43
  #define USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII    0x0003
  
  #define USB_DEVICE_ID_PRODIGE_CORDLESS        0x3062
  
  #define USB_VENDOR_ID_QUANTA          0x0408
- #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH    0x3000
+ #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH            0x3000
+ #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3001               0x3001
+ #define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008               0x3008
  #define USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN 0x3001
  
  #define USB_VENDOR_ID_ROCCAT          0x1e7d
  #define USB_DEVICE_ID_ROCCAT_ARVO     0x30d4
+ #define USB_DEVICE_ID_ROCCAT_ISKU     0x319c
  #define USB_DEVICE_ID_ROCCAT_KONE     0x2ced
  #define USB_DEVICE_ID_ROCCAT_KONEPLUS 0x2d51
  #define USB_DEVICE_ID_ROCCAT_KOVAPLUS 0x2d50
  #define USB_DEVICE_ID_SYMBOL_SCANNER_1        0x0800
  #define USB_DEVICE_ID_SYMBOL_SCANNER_2        0x1300
  
 +#define USB_VENDOR_ID_SYNAPTICS               0x06cb
 +#define USB_DEVICE_ID_SYNAPTICS_TP    0x0001
 +#define USB_DEVICE_ID_SYNAPTICS_INT_TP        0x0002
 +#define USB_DEVICE_ID_SYNAPTICS_CPAD  0x0003
 +#define USB_DEVICE_ID_SYNAPTICS_TS    0x0006
 +#define USB_DEVICE_ID_SYNAPTICS_STICK 0x0007
 +#define USB_DEVICE_ID_SYNAPTICS_WP    0x0008
 +#define USB_DEVICE_ID_SYNAPTICS_COMP_TP       0x0009
 +#define USB_DEVICE_ID_SYNAPTICS_WTP   0x0010
 +#define USB_DEVICE_ID_SYNAPTICS_DPAD  0x0013
 +
  #define USB_VENDOR_ID_THRUSTMASTER    0x044f
  
  #define USB_VENDOR_ID_TOPSEED         0x0766
  
  #define USB_VENDOR_ID_WACOM           0x056a
  #define USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH        0x81
+ #define USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH   0x00BD
  
  #define USB_VENDOR_ID_WALTOP                          0x172f
  #define USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH     0x0032
  #define USB_VENDOR_ID_XAT     0x2505
  #define USB_DEVICE_ID_XAT_CSR 0x0220
  
+ #define USB_VENDOR_ID_XIROKU          0x1477
+ #define USB_DEVICE_ID_XIROKU_SPX      0x1006
+ #define USB_DEVICE_ID_XIROKU_MPX      0x1007
+ #define USB_DEVICE_ID_XIROKU_CSR      0x100e
+ #define USB_DEVICE_ID_XIROKU_SPX1     0x1021
+ #define USB_DEVICE_ID_XIROKU_CSR1     0x1022
+ #define USB_DEVICE_ID_XIROKU_MPX1     0x1023
+ #define USB_DEVICE_ID_XIROKU_SPX2     0x1024
+ #define USB_DEVICE_ID_XIROKU_CSR2     0x1025
+ #define USB_DEVICE_ID_XIROKU_MPX2     0x1026
  #define USB_VENDOR_ID_YEALINK         0x6993
  #define USB_DEVICE_ID_YEALINK_P1K_P4K_B2K     0xb001
  
diff --combined drivers/input/evdev.c
@@@ -46,7 -46,6 +46,7 @@@ struct evdev_client 
        struct fasync_struct *fasync;
        struct evdev *evdev;
        struct list_head node;
 +      int clkid;
        unsigned int bufsize;
        struct input_event buffer[];
  };
@@@ -55,12 -54,8 +55,12 @@@ static struct evdev *evdev_table[EVDEV_
  static DEFINE_MUTEX(evdev_table_mutex);
  
  static void evdev_pass_event(struct evdev_client *client,
 -                           struct input_event *event)
 +                           struct input_event *event,
 +                           ktime_t mono, ktime_t real)
  {
 +      event->time = ktime_to_timeval(client->clkid == CLOCK_MONOTONIC ?
 +                                      mono : real);
 +
        /* Interrupts are disabled, just acquire the lock. */
        spin_lock(&client->buffer_lock);
  
@@@ -99,11 -94,8 +99,11 @@@ static void evdev_event(struct input_ha
        struct evdev *evdev = handle->private;
        struct evdev_client *client;
        struct input_event event;
 +      ktime_t time_mono, time_real;
 +
 +      time_mono = ktime_get();
 +      time_real = ktime_sub(time_mono, ktime_get_monotonic_offset());
  
 -      do_gettimeofday(&event.time);
        event.type = type;
        event.code = code;
        event.value = value;
        rcu_read_lock();
  
        client = rcu_dereference(evdev->grab);
 +
        if (client)
 -              evdev_pass_event(client, &event);
 +              evdev_pass_event(client, &event, time_mono, time_real);
        else
                list_for_each_entry_rcu(client, &evdev->client_list, node)
 -                      evdev_pass_event(client, &event);
 +                      evdev_pass_event(client, &event, time_mono, time_real);
  
        rcu_read_unlock();
  
@@@ -395,7 -386,7 +395,7 @@@ static ssize_t evdev_read(struct file *
        struct evdev_client *client = file->private_data;
        struct evdev *evdev = client->evdev;
        struct input_event event;
-       int retval;
+       int retval = 0;
  
        if (count < input_event_size())
                return -EINVAL;
@@@ -694,14 -685,6 +694,14 @@@ static long evdev_do_ioctl(struct file 
                else
                        return evdev_ungrab(evdev, client);
  
 +      case EVIOCSCLOCKID:
 +              if (copy_from_user(&i, p, sizeof(unsigned int)))
 +                      return -EFAULT;
 +              if (i != CLOCK_MONOTONIC && i != CLOCK_REALTIME)
 +                      return -EINVAL;
 +              client->clkid = i;
 +              return 0;
 +
        case EVIOCGKEYCODE:
                return evdev_handle_get_keycode(dev, p);
  
@@@ -88,7 -88,7 +88,7 @@@ static void ske_keypad_set_bits(struct 
   *
   * Enable Multi key press detection, auto scan mode
   */
 -static int __devinit ske_keypad_chip_init(struct ske_keypad *keypad)
 +static int __init ske_keypad_chip_init(struct ske_keypad *keypad)
  {
        u32 value;
        int timeout = 50;
@@@ -198,7 -198,7 +198,7 @@@ static irqreturn_t ske_keypad_irq(int i
        return IRQ_HANDLED;
  }
  
 -static int __devinit ske_keypad_probe(struct platform_device *pdev)
 +static int __init ske_keypad_probe(struct platform_device *pdev)
  {
        const struct ske_keypad_platform_data *plat = pdev->dev.platform_data;
        struct ske_keypad *keypad;
@@@ -344,7 -344,7 +344,7 @@@ static int __devexit ske_keypad_remove(
        return 0;
  }
  
 -#ifdef CONFIG_PM
 +#ifdef CONFIG_PM_SLEEP
  static int ske_keypad_suspend(struct device *dev)
  {
        struct platform_device *pdev = to_platform_device(dev);
@@@ -372,20 -372,36 +372,31 @@@ static int ske_keypad_resume(struct dev
  
        return 0;
  }
 -
 -static const struct dev_pm_ops ske_keypad_dev_pm_ops = {
 -      .suspend = ske_keypad_suspend,
 -      .resume = ske_keypad_resume,
 -};
  #endif
  
 +static SIMPLE_DEV_PM_OPS(ske_keypad_dev_pm_ops,
 +                       ske_keypad_suspend, ske_keypad_resume);
 +
  static struct platform_driver ske_keypad_driver = {
        .driver = {
                .name = "nmk-ske-keypad",
                .owner  = THIS_MODULE,
 -#ifdef CONFIG_PM
                .pm = &ske_keypad_dev_pm_ops,
 -#endif
        },
 -      .probe = ske_keypad_probe,
        .remove = __devexit_p(ske_keypad_remove),
  };
- module_platform_driver(ske_keypad_driver);
+ static int __init ske_keypad_init(void)
+ {
+       return platform_driver_probe(&ske_keypad_driver, ske_keypad_probe);
+ }
+ module_init(ske_keypad_init);
+ static void __exit ske_keypad_exit(void)
+ {
+       platform_driver_unregister(&ske_keypad_driver);
+ }
+ module_exit(ske_keypad_exit);
  
  MODULE_LICENSE("GPL v2");
  MODULE_AUTHOR("Naveen Kumar <naveen.gaddipati@stericsson.com> / Sundar Iyer <sundar.iyer@stericsson.com>");
@@@ -23,6 -23,8 +23,8 @@@
  #include <linux/pm.h>
  #include <linux/pm_runtime.h>
  #include <linux/slab.h>
+ #include <linux/of.h>
+ #include <linux/of_gpio.h>
  #include <linux/sched.h>
  #include <linux/input/samsung-keypad.h>
  
@@@ -72,31 -74,26 +74,26 @@@ struct samsung_keypad 
        bool stopped;
        bool wake_enabled;
        int irq;
+       enum samsung_keypad_type type;
        unsigned int row_shift;
        unsigned int rows;
        unsigned int cols;
        unsigned int row_state[SAMSUNG_MAX_COLS];
+ #ifdef CONFIG_OF
+       int row_gpios[SAMSUNG_MAX_ROWS];
+       int col_gpios[SAMSUNG_MAX_COLS];
+ #endif
        unsigned short keycodes[];
  };
  
- static int samsung_keypad_is_s5pv210(struct device *dev)
- {
-       struct platform_device *pdev = to_platform_device(dev);
-       enum samsung_keypad_type type =
-               platform_get_device_id(pdev)->driver_data;
-       return type == KEYPAD_TYPE_S5PV210;
- }
  static void samsung_keypad_scan(struct samsung_keypad *keypad,
                                unsigned int *row_state)
  {
-       struct device *dev = keypad->input_dev->dev.parent;
        unsigned int col;
        unsigned int val;
  
        for (col = 0; col < keypad->cols; col++) {
-               if (samsung_keypad_is_s5pv210(dev)) {
+               if (keypad->type == KEYPAD_TYPE_S5PV210) {
                        val = S5PV210_KEYIFCOLEN_MASK;
                        val &= ~(1 << col) << 8;
                } else {
@@@ -178,7 -175,7 +175,7 @@@ static irqreturn_t samsung_keypad_irq(i
  
        } while (key_down && !keypad->stopped);
  
 -      pm_runtime_put_sync(&keypad->pdev->dev);
 +      pm_runtime_put(&keypad->pdev->dev);
  
        return IRQ_HANDLED;
  }
@@@ -202,7 -199,7 +199,7 @@@ static void samsung_keypad_start(struc
        /* KEYIFCOL reg clear. */
        writel(0, keypad->base + SAMSUNG_KEYIFCOL);
  
 -      pm_runtime_put_sync(&keypad->pdev->dev);
 +      pm_runtime_put(&keypad->pdev->dev);
  }
  
  static void samsung_keypad_stop(struct samsung_keypad *keypad)
         */
        enable_irq(keypad->irq);
  
 -      pm_runtime_put_sync(&keypad->pdev->dev);
 +      pm_runtime_put(&keypad->pdev->dev);
  }
  
  static int samsung_keypad_open(struct input_dev *input_dev)
@@@ -251,6 -248,126 +248,126 @@@ static void samsung_keypad_close(struc
        samsung_keypad_stop(keypad);
  }
  
+ #ifdef CONFIG_OF
+ static struct samsung_keypad_platdata *samsung_keypad_parse_dt(
+                               struct device *dev)
+ {
+       struct samsung_keypad_platdata *pdata;
+       struct matrix_keymap_data *keymap_data;
+       uint32_t *keymap, num_rows = 0, num_cols = 0;
+       struct device_node *np = dev->of_node, *key_np;
+       unsigned int key_count = 0;
+       pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
+       if (!pdata) {
+               dev_err(dev, "could not allocate memory for platform data\n");
+               return NULL;
+       }
+       of_property_read_u32(np, "samsung,keypad-num-rows", &num_rows);
+       of_property_read_u32(np, "samsung,keypad-num-columns", &num_cols);
+       if (!num_rows || !num_cols) {
+               dev_err(dev, "number of keypad rows/columns not specified\n");
+               return NULL;
+       }
+       pdata->rows = num_rows;
+       pdata->cols = num_cols;
+       keymap_data = devm_kzalloc(dev, sizeof(*keymap_data), GFP_KERNEL);
+       if (!keymap_data) {
+               dev_err(dev, "could not allocate memory for keymap data\n");
+               return NULL;
+       }
+       pdata->keymap_data = keymap_data;
+       for_each_child_of_node(np, key_np)
+               key_count++;
+       keymap_data->keymap_size = key_count;
+       keymap = devm_kzalloc(dev, sizeof(uint32_t) * key_count, GFP_KERNEL);
+       if (!keymap) {
+               dev_err(dev, "could not allocate memory for keymap\n");
+               return NULL;
+       }
+       keymap_data->keymap = keymap;
+       for_each_child_of_node(np, key_np) {
+               u32 row, col, key_code;
+               of_property_read_u32(key_np, "keypad,row", &row);
+               of_property_read_u32(key_np, "keypad,column", &col);
+               of_property_read_u32(key_np, "linux,code", &key_code);
+               *keymap++ = KEY(row, col, key_code);
+       }
+       if (of_get_property(np, "linux,input-no-autorepeat", NULL))
+               pdata->no_autorepeat = true;
+       if (of_get_property(np, "linux,input-wakeup", NULL))
+               pdata->wakeup = true;
+       return pdata;
+ }
+ static void samsung_keypad_parse_dt_gpio(struct device *dev,
+                               struct samsung_keypad *keypad)
+ {
+       struct device_node *np = dev->of_node;
+       int gpio, ret, row, col;
+       for (row = 0; row < keypad->rows; row++) {
+               gpio = of_get_named_gpio(np, "row-gpios", row);
+               keypad->row_gpios[row] = gpio;
+               if (!gpio_is_valid(gpio)) {
+                       dev_err(dev, "keypad row[%d]: invalid gpio %d\n",
+                                       row, gpio);
+                       continue;
+               }
+               ret = gpio_request(gpio, "keypad-row");
+               if (ret)
+                       dev_err(dev, "keypad row[%d] gpio request failed\n",
+                                       row);
+       }
+       for (col = 0; col < keypad->cols; col++) {
+               gpio = of_get_named_gpio(np, "col-gpios", col);
+               keypad->col_gpios[col] = gpio;
+               if (!gpio_is_valid(gpio)) {
+                       dev_err(dev, "keypad column[%d]: invalid gpio %d\n",
+                                       col, gpio);
+                       continue;
+               }
+               ret = gpio_request(gpio, "keypad-col");
+               if (ret)
+                       dev_err(dev, "keypad column[%d] gpio request failed\n",
+                                       col);
+       }
+ }
+ static void samsung_keypad_dt_gpio_free(struct samsung_keypad *keypad)
+ {
+       int cnt;
+       for (cnt = 0; cnt < keypad->rows; cnt++)
+               if (gpio_is_valid(keypad->row_gpios[cnt]))
+                       gpio_free(keypad->row_gpios[cnt]);
+       for (cnt = 0; cnt < keypad->cols; cnt++)
+               if (gpio_is_valid(keypad->col_gpios[cnt]))
+                       gpio_free(keypad->col_gpios[cnt]);
+ }
+ #else
+ static
+ struct samsung_keypad_platdata *samsung_keypad_parse_dt(struct device *dev)
+ {
+       return NULL;
+ }
+ static void samsung_keypad_dt_gpio_free(struct samsung_keypad *keypad)
+ {
+ }
+ #endif
  static int __devinit samsung_keypad_probe(struct platform_device *pdev)
  {
        const struct samsung_keypad_platdata *pdata;
        unsigned int keymap_size;
        int error;
  
-       pdata = pdev->dev.platform_data;
+       if (pdev->dev.of_node)
+               pdata = samsung_keypad_parse_dt(&pdev->dev);
+       else
+               pdata = pdev->dev.platform_data;
        if (!pdata) {
                dev_err(&pdev->dev, "no platform data defined\n");
                return -EINVAL;
        keypad->stopped = true;
        init_waitqueue_head(&keypad->wait);
  
+       if (pdev->dev.of_node) {
+ #ifdef CONFIG_OF
+               samsung_keypad_parse_dt_gpio(&pdev->dev, keypad);
+               keypad->type = of_device_is_compatible(pdev->dev.of_node,
+                                       "samsung,s5pv210-keypad");
+ #endif
+       } else {
+               keypad->type = platform_get_device_id(pdev)->driver_data;
+       }
        input_dev->name = pdev->name;
        input_dev->id.bustype = BUS_HOST;
        input_dev->dev.parent = &pdev->dev;
        if (error)
                goto err_free_irq;
  
+       if (pdev->dev.of_node) {
+               devm_kfree(&pdev->dev, (void *)pdata->keymap_data->keymap);
+               devm_kfree(&pdev->dev, (void *)pdata->keymap_data);
+               devm_kfree(&pdev->dev, (void *)pdata);
+       }
        return 0;
  
  err_free_irq:
        platform_set_drvdata(pdev, NULL);
  err_put_clk:
        clk_put(keypad->clk);
+       samsung_keypad_dt_gpio_free(keypad);
  err_unmap_base:
        iounmap(keypad->base);
  err_free_mem:
@@@ -398,6 -534,7 +534,7 @@@ static int __devexit samsung_keypad_rem
        free_irq(keypad->irq, keypad);
  
        clk_put(keypad->clk);
+       samsung_keypad_dt_gpio_free(keypad);
  
        iounmap(keypad->base);
        kfree(keypad);
@@@ -518,6 -655,17 +655,17 @@@ static const struct dev_pm_ops samsung_
                           samsung_keypad_runtime_resume, NULL)
  };
  
+ #ifdef CONFIG_OF
+ static const struct of_device_id samsung_keypad_dt_match[] = {
+       { .compatible = "samsung,s3c6410-keypad" },
+       { .compatible = "samsung,s5pv210-keypad" },
+       {},
+ };
+ MODULE_DEVICE_TABLE(of, samsung_keypad_dt_match);
+ #else
+ #define samsung_keypad_dt_match NULL
+ #endif
  static struct platform_device_id samsung_keypad_driver_ids[] = {
        {
                .name           = "samsung-keypad",
@@@ -536,6 -684,7 +684,7 @@@ static struct platform_driver samsung_k
        .driver         = {
                .name   = "samsung-keypad",
                .owner  = THIS_MODULE,
+               .of_match_table = samsung_keypad_dt_match,
                .pm     = &samsung_keypad_pm_ops,
        },
        .id_table       = samsung_keypad_driver_ids,
@@@ -60,7 -60,7 +60,7 @@@ static unsigned int psmouse_rate = 100
  module_param_named(rate, psmouse_rate, uint, 0644);
  MODULE_PARM_DESC(rate, "Report rate, in reports per second.");
  
- static unsigned int psmouse_smartscroll = 1;
+ static bool psmouse_smartscroll = 1;
  module_param_named(smartscroll, psmouse_smartscroll, bool, 0644);
  MODULE_PARM_DESC(smartscroll, "Logitech Smartscroll autorepeat, 1 = enabled (default), 0 = disabled.");
  
@@@ -1092,33 -1092,28 +1092,33 @@@ static void psmouse_initialize(struct p
   * psmouse_activate() enables the mouse so that we get motion reports from it.
   */
  
 -static void psmouse_activate(struct psmouse *psmouse)
 +int psmouse_activate(struct psmouse *psmouse)
  {
 -      if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE))
 +      if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE)) {
                psmouse_warn(psmouse, "Failed to enable mouse on %s\n",
                             psmouse->ps2dev.serio->phys);
 +              return -1;
 +      }
  
        psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
 +      return 0;
  }
  
 -
  /*
   * psmouse_deactivate() puts the mouse into poll mode so that we don't get motion
   * reports from it unless we explicitly request it.
   */
  
 -static void psmouse_deactivate(struct psmouse *psmouse)
 +int psmouse_deactivate(struct psmouse *psmouse)
  {
 -      if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE))
 +      if (ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE)) {
                psmouse_warn(psmouse, "Failed to deactivate mouse on %s\n",
                             psmouse->ps2dev.serio->phys);
 +              return -1;
 +      }
  
        psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
 +      return 0;
  }
  
  
@@@ -2,7 -2,7 +2,7 @@@
   * Finger Sensing Pad PS/2 mouse driver.
   *
   * Copyright (C) 2005-2007 Asia Vital Components Co., Ltd.
-  * Copyright (C) 2005-2010 Tai-hwa Liang, Sentelic Corporation.
+  * Copyright (C) 2005-2011 Tai-hwa Liang, Sentelic Corporation.
   *
   *   This program is free software; you can redistribute it and/or
   *   modify it under the terms of the GNU General Public License
@@@ -90,7 -90,8 +90,7 @@@ static int fsp_reg_read(struct psmouse 
         * to do that for writes because sysfs set helper does this for
         * us.
         */
 -      ps2_command(ps2dev, NULL, PSMOUSE_CMD_DISABLE);
 -      psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
 +      psmouse_deactivate(psmouse);
  
        ps2_begin_command(ps2dev);
  
  
   out:
        ps2_end_command(ps2dev);
 -      ps2_command(ps2dev, NULL, PSMOUSE_CMD_ENABLE);
 -      psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
 +      psmouse_activate(psmouse);
        dev_dbg(&ps2dev->serio->dev, "READ REG: 0x%02x is 0x%02x (rc = %d)\n",
                reg_addr, *reg_val, rc);
        return rc;
@@@ -160,7 -162,7 +160,7 @@@ static int fsp_reg_write(struct psmous
        ps2_sendbyte(ps2dev, v, FSP_CMD_TIMEOUT2);
  
        if (ps2_sendbyte(ps2dev, 0xf3, FSP_CMD_TIMEOUT) < 0)
-               return -1;
+               goto out;
  
        if ((v = fsp_test_invert_cmd(reg_val)) != reg_val) {
                /* inversion is required */
@@@ -211,7 -213,8 +211,7 @@@ static int fsp_page_reg_read(struct psm
        unsigned char param[3];
        int rc = -1;
  
 -      ps2_command(ps2dev, NULL, PSMOUSE_CMD_DISABLE);
 -      psmouse_set_state(psmouse, PSMOUSE_CMD_MODE);
 +      psmouse_deactivate(psmouse);
  
        ps2_begin_command(ps2dev);
  
  
   out:
        ps2_end_command(ps2dev);
 -      ps2_command(ps2dev, NULL, PSMOUSE_CMD_ENABLE);
 -      psmouse_set_state(psmouse, PSMOUSE_ACTIVATED);
 +      psmouse_activate(psmouse);
        dev_dbg(&ps2dev->serio->dev, "READ PAGE REG: 0x%02x (rc = %d)\n",
                *reg_val, rc);
        return rc;
@@@ -257,7 -261,7 +257,7 @@@ static int fsp_page_reg_write(struct ps
        ps2_sendbyte(ps2dev, 0x88, FSP_CMD_TIMEOUT2);
  
        if (ps2_sendbyte(ps2dev, 0xf3, FSP_CMD_TIMEOUT) < 0)
-               return -1;
+               goto out;
  
        if ((v = fsp_test_invert_cmd(reg_val)) != reg_val) {
                ps2_sendbyte(ps2dev, 0x47, FSP_CMD_TIMEOUT2);
@@@ -305,7 -309,7 +305,7 @@@ static int fsp_get_buttons(struct psmou
        };
        int val;
  
-       if (fsp_reg_read(psmouse, FSP_REG_TMOD_STATUS1, &val) == -1)
+       if (fsp_reg_read(psmouse, FSP_REG_TMOD_STATUS, &val) == -1)
                return -EIO;
  
        *btn = buttons[(val & 0x30) >> 4];
@@@ -98,9 -98,9 +98,9 @@@ struct psif 
        struct serio            *io;
        void __iomem            *regs;
        unsigned int            irq;
 -      unsigned int            open;
        /* Prevent concurrent writes to PSIF THR. */
        spinlock_t              lock;
 +      bool                    open;
  };
  
  static irqreturn_t psif_interrupt(int irq, void *_ptr)
@@@ -164,7 -164,7 +164,7 @@@ static int psif_open(struct serio *io
        psif_writel(psif, CR, PSIF_BIT(CR_TXEN) | PSIF_BIT(CR_RXEN));
        psif_writel(psif, IER, PSIF_BIT(RXRDY));
  
 -      psif->open = 1;
 +      psif->open = true;
  out:
        return retval;
  }
@@@ -173,7 -173,7 +173,7 @@@ static void psif_close(struct serio *io
  {
        struct psif *psif = io->port_data;
  
 -      psif->open = 0;
 +      psif->open = false;
  
        psif_writel(psif, IDR, ~0UL);
        psif_writel(psif, CR, PSIF_BIT(CR_TXDIS) | PSIF_BIT(CR_RXDIS));
@@@ -319,10 -319,9 +319,10 @@@ static int __exit psif_remove(struct pl
        return 0;
  }
  
 -#ifdef CONFIG_PM
 -static int psif_suspend(struct platform_device *pdev, pm_message_t state)
 +#ifdef CONFIG_PM_SLEEP
 +static int psif_suspend(struct device *dev)
  {
 +      struct platform_device *pdev = to_platform_device(dev);
        struct psif *psif = platform_get_drvdata(pdev);
  
        if (psif->open) {
        return 0;
  }
  
 -static int psif_resume(struct platform_device *pdev)
 +static int psif_resume(struct device *dev)
  {
 +      struct platform_device *pdev = to_platform_device(dev);
        struct psif *psif = platform_get_drvdata(pdev);
  
        if (psif->open) {
  
        return 0;
  }
 -#else
 -#define psif_suspend  NULL
 -#define psif_resume   NULL
  #endif
  
 +static SIMPLE_DEV_PM_OPS(psif_pm_ops, psif_suspend, psif_resume);
 +
  static struct platform_driver psif_driver = {
        .remove         = __exit_p(psif_remove),
        .driver         = {
                .name   = "atmel_psif",
                .owner  = THIS_MODULE,
 +              .pm     = &psif_pm_ops,
        },
 -      .suspend        = psif_suspend,
 -      .resume         = psif_resume,
  };
- module_platform_driver(psif_driver);
+ static int __init psif_init(void)
+ {
+       return platform_driver_probe(&psif_driver, psif_probe);
+ }
+ static void __exit psif_exit(void)
+ {
+       platform_driver_unregister(&psif_driver);
+ }
+ module_init(psif_init);
+ module_exit(psif_exit);
  
  MODULE_AUTHOR("Hans-Christian Egtvedt <egtvedt@samfundet.no>");
  MODULE_DESCRIPTION("Atmel AVR32 PSIF PS/2 driver");
@@@ -176,7 -176,7 +176,7 @@@ static int wacom_parse_logical_collecti
  
                /* Logical collection is only used by 3rd gen Bamboo Touch */
                features->pktlen = WACOM_PKGLEN_BBTOUCH3;
 -              features->device_type = BTN_TOOL_DOUBLETAP;
 +              features->device_type = BTN_TOOL_FINGER;
  
                /*
                 * Stylus and Touch have same active area
@@@ -286,10 -286,12 +286,10 @@@ static int wacom_parse_hid(struct usb_i
                                                if (features->type == TABLETPC2FG) {
                                                        /* need to reset back */
                                                        features->pktlen = WACOM_PKGLEN_TPC2FG;
 -                                                      features->device_type = BTN_TOOL_DOUBLETAP;
                                                }
                                                if (features->type == BAMBOO_PT) {
                                                        /* need to reset back */
                                                        features->pktlen = WACOM_PKGLEN_BBTOUCH;
 -                                                      features->device_type = BTN_TOOL_DOUBLETAP;
                                                        features->x_phy =
                                                                get_unaligned_le16(&report[i + 5]);
                                                        features->x_max =
                                                if (features->type == TABLETPC2FG) {
                                                        /* need to reset back */
                                                        features->pktlen = WACOM_PKGLEN_TPC2FG;
 -                                                      features->device_type = BTN_TOOL_DOUBLETAP;
                                                        features->y_max =
                                                                get_unaligned_le16(&report[i + 3]);
                                                        features->y_phy =
                                                } else if (features->type == BAMBOO_PT) {
                                                        /* need to reset back */
                                                        features->pktlen = WACOM_PKGLEN_BBTOUCH;
 -                                                      features->device_type = BTN_TOOL_DOUBLETAP;
                                                        features->y_phy =
                                                                get_unaligned_le16(&report[i + 3]);
                                                        features->y_max =
@@@ -996,21 -1000,4 +996,4 @@@ static struct usb_driver wacom_driver 
        .supports_autosuspend = 1,
  };
  
- static int __init wacom_init(void)
- {
-       int result;
-       result = usb_register(&wacom_driver);
-       if (result == 0)
-               printk(KERN_INFO KBUILD_MODNAME ": " DRIVER_VERSION ":"
-                      DRIVER_DESC "\n");
-       return result;
- }
- static void __exit wacom_exit(void)
- {
-       usb_deregister(&wacom_driver);
- }
- module_init(wacom_init);
- module_exit(wacom_exit);
+ module_usb_driver(wacom_driver);
@@@ -832,24 -832,12 +832,24 @@@ static int wacom_tpc_irq(struct wacom_w
  
        dbg("wacom_tpc_irq: received report #%d", data[0]);
  
 -      if (len == WACOM_PKGLEN_TPC1FG || data[0] == WACOM_REPORT_TPC1FG)
 -              return wacom_tpc_single_touch(wacom, len);
 -      else if (data[0] == WACOM_REPORT_TPC2FG)
 -              return wacom_tpc_mt_touch(wacom);
 -      else if (data[0] == WACOM_REPORT_PENABLED)
 -              return wacom_tpc_pen(wacom);
 +      switch (len) {
 +      case WACOM_PKGLEN_TPC1FG:
 +               return wacom_tpc_single_touch(wacom, len);
 +
 +      case WACOM_PKGLEN_TPC2FG:
 +              return wacom_tpc_mt_touch(wacom);
 +
 +      default:
 +              switch (data[0]) {
 +              case WACOM_REPORT_TPC1FG:
 +              case WACOM_REPORT_TPCHID:
 +              case WACOM_REPORT_TPCST:
 +                      return wacom_tpc_single_touch(wacom, len);
 +
 +              case WACOM_REPORT_PENABLED:
 +                      return wacom_tpc_pen(wacom);
 +              }
 +      }
  
        return 0;
  }
@@@ -1329,7 -1317,7 +1329,7 @@@ void wacom_setup_input_capabilities(str
                break;
  
        case TABLETPC2FG:
 -              if (features->device_type == BTN_TOOL_DOUBLETAP) {
 +              if (features->device_type == BTN_TOOL_FINGER) {
  
                        input_mt_init_slots(input_dev, 2);
                        input_set_abs_params(input_dev, ABS_MT_TOOL_TYPE,
  
                __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
  
 -              if (features->device_type == BTN_TOOL_DOUBLETAP) {
 +              if (features->device_type == BTN_TOOL_FINGER) {
                        __set_bit(BTN_LEFT, input_dev->keybit);
                        __set_bit(BTN_FORWARD, input_dev->keybit);
                        __set_bit(BTN_BACK, input_dev->keybit);
@@@ -1634,6 -1622,9 +1634,9 @@@ static const struct wacom_features waco
  static const struct wacom_features wacom_features_0xE6 =
        { "Wacom ISDv4 E6",       WACOM_PKGLEN_TPC2FG,    27760, 15694,  255,
          0, TABLETPC2FG, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
+ static const struct wacom_features wacom_features_0xEC =
+       { "Wacom ISDv4 EC",       WACOM_PKGLEN_GRAPHIRE,  25710, 14500,  255,
+         0, TABLETPC,    WACOM_INTUOS_RES, WACOM_INTUOS_RES };
  static const struct wacom_features wacom_features_0x47 =
        { "Wacom Intuos2 6x8",    WACOM_PKGLEN_INTUOS,    20320, 16240, 1023,
          31, INTUOS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
@@@ -1787,6 -1778,7 +1790,7 @@@ const struct usb_device_id wacom_ids[] 
        { USB_DEVICE_WACOM(0xE2) },
        { USB_DEVICE_WACOM(0xE3) },
        { USB_DEVICE_WACOM(0xE6) },
+       { USB_DEVICE_WACOM(0xEC) },
        { USB_DEVICE_WACOM(0x47) },
        { USB_DEVICE_WACOM(0xF4) },
        { USB_DEVICE_LENOVO(0x6004) },
@@@ -392,10 -392,9 +392,10 @@@ static int __exit atmel_wm97xx_remove(s
        return 0;
  }
  
 -#ifdef CONFIG_PM
 -static int atmel_wm97xx_suspend(struct platform_device *pdev, pm_message_t msg)
 +#ifdef CONFIG_PM_SLEEP
 +static int atmel_wm97xx_suspend(struct *dev)
  {
 +      struct platform_device *pdev = to_platform_device(dev);
        struct atmel_wm97xx *atmel_wm97xx = platform_get_drvdata(pdev);
  
        ac97c_writel(atmel_wm97xx, IDR, AC97C_INT_CBEVT);
        return 0;
  }
  
 -static int atmel_wm97xx_resume(struct platform_device *pdev)
 +static int atmel_wm97xx_resume(struct device *dev)
  {
 +      struct platform_device *pdev = to_platform_device(dev);
        struct atmel_wm97xx *atmel_wm97xx = platform_get_drvdata(pdev);
        struct wm97xx *wm = atmel_wm97xx->wm;
  
  
        return 0;
  }
 -#else
 -#define atmel_wm97xx_suspend  NULL
 -#define atmel_wm97xx_resume   NULL
  #endif
  
 +static SIMPLE_DEV_PM_OPS(atmel_wm97xx_pm_ops,
 +                       atmel_wm97xx_suspend, atmel_wm97xx_resume);
 +
  static struct platform_driver atmel_wm97xx_driver = {
        .remove         = __exit_p(atmel_wm97xx_remove),
        .driver         = {
 -              .name = "wm97xx-touch",
 +              .name   = "wm97xx-touch",
 +              .owner  = THIS_MODULE,
 +              .pm     = &atmel_wm97xx_pm_ops,
        },
 -      .suspend        = atmel_wm97xx_suspend,
 -      .resume         = atmel_wm97xx_resume,
  };
- module_platform_driver(atmel_wm97xx_driver);
+ static int __init atmel_wm97xx_init(void)
+ {
+       return platform_driver_probe(&atmel_wm97xx_driver, atmel_wm97xx_probe);
+ }
+ module_init(atmel_wm97xx_init);
+ static void __exit atmel_wm97xx_exit(void)
+ {
+       platform_driver_unregister(&atmel_wm97xx_driver);
+ }
+ module_exit(atmel_wm97xx_exit);
  
  MODULE_AUTHOR("Hans-Christian Egtvedt <egtvedt@samfundet.no>");
  MODULE_DESCRIPTION("wm97xx continuous touch driver for Atmel AT91 and AVR32");
@@@ -17,7 -17,6 +17,7 @@@
   *  - Zytronic capacitive touchscreen
   *  - NEXIO/iNexio
   *  - Elo TouchSystems 2700 IntelliTouch
 + *  - EasyTouch USB Dual/Multi touch controller from Data Modul
   *
   * Copyright (C) 2004-2007 by Daniel Ritz <daniel.ritz@gmx.ch>
   * Copyright (C) by Todd E. Johnson (mtouchusb.c)
  #define DRIVER_AUTHOR         "Daniel Ritz <daniel.ritz@gmx.ch>"
  #define DRIVER_DESC           "USB Touchscreen Driver"
  
- static int swap_xy;
+ static bool swap_xy;
  module_param(swap_xy, bool, 0644);
  MODULE_PARM_DESC(swap_xy, "If set X and Y axes are swapped.");
  
- static int hwcalib_xy;
+ static bool hwcalib_xy;
  module_param(hwcalib_xy, bool, 0644);
  MODULE_PARM_DESC(hwcalib_xy, "If set hw-calibrated X/Y are used if available");
  
@@@ -141,7 -140,6 +141,7 @@@ enum 
        DEVTYPE_TC45USB,
        DEVTYPE_NEXIO,
        DEVTYPE_ELO,
 +      DEVTYPE_ETOUCH,
  };
  
  #define USB_DEVICE_HID_CLASS(vend, prod) \
@@@ -247,10 -245,6 +247,10 @@@ static const struct usb_device_id usbto
        {USB_DEVICE(0x04e7, 0x0020), .driver_info = DEVTYPE_ELO},
  #endif
  
 +#ifdef CONFIG_TOUCHSCREEN_USB_EASYTOUCH
 +      {USB_DEVICE(0x7374, 0x0001), .driver_info = DEVTYPE_ETOUCH},
 +#endif
 +
        {}
  };
  
@@@ -332,51 -326,6 +332,51 @@@ static int egalax_get_pkt_len(unsigned 
  }
  #endif
  
 +/*****************************************************************************
 + * EasyTouch part
 + */
 +
 +#ifdef CONFIG_TOUCHSCREEN_USB_EASYTOUCH
 +
 +#ifndef MULTI_PACKET
 +#define MULTI_PACKET
 +#endif
 +
 +#define ETOUCH_PKT_TYPE_MASK          0xFE
 +#define ETOUCH_PKT_TYPE_REPT          0x80
 +#define ETOUCH_PKT_TYPE_REPT2         0xB0
 +#define ETOUCH_PKT_TYPE_DIAG          0x0A
 +
 +static int etouch_read_data(struct usbtouch_usb *dev, unsigned char *pkt)
 +{
 +      if ((pkt[0] & ETOUCH_PKT_TYPE_MASK) != ETOUCH_PKT_TYPE_REPT &&
 +              (pkt[0] & ETOUCH_PKT_TYPE_MASK) != ETOUCH_PKT_TYPE_REPT2)
 +              return 0;
 +
 +      dev->x = ((pkt[1] & 0x1F) << 7) | (pkt[2] & 0x7F);
 +      dev->y = ((pkt[3] & 0x1F) << 7) | (pkt[4] & 0x7F);
 +      dev->touch = pkt[0] & 0x01;
 +
 +      return 1;
 +}
 +
 +static int etouch_get_pkt_len(unsigned char *buf, int len)
 +{
 +      switch (buf[0] & ETOUCH_PKT_TYPE_MASK) {
 +      case ETOUCH_PKT_TYPE_REPT:
 +      case ETOUCH_PKT_TYPE_REPT2:
 +              return 5;
 +
 +      case ETOUCH_PKT_TYPE_DIAG:
 +              if (len < 2)
 +                      return -1;
 +
 +              return buf[1] + 2;
 +      }
 +
 +      return 0;
 +}
 +#endif
  
  /*****************************************************************************
   * PanJit Part
@@@ -1226,18 -1175,6 +1226,18 @@@ static struct usbtouch_device_info usbt
                .exit           = nexio_exit,
        },
  #endif
 +#ifdef CONFIG_TOUCHSCREEN_USB_EASYTOUCH
 +      [DEVTYPE_ETOUCH] = {
 +              .min_xc         = 0x0,
 +              .max_xc         = 0x07ff,
 +              .min_yc         = 0x0,
 +              .max_yc         = 0x07ff,
 +              .rept_size      = 16,
 +              .process_pkt    = usbtouch_process_multi,
 +              .get_pkt_len    = etouch_get_pkt_len,
 +              .read_data      = etouch_read_data,
 +      },
 +#endif
  };
  
  
@@@ -1679,18 -1616,7 +1679,7 @@@ static struct usb_driver usbtouch_drive
        .supports_autosuspend = 1,
  };
  
- static int __init usbtouch_init(void)
- {
-       return usb_register(&usbtouch_driver);
- }
- static void __exit usbtouch_cleanup(void)
- {
-       usb_deregister(&usbtouch_driver);
- }
- module_init(usbtouch_init);
- module_exit(usbtouch_cleanup);
+ module_usb_driver(usbtouch_driver);
  
  MODULE_AUTHOR(DRIVER_AUTHOR);
  MODULE_DESCRIPTION(DRIVER_DESC);
@@@ -131,7 -131,7 +131,7 @@@ static inline s64 timekeeping_get_ns_ra
        /* calculate the delta since the last update_wall_time: */
        cycle_delta = (cycle_now - clock->cycle_last) & clock->mask;
  
-       /* return delta convert to nanoseconds using ntp adjusted mult. */
+       /* return delta convert to nanoseconds. */
        return clocksource_cyc2ns(cycle_delta, clock->mult, clock->shift);
  }
  
@@@ -249,6 -249,8 +249,8 @@@ ktime_t ktime_get(void
                secs = xtime.tv_sec + wall_to_monotonic.tv_sec;
                nsecs = xtime.tv_nsec + wall_to_monotonic.tv_nsec;
                nsecs += timekeeping_get_ns();
+               /* If arch requires, add in gettimeoffset() */
+               nsecs += arch_gettimeoffset();
  
        } while (read_seqretry(&xtime_lock, seq));
        /*
@@@ -280,6 -282,8 +282,8 @@@ void ktime_get_ts(struct timespec *ts
                *ts = xtime;
                tomono = wall_to_monotonic;
                nsecs = timekeeping_get_ns();
+               /* If arch requires, add in gettimeoffset() */
+               nsecs += arch_gettimeoffset();
  
        } while (read_seqretry(&xtime_lock, seq));
  
@@@ -802,14 -806,44 +806,44 @@@ static void timekeeping_adjust(s64 offs
        s64 error, interval = timekeeper.cycle_interval;
        int adj;
  
+       /*
+        * The point of this is to check if the error is greater then half
+        * an interval.
+        *
+        * First we shift it down from NTP_SHIFT to clocksource->shifted nsecs.
+        *
+        * Note we subtract one in the shift, so that error is really error*2.
+        * This "saves" dividing(shifting) interval twice, but keeps the
+        * (error > interval) comparison as still measuring if error is
+        * larger then half an interval.
+        *
+        * Note: It does not "save" on aggravation when reading the code.
+        */
        error = timekeeper.ntp_error >> (timekeeper.ntp_error_shift - 1);
        if (error > interval) {
+               /*
+                * We now divide error by 4(via shift), which checks if
+                * the error is greater then twice the interval.
+                * If it is greater, we need a bigadjust, if its smaller,
+                * we can adjust by 1.
+                */
                error >>= 2;
+               /*
+                * XXX - In update_wall_time, we round up to the next
+                * nanosecond, and store the amount rounded up into
+                * the error. This causes the likely below to be unlikely.
+                *
+                * The proper fix is to avoid rounding up by using
+                * the high precision timekeeper.xtime_nsec instead of
+                * xtime.tv_nsec everywhere. Fixing this will take some
+                * time.
+                */
                if (likely(error <= interval))
                        adj = 1;
                else
                        adj = timekeeping_bigadjust(error, &interval, &offset);
        } else if (error < -interval) {
+               /* See comment above, this is just switched for the negative */
                error >>= 2;
                if (likely(error >= -interval)) {
                        adj = -1;
                        offset = -offset;
                } else
                        adj = timekeeping_bigadjust(error, &interval, &offset);
-       } else
+       } else /* No adjustment needed */
                return;
  
+       WARN_ONCE(timekeeper.clock->maxadj &&
+                       (timekeeper.mult + adj > timekeeper.clock->mult +
+                                               timekeeper.clock->maxadj),
+                       "Adjusting %s more then 11%% (%ld vs %ld)\n",
+                       timekeeper.clock->name, (long)timekeeper.mult + adj,
+                       (long)timekeeper.clock->mult +
+                               timekeeper.clock->maxadj);
+       /*
+        * So the following can be confusing.
+        *
+        * To keep things simple, lets assume adj == 1 for now.
+        *
+        * When adj != 1, remember that the interval and offset values
+        * have been appropriately scaled so the math is the same.
+        *
+        * The basic idea here is that we're increasing the multiplier
+        * by one, this causes the xtime_interval to be incremented by
+        * one cycle_interval. This is because:
+        *      xtime_interval = cycle_interval * mult
+        * So if mult is being incremented by one:
+        *      xtime_interval = cycle_interval * (mult + 1)
+        * Its the same as:
+        *      xtime_interval = (cycle_interval * mult) + cycle_interval
+        * Which can be shortened to:
+        *      xtime_interval += cycle_interval
+        *
+        * So offset stores the non-accumulated cycles. Thus the current
+        * time (in shifted nanoseconds) is:
+        *      now = (offset * adj) + xtime_nsec
+        * Now, even though we're adjusting the clock frequency, we have
+        * to keep time consistent. In other words, we can't jump back
+        * in time, and we also want to avoid jumping forward in time.
+        *
+        * So given the same offset value, we need the time to be the same
+        * both before and after the freq adjustment.
+        *      now = (offset * adj_1) + xtime_nsec_1
+        *      now = (offset * adj_2) + xtime_nsec_2
+        * So:
+        *      (offset * adj_1) + xtime_nsec_1 =
+        *              (offset * adj_2) + xtime_nsec_2
+        * And we know:
+        *      adj_2 = adj_1 + 1
+        * So:
+        *      (offset * adj_1) + xtime_nsec_1 =
+        *              (offset * (adj_1+1)) + xtime_nsec_2
+        *      (offset * adj_1) + xtime_nsec_1 =
+        *              (offset * adj_1) + offset + xtime_nsec_2
+        * Canceling the sides:
+        *      xtime_nsec_1 = offset + xtime_nsec_2
+        * Which gives us:
+        *      xtime_nsec_2 = xtime_nsec_1 - offset
+        * Which simplfies to:
+        *      xtime_nsec -= offset
+        *
+        * XXX - TODO: Doc ntp_error calculation.
+        */
        timekeeper.mult += adj;
        timekeeper.xtime_interval += interval;
        timekeeper.xtime_nsec -= offset;
@@@ -1140,8 -1230,6 +1230,8 @@@ ktime_t ktime_get_monotonic_offset(void
        } while (read_seqretry(&xtime_lock, seq));
        return timespec_to_ktime(wtom);
  }
 +EXPORT_SYMBOL_GPL(ktime_get_monotonic_offset);
 +
  
  /**
   * xtime_update() - advances the timekeeping infrastructure