Merge branches 'for-4.2/i2c-hid', 'for-4.2/lenovo', 'for-4.2/plantronics', 'for-4...
authorJiri Kosina <jkosina@suse.cz>
Mon, 22 Jun 2015 14:23:43 +0000 (16:23 +0200)
committerJiri Kosina <jkosina@suse.cz>
Mon, 22 Jun 2015 14:23:43 +0000 (16:23 +0200)
Conflicts:
drivers/hid/wacom_wac.c

1  2  3  4  5  6  7  8  9 
MAINTAINERS
drivers/hid/hid-core.c
drivers/hid/hid-ids.h
drivers/hid/hid-lenovo.c
drivers/hid/hid-rmi.c
drivers/hid/i2c-hid/i2c-hid.c
drivers/hid/usbhid/hid-quirks.c
drivers/hid/wacom_wac.c

diff --combined MAINTAINERS
@@@@@@@@@@ -569,6 -569,12 -569,6 -569,12 -569,12 -569,6 -569,6 -569,6 -569,6 +569,12 @@@@@@@@@@ L:      nios2-dev@lists.rocketboards.org (mo
         S:     Maintained
         F:     drivers/mailbox/mailbox-altera.c
         
+ +  ++++ALTERA PIO DRIVER
+ +  ++++M:     Tien Hock Loh <thloh@altera.com>
+ +  ++++L:     linux-gpio@vger.kernel.org
+ +  ++++S:     Maintained
+ +  ++++F:     drivers/gpio/gpio-altera.c
+ +  ++++
         ALTERA TRIPLE SPEED ETHERNET DRIVER
         M:     Vince Bridgers <vbridger@opensource.altera.com>
         L:     netdev@vger.kernel.org
@@@@@@@@@@ -625,16 -631,16 -625,16 -631,16 -631,16 -625,16 -625,16 -625,16 -625,16 +631,16 @@@@@@@@@@ F:        drivers/iommu/amd_iommu*.[ch
         F:     include/linux/amd-iommu.h
         
         AMD KFD
- -  ----M:      Oded Gabbay <oded.gabbay@amd.com>
- -  ----L:      dri-devel@lists.freedesktop.org
- -  ----T:      git git://people.freedesktop.org/~gabbayo/linux.git
- -  ----S:      Supported
- -  ----F:      drivers/gpu/drm/amd/amdkfd/
+ +  ++++M:     Oded Gabbay <oded.gabbay@amd.com>
+ +  ++++L:     dri-devel@lists.freedesktop.org
+ +  ++++T:     git git://people.freedesktop.org/~gabbayo/linux.git
+ +  ++++S:     Supported
+ +  ++++F:     drivers/gpu/drm/amd/amdkfd/
         F:     drivers/gpu/drm/amd/include/cik_structs.h
         F:     drivers/gpu/drm/amd/include/kgd_kfd_interface.h
- -  ----F:      drivers/gpu/drm/radeon/radeon_kfd.c
- -  ----F:      drivers/gpu/drm/radeon/radeon_kfd.h
- -  ----F:      include/uapi/linux/kfd_ioctl.h
+ +  ++++F:     drivers/gpu/drm/radeon/radeon_kfd.c
+ +  ++++F:     drivers/gpu/drm/radeon/radeon_kfd.h
+ +  ++++F:     include/uapi/linux/kfd_ioctl.h
         
         AMD MICROCODE UPDATE SUPPORT
         M:     Borislav Petkov <bp@alien8.de>
@@@@@@@@@@ -880,12 -886,16 -880,12 -886,16 -886,16 -880,12 -880,12 -880,12 -880,12 +886,16 @@@@@@@@@@ S:        Maintaine
         F:     drivers/media/rc/meson-ir.c
         N:     meson[x68]
         
+ +  ++++ARM/Annapurna Labs ALPINE ARCHITECTURE
+ +  ++++M:     Tsahee Zidenberg <tsahee@annapurnalabs.com>
+ +  ++++S:     Maintained
+ +  ++++F:     arch/arm/mach-alpine/
+ +  ++++
         ARM/ATMEL AT91RM9200 AND AT91SAM ARM ARCHITECTURES
- -  ----M:     Andrew Victor <linux@maxim.org.za>
         M:     Nicolas Ferre <nicolas.ferre@atmel.com>
+ +  ++++M:     Alexandre Belloni <alexandre.belloni@free-electrons.com>
         M:     Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>
         L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
- -  ----W:     http://maxim.org.za/at91_26.html
         W:     http://www.linux4sam.org
         S:     Supported
         F:     arch/arm/mach-at91/
@@@@@@@@@@ -952,7 -962,7 -952,7 -962,7 -962,7 -952,7 -952,7 -952,7 -952,7 +962,7 @@@@@@@@@@ ARM/CORESIGHT FRAMEWORK AND DRIVER
         M:     Mathieu Poirier <mathieu.poirier@linaro.org>
         L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
         S:     Maintained
- -  ----F:     drivers/coresight/*
+ +  ++++F:     drivers/hwtracing/coresight/*
         F:     Documentation/trace/coresight.txt
         F:     Documentation/devicetree/bindings/arm/coresight.txt
         F:     Documentation/ABI/testing/sysfs-bus-coresight-devices-*
@@@@@@@@@@ -964,7 -974,7 -964,7 -974,7 -974,7 -964,7 -964,7 -964,7 -964,7 +974,7 @@@@@@@@@@ S:  Maintaine
         ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE
         M:     Hans Ulli Kroll <ulli.kroll@googlemail.com>
         L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
- -  ----T:     git git://git.berlios.de/gemini-board
+ +  ++++T:     git git://github.com/ulli-kroll/linux.git
         S:     Maintained
         F:     arch/arm/mach-gemini/
         
@@@@@@@@@@ -979,6 -989,12 -979,6 -989,12 -989,12 -979,6 -979,6 -979,6 -979,6 +989,12 @@@@@@@@@@ F:      drivers/clocksource/timer-prima2.
         F:     drivers/clocksource/timer-atlas7.c
         N:     [^a-z]sirf
         
+ +  ++++ARM/CONEXANT DIGICOLOR MACHINE SUPPORT
+ +  ++++M:     Baruch Siach <baruch@tkos.co.il>
+ +  ++++L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+ +  ++++S:     Maintained
+ +  ++++N:     digicolor
+ +  ++++
         ARM/EBSA110 MACHINE SUPPORT
         M:     Russell King <linux@arm.linux.org.uk>
         L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@@@@@@@@ -1177,7 -1193,7 -1177,7 -1193,7 -1193,7 -1177,7 -1177,7 -1177,7 -1177,7 +1193,7 @@@@@@@@@@ ARM/MAGICIAN MACHINE SUPPOR
         M:     Philipp Zabel <philipp.zabel@gmail.com>
         S:     Maintained
         
- -  ----ARM/Marvell Armada 370 and Armada XP SOC support
+ +  ++++ARM/Marvell Kirkwood and Armada 370, 375, 38x, XP SOC support
         M:     Jason Cooper <jason@lakedaemon.net>
         M:     Andrew Lunn <andrew@lunn.ch>
         M:     Gregory Clement <gregory.clement@free-electrons.com>
@@@@@@@@@@ -1186,12 -1202,17 -1186,12 -1202,17 -1202,17 -1186,12 -1186,12 -1186,12 -1186,12 +1202,17 @@@@@@@@@@ L:      linux-arm-kernel@lists.infradead.or
         S:     Maintained
         F:     arch/arm/mach-mvebu/
         F:     drivers/rtc/rtc-armada38x.c
+ +  ++++F:     arch/arm/boot/dts/armada*
+ +  ++++F:     arch/arm/boot/dts/kirkwood*
+ +  ++++
         
         ARM/Marvell Berlin SoC support
         M:     Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
         L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
         S:     Maintained
         F:     arch/arm/mach-berlin/
+ +  ++++F:     arch/arm/boot/dts/berlin*
+ +  ++++
         
         ARM/Marvell Dove/MV78xx0/Orion SOC support
         M:     Jason Cooper <jason@lakedaemon.net>
@@@@@@@@@@ -1204,6 -1225,9 -1204,6 -1225,9 -1225,9 -1204,6 -1204,6 -1204,6 -1204,6 +1225,9 @@@@@@@@@@ F:        arch/arm/mach-dove
         F:     arch/arm/mach-mv78xx0/
         F:     arch/arm/mach-orion5x/
         F:     arch/arm/plat-orion/
+ +  ++++F:     arch/arm/boot/dts/dove*
+ +  ++++F:     arch/arm/boot/dts/orion5x*
+ +  ++++
         
         ARM/Orion SoC/Technologic Systems TS-78xx platform support
         M:     Alexander Clouter <alex@digriz.org.uk>
@@@@@@@@@@ -1215,6 -1239,7 -1215,6 -1239,7 -1239,7 -1215,6 -1215,6 -1215,6 -1215,6 +1239,7 @@@@@@@@@@ F:        arch/arm/mach-orion5x/ts78xx-
         ARM/Mediatek SoC support
         M:     Matthias Brugger <matthias.bgg@gmail.com>
         L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
+ +  ++++L:     linux-mediatek@lists.infradead.org (moderated for non-subscribers)
         S:     Maintained
         F:     arch/arm/boot/dts/mt6*
         F:     arch/arm/boot/dts/mt8*
@@@@@@@@@@ -1254,22 -1279,6 -1254,22 -1279,6 -1279,6 -1254,22 -1254,22 -1254,22 -1254,22 +1279,6 @@@@@@@@@@ L:  openmoko-kernel@lists.openmoko.org (
         W:     http://wiki.openmoko.org/wiki/Neo_FreeRunner
         S:     Supported
         
- -  ----ARM/QUALCOMM MSM MACHINE SUPPORT
- -  ----M:     David Brown <davidb@codeaurora.org>
- -  ----M:     Daniel Walker <dwalker@fifo99.com>
- -  ----M:     Bryan Huntsman <bryanh@codeaurora.org>
- -  ----L:     linux-arm-msm@vger.kernel.org
- -  ----F:     arch/arm/mach-msm/
- -  ----F:     drivers/video/fbdev/msm/
- -  ----F:     drivers/mmc/host/msm_sdcc.c
- -  ----F:     drivers/mmc/host/msm_sdcc.h
- -  ----F:     drivers/tty/serial/msm_serial.h
- -  ----F:     drivers/tty/serial/msm_serial.c
- -  ----F:     drivers/*/pm8???-*
- -  ----F:     drivers/mfd/ssbi.c
- -  ----T:     git git://git.kernel.org/pub/scm/linux/kernel/git/davidb/linux-msm.git
- -  ----S:     Maintained
- -  ----
         ARM/TOSA MACHINE SUPPORT
         M:     Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
         M:     Dirk Opfer <dirk@opfer-online.de>
@@@@@@@@@@ -1327,6 -1336,11 -1327,6 -1336,11 -1336,11 -1327,6 -1327,6 -1327,6 -1327,6 +1336,11 @@@@@@@@@@ L:    linux-soc@vger.kernel.or
         S:     Maintained
         F:     arch/arm/mach-qcom/
         F:     drivers/soc/qcom/
+ +  ++++F:     drivers/tty/serial/msm_serial.h
+ +  ++++F:     drivers/tty/serial/msm_serial.c
+ +  ++++F:     drivers/*/pm8???-*
+ +  ++++F:     drivers/mfd/ssbi.c
+ +  ++++F:     drivers/firmware/qcom_scm.c
         T:     git git://git.kernel.org/pub/scm/linux/kernel/git/galak/linux-qcom.git
         
         ARM/RADISYS ENP2611 MACHINE SUPPORT
@@@@@@@@@@ -1365,6 -1379,7 -1365,6 -1379,7 -1379,7 -1365,6 -1365,6 -1365,6 -1365,6 +1379,7 @@@@@@@@@@ N:        rockchi
         
         ARM/SAMSUNG EXYNOS ARM ARCHITECTURES
         M:     Kukjin Kim <kgene@kernel.org>
+ +  ++++M:     Krzysztof Kozlowski <k.kozlowski@samsung.com>
         L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
         L:     linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
         S:     Maintained
@@@@@@@@@@ -1425,11 -1440,9 -1425,11 -1440,9 -1440,9 -1425,11 -1425,11 -1425,11 -1425,11 +1440,9 @@@@@@@@@@ F:  arch/arm/boot/dts/emev2
         F:     arch/arm/boot/dts/r7s*
         F:     arch/arm/boot/dts/r8a*
         F:     arch/arm/boot/dts/sh*
- -  ----F:     arch/arm/configs/ape6evm_defconfig
         F:     arch/arm/configs/armadillo800eva_defconfig
         F:     arch/arm/configs/bockw_defconfig
         F:     arch/arm/configs/kzm9g_defconfig
- -  ----F:     arch/arm/configs/mackerel_defconfig
         F:     arch/arm/configs/marzen_defconfig
         F:     arch/arm/configs/shmobile_defconfig
         F:     arch/arm/include/debug/renesas-scif.S
@@@@@@@@@@ -1440,9 -1453,10 -1440,9 -1453,10 -1453,10 -1440,9 -1440,9 -1440,9 -1440,9 +1453,10 @@@@@@@@@@ ARM/SOCFPGA ARCHITECTUR
         M:     Dinh Nguyen <dinguyen@opensource.altera.com>
         S:     Maintained
         F:     arch/arm/mach-socfpga/
+ +  ++++F:     arch/arm/boot/dts/socfpga*
+ +  ++++F:     arch/arm/configs/socfpga_defconfig
         W:     http://www.rocketboards.org
- -  ----T:     git://git.rocketboards.org/linux-socfpga.git
- -  ----T:     git://git.rocketboards.org/linux-socfpga-next.git
+ +  ++++T:     git git://git.kernel.org/pub/scm/linux/kernel/git/dinguyen/linux.git
         
         ARM/SOCFPGA CLOCK FRAMEWORK SUPPORT
         M:     Dinh Nguyen <dinguyen@opensource.altera.com>
@@@@@@@@@@ -1764,7 -1778,7 -1764,7 -1778,7 -1778,7 -1764,7 -1764,7 -1764,7 -1764,7 +1778,7 @@@@@@@@@@ S:        Supporte
         F:     drivers/tty/serial/atmel_serial.c
         
         ATMEL Audio ALSA driver
- -  ----M:     Bo Shen <voice.shen@atmel.com>
+ +  ++++M:     Nicolas Ferre <nicolas.ferre@atmel.com>
         L:     alsa-devel@alsa-project.org (moderated for non-subscribers)
         S:     Supported
         F:     sound/soc/atmel
@@@@@@@@@@ -1821,7 -1835,7 -1821,7 -1835,7 -1835,7 -1821,7 -1821,7 -1821,7 -1821,7 +1835,7 @@@@@@@@@@ S:        Supporte
         F:     drivers/spi/spi-atmel.*
         
         ATMEL SSC DRIVER
- -  ----M:     Bo Shen <voice.shen@atmel.com>
+ +  ++++M:     Nicolas Ferre <nicolas.ferre@atmel.com>
         L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
         S:     Supported
         F:     drivers/misc/atmel-ssc.c
@@@@@@@@@@ -1915,16 -1929,14 -1915,16 -1929,14 -1929,14 -1915,16 -1915,16 -1915,16 -1915,16 +1929,14 @@@@@@@@@@ S:      Maintaine
         F:     drivers/media/radio/radio-aztech*
         
         B43 WIRELESS DRIVER
- -  ----M:     Stefano Brivio <stefano.brivio@polimi.it>
         L:     linux-wireless@vger.kernel.org
         L:     b43-dev@lists.infradead.org
         W:     http://wireless.kernel.org/en/users/Drivers/b43
- -  ----S:     Maintained
+ +  ++++S:     Odd Fixes
         F:     drivers/net/wireless/b43/
         
         B43LEGACY WIRELESS DRIVER
         M:     Larry Finger <Larry.Finger@lwfinger.net>
- -  ----M:     Stefano Brivio <stefano.brivio@polimi.it>
         L:     linux-wireless@vger.kernel.org
         L:     b43-dev@lists.infradead.org
         W:     http://wireless.kernel.org/en/users/Drivers/b43
@@@@@@@@@@ -1932,7 -1944,7 -1932,7 -1944,7 -1944,7 -1932,7 -1932,7 -1932,7 -1932,7 +1944,7 @@@@@@@@@@ S:        Maintaine
         F:     drivers/net/wireless/b43legacy/
         
         BACKLIGHT CLASS/SUBSYSTEM
- -  ----M:     Jingoo Han <jg1.han@samsung.com>
+ +  ++++M:     Jingoo Han <jingoohan1@gmail.com>
         M:     Lee Jones <lee.jones@linaro.org>
         S:     Maintained
         F:     drivers/video/backlight/
@@@@@@@@@@ -1967,10 -1979,10 -1967,10 -1979,10 -1979,10 -1967,10 -1967,10 -1967,10 -1967,10 +1979,10 @@@@@@@@@@ F:      Documentation/filesystems/befs.tx
         F:     fs/befs/
         
         BECKHOFF CX5020 ETHERCAT MASTER DRIVER
- -  ----M: Dariusz Marcinkiewicz <reksio@newterm.pl>
- -  ----L: netdev@vger.kernel.org
- -  ----S: Maintained
- -  ----F: drivers/net/ethernet/ec_bhf.c
+ +  ++++M:     Dariusz Marcinkiewicz <reksio@newterm.pl>
+ +  ++++L:     netdev@vger.kernel.org
+ +  ++++S:     Maintained
+ +  ++++F:     drivers/net/ethernet/ec_bhf.c
         
         BFS FILE SYSTEM
         M:     "Tigran A. Aivazian" <tigran@aivazian.fsnet.co.uk>
@@@@@@@@@@ -2119,8 -2131,9 -2119,8 -2131,9 -2131,9 -2119,8 -2119,8 -2119,8 -2119,8 +2131,9 @@@@@@@@@@ S:        Supporte
         F:     drivers/net/ethernet/broadcom/bnx2x/
         
         BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITECTURE
- -  ----M:     Christian Daudt <bcm@fixthebug.org>
         M:     Florian Fainelli <f.fainelli@gmail.com>
+ +  ++++M:     Ray Jui <rjui@broadcom.com>
+ +  ++++M:     Scott Branden <sbranden@broadcom.com>
         L:     bcm-kernel-feedback-list@broadcom.com
         T:     git git://github.com/broadcom/mach-bcm
         S:     Maintained
@@@@@@@@@@ -2171,7 -2184,6 -2171,7 -2184,6 -2184,6 -2171,7 -2171,7 -2171,7 -2171,7 +2184,6 @@@@@@@@@@ S:        Maintaine
         F:     drivers/usb/gadget/udc/bcm63xx_udc.*
         
         BROADCOM BCM7XXX ARM ARCHITECTURE
- -  ----M:     Marc Carino <marc.ceeeee@gmail.com>
         M:     Brian Norris <computersforpeace@gmail.com>
         M:     Gregory Fong <gregory.0xf0@gmail.com>
         M:     Florian Fainelli <f.fainelli@gmail.com>
@@@@@@@@@@ -2525,6 -2537,13 -2525,6 -2537,13 -2537,13 -2525,6 -2525,6 -2525,6 -2525,6 +2537,13 @@@@@@@@@@ L:    linux-usb@vger.kernel.or
         S:     Maintained
         F:     drivers/usb/chipidea/
         
+ +  ++++CHIPONE ICN8318 I2C TOUCHSCREEN DRIVER
+ +  ++++M:     Hans de Goede <hdegoede@redhat.com>
+ +  ++++L:     linux-input@vger.kernel.org
+ +  ++++S:     Maintained
+ +  ++++F:     Documentation/devicetree/bindings/input/touchscreen/chipone_icn8318.txt
+ +  ++++F:     drivers/input/touchscreen/chipone_icn8318.c
+ +  ++++
         CHROME HARDWARE PLATFORM SUPPORT
         M:     Olof Johansson <olof@lixom.net>
         S:     Maintained
@@@@@@@@@@ -2565,6 -2584,7 -2565,6 -2584,7 -2584,7 -2565,6 -2565,6 -2565,6 -2565,6 +2584,7 @@@@@@@@@@ F:        include/linux/cleancache.
         
         CLK API
         M:     Russell King <linux@arm.linux.org.uk>
+ +  ++++L:     linux-clk@vger.kernel.org
         S:     Maintained
         F:     include/linux/clk.h
         
@@@@@@@@@@ -2625,7 -2645,7 -2625,7 -2645,7 -2645,7 -2625,7 -2625,7 -2625,7 -2625,7 +2645,7 @@@@@@@@@@ F:        drivers/media/platform/coda
         COMMON CLK FRAMEWORK
         M:     Mike Turquette <mturquette@linaro.org>
         M:     Stephen Boyd <sboyd@codeaurora.org>
- -  ----L:     linux-kernel@vger.kernel.org
+ +  ++++L:     linux-clk@vger.kernel.org
         T:     git git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git
         S:     Maintained
         F:     drivers/clk/
@@@@@@@@@@ -2818,6 -2838,7 -2818,6 -2838,7 -2838,7 -2818,6 -2818,6 -2818,6 -2818,6 +2838,7 @@@@@@@@@@ L:        linux-crypto@vger.kernel.or
         T:     git git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6.git
         S:     Maintained
         F:     Documentation/crypto/
+ +  ++++F:     Documentation/DocBook/crypto-API.tmpl
         F:     arch/*/crypto/
         F:     crypto/
         F:     drivers/crypto/
@@@@@@@@@@ -2888,11 -2909,11 -2888,11 -2909,11 -2909,11 -2888,11 -2888,11 -2888,11 -2888,11 +2909,11 @@@@@@@@@@ S:      Supporte
         F:     drivers/net/ethernet/chelsio/cxgb3/
         
         CXGB3 ISCSI DRIVER (CXGB3I)
- -  ----M:      Karen Xie <kxie@chelsio.com>
- -  ----L:      linux-scsi@vger.kernel.org
- -  ----W:      http://www.chelsio.com
- -  ----S:      Supported
- -  ----F:      drivers/scsi/cxgbi/cxgb3i
+ +  ++++M:     Karen Xie <kxie@chelsio.com>
+ +  ++++L:     linux-scsi@vger.kernel.org
+ +  ++++W:     http://www.chelsio.com
+ +  ++++S:     Supported
+ +  ++++F:     drivers/scsi/cxgbi/cxgb3i
         
         CXGB3 IWARP RNIC DRIVER (IW_CXGB3)
         M:     Steve Wise <swise@chelsio.com>
@@@@@@@@@@ -2909,11 -2930,11 -2909,11 -2930,11 -2930,11 -2909,11 -2909,11 -2909,11 -2909,11 +2930,11 @@@@@@@@@@ S:      Supporte
         F:     drivers/net/ethernet/chelsio/cxgb4/
         
         CXGB4 ISCSI DRIVER (CXGB4I)
- -  ----M:      Karen Xie <kxie@chelsio.com>
- -  ----L:      linux-scsi@vger.kernel.org
- -  ----W:      http://www.chelsio.com
- -  ----S:      Supported
- -  ----F:      drivers/scsi/cxgbi/cxgb4i
+ +  ++++M:     Karen Xie <kxie@chelsio.com>
+ +  ++++L:     linux-scsi@vger.kernel.org
+ +  ++++W:     http://www.chelsio.com
+ +  ++++S:     Supported
+ +  ++++F:     drivers/scsi/cxgbi/cxgb4i
         
         CXGB4 IWARP RNIC DRIVER (IW_CXGB4)
         M:     Steve Wise <swise@chelsio.com>
@@@@@@@@@@ -3060,10 -3081,16 -3060,10 -3081,16 -3081,16 -3060,10 -3060,10 -3060,10 -3060,10 +3081,16 @@@@@@@@@@ F:      drivers/net/fddi/defxx.
         
         DELL LAPTOP DRIVER
         M:     Matthew Garrett <mjg59@srcf.ucam.org>
+ +  ++++M:     Pali Rohár <pali.rohar@gmail.com>
         L:     platform-driver-x86@vger.kernel.org
         S:     Maintained
         F:     drivers/platform/x86/dell-laptop.c
         
+ +  ++++DELL LAPTOP FREEFALL DRIVER
+ +  ++++M:     Pali Rohár <pali.rohar@gmail.com>
+ +  ++++S:     Maintained
+ +  ++++F:     drivers/platform/x86/dell-smo8800.c
+ +  ++++
         DELL LAPTOP SMM DRIVER
         M:     Guenter Roeck <linux@roeck-us.net>
         S:     Maintained
@@@@@@@@@@ -3078,6 -3105,7 -3078,6 -3105,7 -3105,7 -3078,6 -3078,6 -3078,6 -3078,6 +3105,7 @@@@@@@@@@ F:        drivers/firmware/dcdbas.
         
         DELL WMI EXTRAS DRIVER
         M:     Matthew Garrett <mjg59@srcf.ucam.org>
+ +  ++++M:     Pali Rohár <pali.rohar@gmail.com>
         S:     Maintained
         F:     drivers/platform/x86/dell-wmi.c
         
@@@@@@@@@@ -3265,12 -3293,6 -3265,12 -3293,6 -3293,6 -3265,12 -3265,12 -3265,12 -3265,12 +3293,6 @@@@@@@@@@ F:  drivers/firmware/dmi-id.
         F:     drivers/firmware/dmi_scan.c
         F:     include/linux/dmi.h
         
- -  ----DOCKING STATION DRIVER
- -  ----M:     Shaohua Li <shaohua.li@intel.com>
- -  ----L:     linux-acpi@vger.kernel.org
- -  ----S:     Supported
- -  ----F:     drivers/acpi/dock.c
- -  ----
         DOCUMENTATION
         M:     Jonathan Corbet <corbet@lwn.net>
         L:     linux-doc@vger.kernel.org
@@@@@@@@@@ -3278,7 -3300,9 -3278,7 -3300,9 -3300,9 -3278,7 -3278,7 -3278,7 -3278,7 +3300,9 @@@@@@@@@@ S:        Maintaine
         F:     Documentation/
         X:     Documentation/ABI/
         X:     Documentation/devicetree/
- -  ----X:     Documentation/[a-z][a-z]_[A-Z][A-Z]/
+ +  ++++X:     Documentation/acpi
+ +  ++++X:     Documentation/power
+ +  ++++X:     Documentation/spi
         T:     git git://git.lwn.net/linux-2.6.git docs-next
         
         DOUBLETALK DRIVER
@@@@@@@@@@ -3402,9 -3426,15 -3402,9 -3426,15 -3426,15 -3402,9 -3402,9 -3402,9 -3402,9 +3426,15 @@@@@@@@@@ T:    git git://people.freedesktop.org/~ai
         S:     Supported
         F:     drivers/gpu/drm/rcar-du/
         F:     drivers/gpu/drm/shmobile/
- -  ----F:     include/linux/platform_data/rcar-du.h
         F:     include/linux/platform_data/shmob_drm.h
         
+ +  ++++DRM DRIVERS FOR ROCKCHIP
+ +  ++++M:     Mark Yao <mark.yao@rock-chips.com>
+ +  ++++L:     dri-devel@lists.freedesktop.org
+ +  ++++S:     Maintained
+ +  ++++F:     drivers/gpu/drm/rockchip/
+ +  ++++F:     Documentation/devicetree/bindings/video/rockchip*
+ +  ++++
         DSBR100 USB FM RADIO DRIVER
         M:     Alexey Klimov <klimov.linux@gmail.com>
         L:     linux-media@vger.kernel.org
@@@@@@@@@@ -3897,7 -3927,7 -3897,7 -3927,7 -3927,7 -3897,7 -3897,7 -3897,7 -3897,7 +3927,7 @@@@@@@@@@ F:        drivers/extcon
         F:     Documentation/extcon/
         
         EXYNOS DP DRIVER
- -  ----M:     Jingoo Han <jg1.han@samsung.com>
+ +  ++++M:     Jingoo Han <jingoohan1@gmail.com>
         L:     dri-devel@lists.freedesktop.org
         S:     Maintained
         F:     drivers/gpu/drm/exynos/exynos_dp*
@@@@@@@@@@ -4324,6 -4354,15 -4324,6 -4354,15 -4354,15 -4324,6 -4324,6 -4324,6 -4324,6 +4354,15 @@@@@@@@@@ S:    Supporte
         F:     drivers/phy/
         F:     include/linux/phy/
         
+ +  ++++GENERIC PM DOMAINS
+ +  ++++M:     "Rafael J. Wysocki" <rjw@rjwysocki.net>
+ +  ++++M:     Kevin Hilman <khilman@kernel.org>
+ +  ++++M:     Ulf Hansson <ulf.hansson@linaro.org>
+ +  ++++L:     linux-pm@vger.kernel.org
+ +  ++++S:     Supported
+ +  ++++F:     drivers/base/power/domain*.c
+ +  ++++F:     include/linux/pm_domain.h
+ +  ++++
         GENERIC UIO DRIVER FOR PCI DEVICES
         M:     "Michael S. Tsirkin" <mst@redhat.com>
         L:     kvm@vger.kernel.org
@@@@@@@@@@ -4337,21 -4376,20 -4337,21 -4376,20 -4376,20 -4337,21 -4337,21 -4337,21 -4337,21 +4376,20 @@@@@@@@@@ F:      scripts/get_maintainer.p
         
         GFS2 FILE SYSTEM
         M:     Steven Whitehouse <swhiteho@redhat.com>
+ +  ++++M:     Bob Peterson <rpeterso@redhat.com>
         L:     cluster-devel@redhat.com
         W:     http://sources.redhat.com/cluster/
- -  ----T:     git git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-fixes.git
- -  ----T:     git git://git.kernel.org/pub/scm/linux/kernel/git/steve/gfs2-3.0-nmw.git
+ +  ++++T:     git git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git
         S:     Supported
         F:     Documentation/filesystems/gfs2*.txt
         F:     fs/gfs2/
         F:     include/uapi/linux/gfs2_ondisk.h
         
         GIGASET ISDN DRIVERS
- -  ----M:     Hansjoerg Lipp <hjlipp@web.de>
- -  ----M:     Tilman Schmidt <tilman@imap.cc>
+ +  ++++M:     Paul Bolle <pebolle@tiscali.nl>
         L:     gigaset307x-common@lists.sourceforge.net
         W:     http://gigaset307x.sourceforge.net/
- -  ----S:     Maintained
+ +  ++++S:     Odd Fixes
         F:     Documentation/isdn/README.gigaset
         F:     drivers/isdn/gigaset/
         F:     include/uapi/linux/gigaset_dev.h
@@@@@@@@@@ -4450,7 -4488,7 -4450,7 -4488,7 -4488,7 -4450,7 -4450,7 -4450,7 -4450,7 +4488,7 @@@@@@@@@@ S:        Maintaine
         F:     block/partitions/efi.*
         
         STK1160 USB VIDEO CAPTURE DRIVER
- -  ----M:     Ezequiel Garcia <elezegarcia@gmail.com>
+ +  ++++M:     Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
         L:     linux-media@vger.kernel.org
         T:     git git://linuxtv.org/media_tree.git
         S:     Maintained
@@@@@@@@@@ -4498,7 -4536,7 -4498,7 -4536,7 -4536,7 -4498,7 -4498,7 -4498,7 -4498,7 +4536,7 @@@@@@@@@@ M:        Jean Delvare <jdelvare@suse.de
         M:     Guenter Roeck <linux@roeck-us.net>
         L:     lm-sensors@lm-sensors.org
         W:     http://www.lm-sensors.org/
- -  ----T:     quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-hwmon/
+ +  ++++T:     quilt http://jdelvare.nerim.net/devel/linux/jdelvare-hwmon/
         T:     git git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
         S:     Maintained
         F:     Documentation/hwmon/
@@@@@@@@@@ -4605,6 -4643,6 -4605,6 -4643,6 -4643,6 -4605,18 -4605,6 -4605,6 -4605,6 +4643,18 @@@@@@@@@@ F:      drivers/hid
         F:     include/linux/hid*
         F:     include/uapi/linux/hid*
         
+++++ +++HID SENSOR HUB DRIVERS
+++++ +++M:     Jiri Kosina <jkosina@suse.cz>
+++++ +++M:     Jonathan Cameron <jic23@kernel.org>
+++++ +++M:     Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
+++++ +++L:     linux-input@vger.kernel.org
+++++ +++L:     linux-iio@vger.kernel.org
+++++ +++S:     Maintained
+++++ +++F:     Documentation/hid/hid-sensor*
+++++ +++F:     drivers/hid/hid-sensor-*
+++++ +++F:     drivers/iio/*/hid-*
+++++ +++F:     include/linux/hid-sensor-*
+++++ +++
         HIGH-RESOLUTION TIMERS, CLOCKEVENTS, DYNTICKS
         M:     Thomas Gleixner <tglx@linutronix.de>
         L:     linux-kernel@vger.kernel.org
@@@@@@@@@@ -4993,6 -5031,11 -4993,6 -5031,11 -5031,11 -5005,6 -4993,6 -4993,6 -4993,6 +5043,11 @@@@@@@@@@ W:    http://industrypack.sourceforge.ne
         S:     Maintained
         F:     drivers/ipack/
         
+ +  ++++INGENIC JZ4780 DMA Driver
+ +  ++++M:     Zubair Lutfullah Kakakhel <Zubair.Kakakhel@imgtec.com>
+ +  ++++S:     Maintained
+ +  ++++F:     drivers/dma/dma-jz4780.c
+ +  ++++
         INTEGRITY MEASUREMENT ARCHITECTURE (IMA)
         M:     Mimi Zohar <zohar@linux.vnet.ibm.com>
         M:     Dmitry Kasatkin <dmitry.kasatkin@gmail.com>
         F:     drivers/video/fbdev/imsttfb.c
         
         INFINIBAND SUBSYSTEM
- -  ----M:     Roland Dreier <roland@kernel.org>
+ +  ++++M:     Doug Ledford <dledford@redhat.com>
         M:     Sean Hefty <sean.hefty@intel.com>
         M:     Hal Rosenstock <hal.rosenstock@gmail.com>
         L:     linux-rdma@vger.kernel.org
         W:     http://www.openfabrics.org/
         Q:     http://patchwork.kernel.org/project/linux-rdma/list/
- -  ----T:     git git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband.git
+ +  ++++T:     git git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma.git
         S:     Supported
         F:     Documentation/infiniband/
         F:     drivers/infiniband/
         F:     include/uapi/linux/if_infiniband.h
+ +  ++++F:     include/uapi/rdma/
+ +  ++++F:     include/rdma/
         
         INOTIFY
         M:     John McCutchan <john@johnmccutchan.com>
@@@@@@@@@@ -5206,7 -5251,7 -5206,7 -5251,7 -5251,7 -5218,7 -5206,7 -5206,7 -5206,7 +5263,7 @@@@@@@@@@ F:        arch/x86/kernel/tboot.
         INTEL WIRELESS WIMAX CONNECTION 2400
         M:     Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
         M:     linux-wimax@intel.com
- -  ----L:     wimax@linuxwimax.org (subscribers-only)
+ +  ++++L:     wimax@linuxwimax.org (subscribers-only)
         S:     Supported
         W:     http://linuxwimax.org
         F:     Documentation/wimax/README.i2400m
@@@@@@@@@@ -5284,6 -5329,13 -5284,6 -5329,13 -5329,13 -5296,6 -5284,6 -5284,6 -5284,6 +5341,13 @@@@@@@@@@ F:    drivers/char/ipmi
         F:     include/linux/ipmi*
         F:     include/uapi/linux/ipmi*
         
+ +  ++++QCOM AUDIO (ASoC) DRIVERS
+ +  ++++M:     Patrick Lai <plai@codeaurora.org>
+ +  ++++M:     Banajit Goswami <bgoswami@codeaurora.org>
+ +  ++++L:     alsa-devel@alsa-project.org (moderated for non-subscribers)
+ +  ++++S:     Supported
+ +  ++++F:     sound/soc/qcom/
+ +  ++++
         IPS SCSI RAID DRIVER
         M:     Adaptec OEM Raid Solutions <aacraid@adaptec.com>
         L:     linux-scsi@vger.kernel.org
@@@@@@@@@@ -5769,6 -5821,7 -5769,6 -5821,7 -5821,7 -5781,6 -5769,6 -5769,6 -5769,6 +5833,7 @@@@@@@@@@ F:        drivers/scsi/53c700
         LED SUBSYSTEM
         M:     Bryan Wu <cooloney@gmail.com>
         M:     Richard Purdie <rpurdie@rpsys.net>
+ +  ++++M:     Jacek Anaszewski <j.anaszewski@samsung.com>
         L:     linux-leds@vger.kernel.org
         T:     git git://git.kernel.org/pub/scm/linux/kernel/git/cooloney/linux-leds.git
         S:     Maintained
@@@@@@@@@@ -5902,7 -5955,7 -5902,7 -5955,7 -5955,7 -5914,7 -5902,7 -5902,7 -5902,7 +5967,7 @@@@@@@@@@ F:        arch/powerpc/platforms/512x
         F:     arch/powerpc/platforms/52xx/
         
         LINUX FOR POWERPC EMBEDDED PPC4XX
- -  ----M:  Alistair Popple <alistair@popple.id.au>
+ +  ++++M:     Alistair Popple <alistair@popple.id.au>
         M:     Matt Porter <mporter@kernel.crashing.org>
         W:     http://www.penguinppc.org/
         L:     linuxppc-dev@lists.ozlabs.org
@@@@@@@@@@ -6135,16 -6188,6 -6135,16 -6188,6 -6188,6 -6147,16 -6135,16 -6135,16 -6135,16 +6200,6 @@@@@@@@@@ Q:  http://patchwork.linuxtv.org/project
         S:     Maintained
         F:     drivers/media/dvb-frontends/m88rs2000*
         
- -  ----M88TS2022 MEDIA DRIVER
- -  ----M:     Antti Palosaari <crope@iki.fi>
- -  ----L:     linux-media@vger.kernel.org
- -  ----W:     http://linuxtv.org/
- -  ----W:     http://palosaari.fi/linux/
- -  ----Q:     http://patchwork.linuxtv.org/project/linux-media/list/
- -  ----T:     git git://linuxtv.org/anttip/media_tree.git
- -  ----S:     Maintained
- -  ----F:     drivers/media/tuners/m88ts2022*
- -  ----
         MA901 MASTERKIT USB FM RADIO DRIVER
         M:     Alexey Klimov <klimov.linux@gmail.com>
         L:     linux-media@vger.kernel.org
@@@@@@@@@@ -6337,6 -6380,7 -6337,6 -6380,7 -6380,7 -6349,6 -6337,6 -6337,6 -6337,6 +6392,7 @@@@@@@@@@ F:        drivers/scsi/megaraid
         
         MELLANOX ETHERNET DRIVER (mlx4_en)
         M:     Amir Vadai <amirv@mellanox.com>
+ +  ++++M:     Ido Shamay <idos@mellanox.com>
         L:     netdev@vger.kernel.org
         S:     Supported
         W:     http://www.mellanox.com
@@@@@@@@@@ -6374,7 -6418,7 -6374,7 -6418,7 -6418,7 -6386,7 -6374,7 -6374,7 -6374,7 +6430,7 @@@@@@@@@@ S:        Supporte
         F:     drivers/watchdog/mena21_wdt.c
         
         MEN CHAMELEON BUS (mcb)
- -  ----M:     Johannes Thumshirn <johannes.thumshirn@men.de>
+ +  ++++M:     Johannes Thumshirn <johannes.thumshirn@men.de>
         S:     Supported
         F:     drivers/mcb/
         F:     include/linux/mcb.h
@@@@@@@@@@ -6567,6 -6611,7 -6567,6 -6611,7 -6611,7 -6579,6 -6567,6 -6567,6 -6567,6 +6623,7 @@@@@@@@@@ M:        Laurent Pinchart <laurent.pinchart@i
         L:     linux-media@vger.kernel.org
         T:     git git://linuxtv.org/media_tree.git
         S:     Maintained
+ +  ++++F:     Documentation/devicetree/bindings/media/i2c/mt9v032.txt
         F:     drivers/media/i2c/mt9v032.c
         F:     include/media/mt9v032.h
         
@@@@@@@@@@ -6922,6 -6967,17 -6922,6 -6967,17 -6967,17 -6934,6 -6922,6 -6922,6 -6922,6 +6979,17 @@@@@@@@@@ T:    git git://git.rocketboards.org/linux
         S:     Maintained
         F:     arch/nios2/
         
+ +  ++++NOKIA N900 POWER SUPPLY DRIVERS
+ +  ++++M:     Pali Rohár <pali.rohar@gmail.com>
+ +  ++++S:     Maintained
+ +  ++++F:     include/linux/power/bq2415x_charger.h
+ +  ++++F:     include/linux/power/bq27x00_battery.h
+ +  ++++F:     include/linux/power/isp1704_charger.h
+ +  ++++F:     drivers/power/bq2415x_charger.c
+ +  ++++F:     drivers/power/bq27x00_battery.c
+ +  ++++F:     drivers/power/isp1704_charger.c
+ +  ++++F:     drivers/power/rx51_battery.c
+ +  ++++
         NTB DRIVER
         M:     Jon Mason <jdmason@kudzu.us>
         M:     Dave Jiang <dave.jiang@intel.com>
@@@@@@@@@@ -6956,6 -7012,13 -6956,6 -7012,13 -7012,13 -6968,6 -6956,6 -6956,6 -6956,6 +7024,13 @@@@@@@@@@ S:    Supporte
         F:     drivers/block/nvme*
         F:     include/linux/nvme.h
         
+ +  ++++NXP-NCI NFC DRIVER
+ +  ++++M:     Clément Perrochaud <clement.perrochaud@effinnov.com>
+ +  ++++R:     Charles Gorand <charles.gorand@effinnov.com>
+ +  ++++L:     linux-nfc@lists.01.org (moderated for non-subscribers)
+ +  ++++S:     Supported
+ +  ++++F:     drivers/nfc/nxp-nci
+ +  ++++
         NXP TDA998X DRM DRIVER
         M:     Russell King <rmk+kernel@arm.linux.org.uk>
         S:     Supported
@@@@@@@@@@ -6977,6 -7040,8 -6977,6 -7040,8 -7040,8 -6989,6 -6977,6 -6977,6 -6977,6 +7052,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:     arch/arm/configs/omap1_defconfig
+ +  ++++F:     arch/arm/configs/omap2plus_defconfig
         F:     drivers/i2c/busses/i2c-omap.c
         F:     drivers/irqchip/irq-omap-intc.c
         F:     drivers/mfd/*omap*.c
@@@@@@@@@@ -7107,6 -7172,7 -7107,6 -7172,7 -7172,7 -7119,6 -7107,6 -7107,6 -7107,6 +7184,7 @@@@@@@@@@ OMAP IMAGING SUBSYSTEM (OMAP3 ISP and O
         M:     Laurent Pinchart <laurent.pinchart@ideasonboard.com>
         L:     linux-media@vger.kernel.org
         S:     Maintained
+ +  ++++F:     Documentation/devicetree/bindings/media/ti,omap3isp.txt
         F:     drivers/media/platform/omap3isp/
         F:     drivers/staging/media/omap4iss/
         
@@@@@@@@@@ -7206,6 -7272,15 -7206,6 -7272,15 -7272,15 -7218,6 -7206,6 -7206,6 -7206,6 +7284,15 @@@@@@@@@@ F:    Documentation/devicetree
         F:     arch/*/boot/dts/
         F:     include/dt-bindings/
         
+ +  ++++OPEN FIRMWARE AND DEVICE TREE OVERLAYS
+ +  ++++M:     Pantelis Antoniou <pantelis.antoniou@konsulko.com>
+ +  ++++L:     devicetree@vger.kernel.org
+ +  ++++S:     Maintained
+ +  ++++F:     Documentation/devicetree/dynamic-resolution-notes.txt
+ +  ++++F:     Documentation/devicetree/overlay-notes.txt
+ +  ++++F:     drivers/of/overlay.c
+ +  ++++F:     drivers/of/resolver.c
+ +  ++++
         OPENRISC ARCHITECTURE
         M:     Jonas Bonn <jonas@southpole.se>
         W:     http://openrisc.net
@@@@@@@@@@ -7491,7 -7566,7 -7491,7 -7566,7 -7566,7 -7503,7 -7491,7 -7491,7 -7491,7 +7578,7 @@@@@@@@@@ S:        Maintaine
         F:     drivers/pci/host/*rcar*
         
         PCI DRIVER FOR SAMSUNG EXYNOS
- -  ----M:     Jingoo Han <jg1.han@samsung.com>
+ +  ++++M:     Jingoo Han <jingoohan1@gmail.com>
         L:     linux-pci@vger.kernel.org
         L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
         L:     linux-samsung-soc@vger.kernel.org (moderated for non-subscribers)
@@@@@@@@@@ -7499,8 -7574,7 -7499,8 -7574,7 -7574,7 -7511,8 -7499,8 -7499,8 -7499,8 +7586,7 @@@@@@@@@@ S:        Maintaine
         F:     drivers/pci/host/pci-exynos.c
         
         PCI DRIVER FOR SYNOPSIS DESIGNWARE
- -  ----M:     Mohit Kumar <mohit.kumar@st.com>
- -  ----M:     Jingoo Han <jg1.han@samsung.com>
+ +  ++++M:     Jingoo Han <jingoohan1@gmail.com>
         L:     linux-pci@vger.kernel.org
         S:     Maintained
         F:     drivers/pci/host/*designware*
@@@@@@@@@@ -7514,9 -7588,8 -7514,9 -7588,8 -7588,8 -7526,9 -7514,9 -7514,9 -7514,9 +7600,8 @@@@@@@@@@ F:        Documentation/devicetree/bindings/pc
         F:     drivers/pci/host/pci-host-generic.c
         
         PCIE DRIVER FOR ST SPEAR13XX
- -  ----M:     Mohit Kumar <mohit.kumar@st.com>
         L:     linux-pci@vger.kernel.org
- -  ----S:     Maintained
+ +  ++++S:     Orphan
         F:     drivers/pci/host/*spear*
         
         PCMCIA SUBSYSTEM
@@@@@@@@@@ -7923,10 -7996,10 -7923,10 -7996,10 -7996,10 -7935,10 -7923,10 -7923,10 -7923,10 +8008,10 @@@@@@@@@@ L:      rtc-linux@googlegroups.co
         S:     Maintained
         
         QAT DRIVER
- -  ----M:      Tadeusz Struk <tadeusz.struk@intel.com>
- -  ----L:      qat-linux@intel.com
- -  ----S:      Supported
- -  ----F:      drivers/crypto/qat/
+ +  ++++M:     Tadeusz Struk <tadeusz.struk@intel.com>
+ +  ++++L:     qat-linux@intel.com
+ +  ++++S:     Supported
+ +  ++++F:     drivers/crypto/qat/
         
         QIB DRIVER
         M:     Mike Marciniszyn <infinipath@intel.com>
@@@@@@@@@@ -8077,11 -8150,17 -8077,11 -8150,17 -8150,17 -8089,11 -8077,11 -8077,11 -8077,11 +8162,17 @@@@@@@@@@ S:      Maintaine
         F:     drivers/net/wireless/rt2x00/
         
         RAMDISK RAM BLOCK DEVICE DRIVER
- -  ----M:     Nick Piggin <npiggin@kernel.dk>
+ +  ++++M:     Jens Axboe <axboe@kernel.dk>
         S:     Maintained
         F:     Documentation/blockdev/ramdisk.txt
         F:     drivers/block/brd.c
         
+ +  ++++PERSISTENT MEMORY DRIVER
+ +  ++++M:     Ross Zwisler <ross.zwisler@linux.intel.com>
+ +  ++++L:     linux-nvdimm@lists.01.org
+ +  ++++S:     Supported
+ +  ++++F:     drivers/block/pmem.c
+ +  ++++
         RANDOM NUMBER DRIVER
         M:     "Theodore Ts'o" <tytso@mit.edu>
         S:     Maintained
@@@@@@@@@@ -8153,6 -8232,7 -8153,6 -8232,7 -8232,7 -8165,6 -8153,6 -8153,6 -8153,6 +8244,7 @@@@@@@@@@ X:        kernel/torture.
         
         REAL TIME CLOCK (RTC) SUBSYSTEM
         M:     Alessandro Zummo <a.zummo@towertech.it>
+ +  ++++M:     Alexandre Belloni <alexandre.belloni@free-electrons.com>
         L:     rtc-linux@googlegroups.com
         Q:     http://patchwork.ozlabs.org/project/rtc-linux/list/
         S:     Maintained
@@@@@@@@@@ -8364,7 -8444,6 -8364,7 -8444,6 -8444,6 -8376,7 -8364,7 -8364,7 -8364,7 +8456,6 @@@@@@@@@@ F:        block/partitions/ibm.
         
         S390 NETWORK DRIVERS
         M:     Ursula Braun <ursula.braun@de.ibm.com>
- -  ----M:     Frank Blaschka <blaschka@linux.vnet.ibm.com>
         M:     linux390@de.ibm.com
         L:     linux-s390@vger.kernel.org
         W:     http://www.ibm.com/developerworks/linux/linux390/
@@@@@@@@@@ -8451,7 -8530,7 -8451,7 -8530,7 -8530,7 -8463,7 -8451,7 -8451,7 -8451,7 +8542,7 @@@@@@@@@@ S:        Supporte
         F:     sound/soc/samsung/
         
         SAMSUNG FRAMEBUFFER DRIVER
- -  ----M:     Jingoo Han <jg1.han@samsung.com>
+ +  ++++M:     Jingoo Han <jingoohan1@gmail.com>
         L:     linux-fbdev@vger.kernel.org
         S:     Maintained
         F:     drivers/video/fbdev/s3c-fb.c
@@@@@@@@@@ -8624,11 -8703,9 -8624,11 -8703,9 -8703,9 -8636,11 -8624,11 -8624,11 -8624,11 +8715,9 @@@@@@@@@@ F:  drivers/scsi/sg.
         F:     include/scsi/sg.h
         
         SCSI SUBSYSTEM
- -  ----M:     "James E.J. Bottomley" <JBottomley@parallels.com>
+ +  ++++M:     "James E.J. Bottomley" <JBottomley@odin.com>
         L:     linux-scsi@vger.kernel.org
- -  ----T:     git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git
- -  ----T:     git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6.git
- -  ----T:     git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi-pending-2.6.git
+ +  ++++T:     git git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git
         S:     Maintained
         F:     drivers/scsi/
         F:     include/scsi/
@@@@@@@@@@ -8758,15 -8835,25 -8758,15 -8835,25 -8835,25 -8770,15 -8758,15 -8758,15 -8758,15 +8847,25 @@@@@@@@@@ W:      http://www.emulex.co
         S:     Supported
         F:     drivers/scsi/be2iscsi/
         
- -  ----SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER
- -  ----M:     Sathya Perla <sathya.perla@emulex.com>
- -  ----M:     Subbu Seetharaman <subbu.seetharaman@emulex.com>
- -  ----M:     Ajit Khaparde <ajit.khaparde@emulex.com>
+ +  ++++Emulex 10Gbps NIC BE2, BE3-R, Lancer, Skyhawk-R DRIVER
+ +  ++++M:     Sathya Perla <sathya.perla@avagotech.com>
+ +  ++++M:     Ajit Khaparde <ajit.khaparde@avagotech.com>
+ +  ++++M:     Padmanabh Ratnakar <padmanabh.ratnakar@avagotech.com>
+ +  ++++M:     Sriharsha Basavapatna <sriharsha.basavapatna@avagotech.com>
         L:     netdev@vger.kernel.org
         W:     http://www.emulex.com
         S:     Supported
         F:     drivers/net/ethernet/emulex/benet/
         
+ +  ++++EMULEX ONECONNECT ROCE DRIVER
+ +  ++++M:     Selvin Xavier <selvin.xavier@emulex.com>
+ +  ++++M:     Devesh Sharma <devesh.sharma@emulex.com>
+ +  ++++M:     Mitesh Ahuja <mitesh.ahuja@emulex.com>
+ +  ++++L:     linux-rdma@vger.kernel.org
+ +  ++++W:     http://www.emulex.com
+ +  ++++S:     Supported
+ +  ++++F:     drivers/infiniband/hw/ocrdma/
+ +  ++++
         SFC NETWORK DRIVER
         M:     Solarflare linux maintainers <linux-net-drivers@solarflare.com>
         M:     Shradha Shah <sshah@solarflare.com>
@@@@@@@@@@ -8940,6 -9027,16 -8940,6 -9027,16 -9027,16 -8952,6 -8940,6 -8940,6 -8940,6 +9039,16 @@@@@@@@@@ T:    git git://linuxtv.org/mhadli/v4l-dvb
         S:     Maintained
         F:     drivers/media/platform/am437x/
         
+ +  ++++OV2659 OMNIVISION SENSOR DRIVER
+ +  ++++M:     Lad, Prabhakar <prabhakar.csengg@gmail.com>
+ +  ++++L:     linux-media@vger.kernel.org
+ +  ++++W:     http://linuxtv.org/
+ +  ++++Q:     http://patchwork.linuxtv.org/project/linux-media/list/
+ +  ++++T:     git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
+ +  ++++S:     Maintained
+ +  ++++F:     drivers/media/i2c/ov2659.c
+ +  ++++F:     include/media/ov2659.h
+ +  ++++
         SIS 190 ETHERNET DRIVER
         M:     Francois Romieu <romieu@fr.zoreil.com>
         L:     netdev@vger.kernel.org
@@@@@@@@@@ -9840,7 -9937,7 -9840,7 -9937,7 -9937,7 -9852,7 -9840,7 -9840,7 -9840,7 +9949,7 @@@@@@@@@@ F:        include/linux/wl12xx.
         
         TIPC NETWORK LAYER
         M:     Jon Maloy <jon.maloy@ericsson.com>
- -  ----M:     Allan Stephens <allan.stephens@windriver.com>
+ +  ++++M:     Ying Xue <ying.xue@windriver.com>
         L:     netdev@vger.kernel.org (core kernel code)
         L:     tipc-discussion@lists.sourceforge.net (user apps, general discussion)
         W:     http://tipc.sourceforge.net/
@@@@@@@@@@ -9889,10 -9986,23 -9889,10 -9986,23 -9986,23 -9901,10 -9889,10 -9889,10 -9889,10 +9998,23 @@@@@@@@@@ S:      Maintaine
         F:     drivers/platform/x86/topstar-laptop.c
         
         TOSHIBA ACPI EXTRAS DRIVER
+ +  ++++M:     Azael Avalos <coproscefalo@gmail.com>
         L:     platform-driver-x86@vger.kernel.org
- -  ----S:     Orphan
+ +  ++++S:     Maintained
         F:     drivers/platform/x86/toshiba_acpi.c
         
+ +  ++++TOSHIBA BLUETOOTH DRIVER
+ +  ++++M:     Azael Avalos <coproscefalo@gmail.com>
+ +  ++++L:     platform-driver-x86@vger.kernel.org
+ +  ++++S:     Maintained
+ +  ++++F:     drivers/platform/x86/toshiba_bluetooth.c
+ +  ++++
+ +  ++++TOSHIBA HDD ACTIVE PROTECTION SENSOR DRIVER
+ +  ++++M:     Azael Avalos <coproscefalo@gmail.com>
+ +  ++++L:     platform-driver-x86@vger.kernel.org
+ +  ++++S:     Maintained
+ +  ++++F:     drivers/platform/x86/toshiba_haps.c
+ +  ++++
         TOSHIBA SMM DRIVER
         M:     Jonathan Buzzard <jonathan@buzzard.org.uk>
         L:     tlinux-users@tce.toshiba-dme.co.jp
@@@@@@@@@@ -9944,6 -10054,7 -9944,6 -10054,7 -10054,7 -9956,6 -9944,6 -9944,6 -9944,6 +10066,7 @@@@@@@@@@ F:    drivers/media/pci/tw68
         TPM DEVICE DRIVER
         M:     Peter Huewe <peterhuewe@gmx.de>
         M:     Marcel Selhorst <tpmdd@selhorst.net>
+ +  ++++R:     Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
         W:     http://tpmdd.sourceforge.net
         L:     tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers)
         Q:     git git://github.com/PeterHuewe/linux-tpmdd.git
@@@@@@@@@@ -10097,11 -10208,11 -10097,11 -10208,11 -10208,11 -10109,11 -10097,11 -10097,11 -10097,11 +10220,11 @@@@@@@@@@ F:    include/linux/cdrom.
         F:     include/uapi/linux/cdrom.h
         
         UNISYS S-PAR DRIVERS
- -  ----M:     Benjamin Romer <benjamin.romer@unisys.com>
- -  ----M:     David Kershner <david.kershner@unisys.com>
- -  ----L:     sparmaintainer@unisys.com (Unisys internal)
- -  ----S:     Supported
- -  ----F:     drivers/staging/unisys/
+ +  ++++M:     Benjamin Romer <benjamin.romer@unisys.com>
+ +  ++++M:     David Kershner <david.kershner@unisys.com>
+ +  ++++L:     sparmaintainer@unisys.com (Unisys internal)
+ +  ++++S:     Supported
+ +  ++++F:     drivers/staging/unisys/
         
         UNIVERSAL FLASH STORAGE HOST CONTROLLER DRIVER
         M:     Vinayak Holikatti <vinholikatti@gmail.com>
@@@@@@@@@@ -10448,7 -10559,6 -10448,7 -10559,6 -10559,6 -10460,7 -10448,7 -10448,7 -10448,7 +10571,6 @@@@@@@@@@ F:      include/linux/virtio_console.
         F:     include/uapi/linux/virtio_console.h
         
         VIRTIO CORE, NET AND BLOCK DRIVERS
- -  ----M:     Rusty Russell <rusty@rustcorp.com.au>
         M:     "Michael S. Tsirkin" <mst@redhat.com>
         L:     virtualization@lists.linux-foundation.org
         S:     Maintained
         F:     drivers/vhost/
         F:     include/uapi/linux/vhost.h
         
+ +  ++++VIRTIO INPUT DRIVER
+ +  ++++M:     Gerd Hoffmann <kraxel@redhat.com>
+ +  ++++S:     Maintained
+ +  ++++F:     drivers/virtio/virtio_input.c
+ +  ++++F:     include/uapi/linux/virtio_input.h
+ +  ++++
         VIA RHINE NETWORK DRIVER
         M:     Roger Luethi <rl@hellgate.ch>
         S:     Maintained
@@@@@@@@@@ -10543,6 -10659,14 -10543,6 -10659,14 -10659,14 -10555,6 -10543,6 -10543,6 -10543,6 +10671,14 @@@@@@@@@@ L:  linux-kernel@vger.kernel.or
         S:     Maintained
         F:     drivers/misc/vmw_balloon.c
         
+ +  ++++VMWARE VMMOUSE SUBDRIVER
+ +  ++++M:     "VMware Graphics" <linux-graphics-maintainer@vmware.com>
+ +  ++++M:     "VMware, Inc." <pv-drivers@vmware.com>
+ +  ++++L:     linux-input@vger.kernel.org
+ +  ++++S:     Maintained
+ +  ++++F:     drivers/input/mouse/vmmouse.c
+ +  ++++F:     drivers/input/mouse/vmmouse.h
+ +  ++++
         VMWARE VMXNET3 ETHERNET DRIVER
         M:     Shreyas Bhatewara <sbhatewara@vmware.com>
         M:     "VMware, Inc." <pv-drivers@vmware.com>
@@@@@@@@@@ -10658,7 -10782,7 -10658,7 -10782,7 -10782,7 -10670,7 -10658,7 -10658,7 -10658,7 +10794,7 @@@@@@@@@@ F:      drivers/media/rc/winbond-cir.
         WIMAX STACK
         M:     Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
         M:     linux-wimax@intel.com
- -  ----L:     wimax@linuxwimax.org (subscribers-only)
+ +  ++++L:     wimax@linuxwimax.org (subscribers-only)
         S:     Supported
         W:     http://linuxwimax.org
         F:     Documentation/wimax/README.wimax
@@@@@@@@@@ -10868,6 -10992,16 -10868,6 -10992,16 -10992,16 -10880,6 -10868,6 -10868,6 -10868,6 +11004,16 @@@@@@@@@@ L:  linux-serial@vger.kernel.or
         S:     Maintained
         F:     drivers/tty/serial/uartlite.c
         
+ +  ++++XILINX VIDEO IP CORES
+ +  ++++M:     Hyun Kwon <hyun.kwon@xilinx.com>
+ +  ++++M:     Laurent Pinchart <laurent.pinchart@ideasonboard.com>
+ +  ++++L:     linux-media@vger.kernel.org
+ +  ++++T:     git git://linuxtv.org/media_tree.git
+ +  ++++S:     Supported
+ +  ++++F:     Documentation/devicetree/bindings/media/xilinx/
+ +  ++++F:     drivers/media/platform/xilinx/
+ +  ++++F:     include/uapi/linux/xilinx-v4l2-controls.h
+ +  ++++
         XILLYBUS DRIVER
         M:     Eli Billauer <eli.billauer@gmail.com>
         L:     linux-kernel@vger.kernel.org
@@@@@@@@@@ -10932,6 -11066,7 -10932,6 -11066,7 -11066,7 -10944,6 -10932,6 -10932,6 -10932,6 +11078,7 @@@@@@@@@@ F:      drivers/media/pci/zoran
         ZRAM COMPRESSED RAM BLOCK DEVICE DRVIER
         M:     Minchan Kim <minchan@kernel.org>
         M:     Nitin Gupta <ngupta@vflare.org>
+ +  ++++R:     Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
         L:     linux-kernel@vger.kernel.org
         S:     Maintained
         F:     drivers/block/zram/
@@@@@@@@@@ -10949,6 -11084,7 -10949,6 -11084,7 -11084,7 -10961,6 -10949,6 -10949,6 -10949,6 +11096,7 @@@@@@@@@@ L:      linux-mm@kvack.or
         S:     Maintained
         F:     mm/zsmalloc.c
         F:     include/linux/zsmalloc.h
+ +  ++++F:     Documentation/vm/zsmalloc.txt
         
         ZSWAP COMPRESSED SWAP CACHING
         M:     Seth Jennings <sjennings@variantweb.net>
diff --combined drivers/hid/hid-core.c
@@@@@@@@@@ -706,8 -706,7 -706,7 -706,7 -706,7 -706,7 -706,7 -706,7 -706,7 +706,8 @@@@@@@@@@ static void hid_scan_collection(struct 
         
                if (hid->vendor == USB_VENDOR_ID_MICROSOFT &&
                    (hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3 ||
 --------            hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3_JP) &&
 ++++++++            hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3_JP ||
 ++++++++            hid->product == USB_DEVICE_ID_MS_POWER_COVER) &&
                    hid->group == HID_GROUP_MULTITOUCH)
                        hid->group = HID_GROUP_GENERIC;
         
@@@@@@@@@@ -1062,13 -1061,13 -1061,13 -1061,13 -1061,13 -1061,13 -1061,13 -1061,13 -1061,13 +1062,13 @@@@@@@@@@ static u32 s32ton(__s32 value, unsigne
          * Search linux-kernel and linux-usb-devel archives for "hid-core extract".
          */
         
 --------static __u32 extract(const struct hid_device *hid, __u8 *report,
 ++++++++__u32 hid_field_extract(const struct hid_device *hid, __u8 *report,
                             unsigned offset, unsigned n)
         {
                u64 x;
         
                if (n > 32)
 --------               hid_warn(hid, "extract() called with n (%d) > 32! (%s)\n",
 ++++++++               hid_warn(hid, "hid_field_extract() called with n (%d) > 32! (%s)\n",
                                 n, current->comm);
         
                report += offset >> 3;  /* adjust byte index */
                x = (x >> offset) & ((1ULL << n) - 1);  /* extract bit field */
                return (u32) x;
         }
 ++++++++EXPORT_SYMBOL_GPL(hid_field_extract);
         
         /*
          * "implement" : set bits in a little endian bit stream.
@@@@@@@@@@ -1223,9 -1221,9 -1221,9 -1221,9 -1221,9 -1221,9 -1221,9 -1221,9 -1221,9 +1223,9 @@@@@@@@@@ static void hid_input_field(struct hid_
                for (n = 0; n < count; n++) {
         
                        value[n] = min < 0 ?
 --------                       snto32(extract(hid, data, offset + n * size, size),
 --------                              size) :
 --------                       extract(hid, data, offset + n * size, size);
 ++++++++                       snto32(hid_field_extract(hid, data, offset + n * size,
 ++++++++                              size), size) :
 ++++++++                       hid_field_extract(hid, data, offset + n * size, size);
         
                        /* Ignore report if ErrorRollOver */
                        if (!(field->flags & HID_MAIN_ITEM_VARIABLE) &&
@@@@@@@@@@ -1853,6 -1851,6 -1851,7 -1851,6 -1851,6 -1851,6 -1851,6 -1851,6 -1851,6 +1853,7 @@@@@@@@@@ static const struct hid_device_id hid_h
                { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPKBD) },
                { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CUSBKBD) },
                { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CBTKBD) },
++ ++++++       { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPPRODOCK) },
         #endif
                { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) },
                { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) },
                { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_OFFICE_KB) },
                { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3) },
                { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3_JP) },
 ++++++++       { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER) },
                { HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) },
                { HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL) },
                { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) },
                { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE) },
                { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER) },
                { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER) },
+++++++ +       { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER) },
+++++++ +       { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER) },
+++++++ +       { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
+++++++ +       { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
                { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE) },
                { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
------- -       { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
                { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
                { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) },
                { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) },
                { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO) },
                { 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_USB_DEVICE(USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII) },
                { 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_Q_PAD) },
@@@@@@@@@@ -2268,6 -2265,14 -2266,14 -2265,14 -2265,14 -2265,14 -2266,14 -2268,14 -2265,14 +2273,6 @@@@@@@@@@ static const struct hid_device_id hid_i
                { 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, 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_GLAB, USB_DEVICE_ID_0_0_4_IF_KIT) },
 --------       { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_16_16_IF_KIT) },
 --------       { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_8_8_8_IF_KIT) },
 --------       { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_7_IF_KIT) },
 --------       { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_8_IF_KIT) },
 --------       { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_PHIDGET_MOTORCONTROL) },
                { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_SUPER_Q2) },
                { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_GOGOPEN) },
                { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_PENPOWER) },
                { 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) },
 --------       { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS) },
 --------       { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LCSPEC) },
 --------       { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20) },
 --------       { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20) },
 --------       { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_8_8_4_IF_KIT) },
                { HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) },
                { HID_USB_DEVICE(USB_VENDOR_ID_RISO_KAGAKU, USB_DEVICE_ID_RI_KA_WEBMAIL) },
                { }
diff --combined drivers/hid/hid-ids.h
         #define USB_DEVICE_ID_ATEN_2PORTKVM    0x2204
         #define USB_DEVICE_ID_ATEN_4PORTKVM    0x2205
         #define USB_DEVICE_ID_ATEN_4PORTKVMC   0x2208
  +  ++++#define USB_DEVICE_ID_ATEN_CS682       0x2213
         
         #define USB_VENDOR_ID_ATMEL            0x03eb
         #define USB_DEVICE_ID_ATMEL_MULTITOUCH 0x211c
         #define USB_DEVICE_ID_CHICONY_TACTICAL_PAD     0x0418
         #define USB_DEVICE_ID_CHICONY_MULTI_TOUCH      0xb19d
         #define USB_DEVICE_ID_CHICONY_WIRELESS 0x0618
 ++++++++#define USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE 0x1053
         #define USB_DEVICE_ID_CHICONY_WIRELESS2        0x1123
         #define USB_DEVICE_ID_CHICONY_AK1D     0x1125
         
         #define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_010A 0x010a
         #define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100 0xe100
         
 --------#define USB_VENDOR_ID_GLAB             0x06c2
 --------#define USB_DEVICE_ID_4_PHIDGETSERVO_30        0x0038
 --------#define USB_DEVICE_ID_1_PHIDGETSERVO_30        0x0039
 --------#define USB_DEVICE_ID_0_0_4_IF_KIT     0x0040
 --------#define USB_DEVICE_ID_0_16_16_IF_KIT   0x0044
 --------#define USB_DEVICE_ID_8_8_8_IF_KIT     0x0045
 --------#define USB_DEVICE_ID_0_8_7_IF_KIT     0x0051
 --------#define USB_DEVICE_ID_0_8_8_IF_KIT     0x0053
 --------#define USB_DEVICE_ID_PHIDGET_MOTORCONTROL     0x0058
 --------
         #define USB_VENDOR_ID_GOODTOUCH                0x1aad
         #define USB_DEVICE_ID_GOODTOUCH_000f   0x000f
         
         #define USB_DEVICE_ID_LENOVO_TPKBD     0x6009
         #define USB_DEVICE_ID_LENOVO_CUSBKBD   0x6047
         #define USB_DEVICE_ID_LENOVO_CBTKBD    0x6048
++ ++++++#define USB_DEVICE_ID_LENOVO_TPPRODOCK 0x6067
         
         #define USB_VENDOR_ID_LG               0x1fd2
         #define USB_DEVICE_ID_LG_MULTITOUCH    0x0064
         #define USB_DEVICE_ID_MS_TYPE_COVER_2    0x07a9
         #define USB_DEVICE_ID_MS_TYPE_COVER_3    0x07dc
         #define USB_DEVICE_ID_MS_TYPE_COVER_3_JP 0x07dd
 ++++++++#define USB_DEVICE_ID_MS_POWER_COVER     0x07da
         
         #define USB_VENDOR_ID_MOJO             0x8282
         #define USB_DEVICE_ID_RETRO_ADAPTER    0x3201
         #define USB_DEVICE_ID_SONY_PS3_BDREMOTE                0x0306
         #define USB_DEVICE_ID_SONY_PS3_CONTROLLER      0x0268
         #define USB_DEVICE_ID_SONY_PS4_CONTROLLER      0x05c4
+++++++ +#define USB_DEVICE_ID_SONY_MOTION_CONTROLLER   0x03d5
         #define USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER       0x042f
         #define USB_DEVICE_ID_SONY_BUZZ_CONTROLLER             0x0002
         #define USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER    0x1000
         #define USB_DEVICE_ID_VELLEMAN_K8061_FIRST     0x8061
         #define USB_DEVICE_ID_VELLEMAN_K8061_LAST      0x8068
         
 --------#define USB_VENDOR_ID_VERNIER          0x08f7
 --------#define USB_DEVICE_ID_VERNIER_LABPRO   0x0001
 --------#define USB_DEVICE_ID_VERNIER_GOTEMP   0x0002
 --------#define USB_DEVICE_ID_VERNIER_SKIP     0x0003
 --------#define USB_DEVICE_ID_VERNIER_CYCLOPS  0x0004
 --------#define USB_DEVICE_ID_VERNIER_LCSPEC   0x0006
 --------
         #define USB_VENDOR_ID_VTL              0x0306
         #define USB_DEVICE_ID_VTL_MULTITOUCH_FF3F      0xff3f
         
         
         #define USB_VENDOR_ID_WISEGROUP                0x0925
         #define USB_DEVICE_ID_SMARTJOY_PLUS    0x0005
 --------#define USB_DEVICE_ID_1_PHIDGETSERVO_20        0x8101
 --------#define USB_DEVICE_ID_4_PHIDGETSERVO_20        0x8104
 --------#define USB_DEVICE_ID_8_8_4_IF_KIT     0x8201
         #define USB_DEVICE_ID_SUPER_JOY_BOX_3  0x8888
         #define USB_DEVICE_ID_QUAD_USB_JOYPAD  0x8800
         #define USB_DEVICE_ID_DUAL_USB_JOYPAD  0x8866
         #define USB_VENDOR_ID_RISO_KAGAKU      0x1294  /* Riso Kagaku Corp. */
         #define USB_DEVICE_ID_RI_KA_WEBMAIL    0x1320  /* Webmail Notifier */
         
 ++++++++#define USB_VENDOR_ID_MULTIPLE_1781    0x1781
 ++++++++#define USB_DEVICE_ID_RAPHNET_4NES4SNES_OLD    0x0a8d
 ++++++++
 ++++++++#define USB_VENDOR_ID_DRACAL_RAPHNET   0x289b
 ++++++++#define USB_DEVICE_ID_RAPHNET_2NES2SNES        0x0002
 ++++++++#define USB_DEVICE_ID_RAPHNET_4NES4SNES        0x0003
 ++++++++
         #endif
diff --combined drivers/hid/hid-lenovo.c
@@@@@@@@@@ -43,6 -43,6 -43,35 -43,6 -43,6 -43,6 -43,6 -43,6 -43,6 +43,35 @@@@@@@@@@ struct lenovo_drvdata_cptkbd 
         
         #define map_key_clear(c) hid_map_usage_clear(hi, usage, bit, max, EV_KEY, (c))
         
++ ++++++static const __u8 lenovo_pro_dock_need_fixup_collection[] = {
++ ++++++       0x05, 0x88,             /* Usage Page (Vendor Usage Page 0x88)  */
++ ++++++       0x09, 0x01,             /* Usage (Vendor Usage 0x01)            */
++ ++++++       0xa1, 0x01,             /* Collection (Application)             */
++ ++++++       0x85, 0x04,             /*  Report ID (4)                       */
++ ++++++       0x19, 0x00,             /*  Usage Minimum (0)                   */
++ ++++++       0x2a, 0xff, 0xff,       /*  Usage Maximum (65535)               */
++ ++++++};
++ ++++++
++ ++++++static __u8 *lenovo_report_fixup(struct hid_device *hdev, __u8 *rdesc,
++ ++++++               unsigned int *rsize)
++ ++++++{
++ ++++++       switch (hdev->product) {
++ ++++++       case USB_DEVICE_ID_LENOVO_TPPRODOCK:
++ ++++++               /* the fixups that need to be done:
++ ++++++                *   - get a reasonable usage max for the vendor collection
++ ++++++                *     0x8801 from the report ID 4
++ ++++++                */
++ ++++++               if (*rsize >= 153 &&
++ ++++++                   memcmp(&rdesc[140], lenovo_pro_dock_need_fixup_collection,
++ ++++++                         sizeof(lenovo_pro_dock_need_fixup_collection)) == 0) {
++ ++++++                       rdesc[151] = 0x01;
++ ++++++                       rdesc[152] = 0x00;
++ ++++++               }
++ ++++++               break;
++ ++++++       }
++ ++++++       return rdesc;
++ ++++++}
++ ++++++
         static int lenovo_input_mapping_tpkbd(struct hid_device *hdev,
                        struct hid_input *hi, struct hid_field *field,
                        struct hid_usage *usage, unsigned long **bit, int *max)
@@@@@@@@@@ -599,8 -599,7 -628,7 -599,7 -599,7 -599,7 -599,7 -599,7 -599,7 +628,8 @@@@@@@@@@ static int lenovo_probe_tpkbd(struct hi
                                            GFP_KERNEL);
                if (data_pointer == NULL) {
                        hid_err(hdev, "Could not allocate memory for driver data\n");
 --------               return -ENOMEM;
 ++++++++               ret = -ENOMEM;
 ++++++++               goto err;
                }
         
                // set same default values as windows driver
                name_micmute = devm_kzalloc(&hdev->dev, name_sz, GFP_KERNEL);
                if (name_mute == NULL || name_micmute == NULL) {
                        hid_err(hdev, "Could not allocate memory for led data\n");
 --------               return -ENOMEM;
 ++++++++               ret = -ENOMEM;
 ++++++++               goto err;
                }
                snprintf(name_mute, name_sz, "%s:amber:mute", dev_name(dev));
                snprintf(name_micmute, name_sz, "%s:amber:micmute", dev_name(dev));
                lenovo_features_set_tpkbd(hdev);
         
                return 0;
 ++++++++err:
 ++++++++       sysfs_remove_group(&hdev->dev.kobj, &lenovo_attr_group_tpkbd);
 ++++++++       return ret;
         }
         
         static int lenovo_probe_cptkbd(struct hid_device *hdev)
@@@@@@@@@@ -767,10 -762,10 -791,29 -762,10 -762,10 -762,10 -762,10 -762,10 -762,10 +796,29 @@@@@@@@@@ static void lenovo_remove(struct hid_de
                hid_hw_stop(hdev);
         }
         
++ ++++++static void lenovo_input_configured(struct hid_device *hdev,
++ ++++++               struct hid_input *hi)
++ ++++++{
++ ++++++       switch (hdev->product) {
++ ++++++               case USB_DEVICE_ID_LENOVO_TPKBD:
++ ++++++               case USB_DEVICE_ID_LENOVO_CUSBKBD:
++ ++++++               case USB_DEVICE_ID_LENOVO_CBTKBD:
++ ++++++                       if (test_bit(EV_REL, hi->input->evbit)) {
++ ++++++                               /* set only for trackpoint device */
++ ++++++                               __set_bit(INPUT_PROP_POINTER, hi->input->propbit);
++ ++++++                               __set_bit(INPUT_PROP_POINTING_STICK,
++ ++++++                                               hi->input->propbit);
++ ++++++                       }
++ ++++++                       break;
++ ++++++       }
++ ++++++}
++ ++++++
++ ++++++
         static const struct hid_device_id lenovo_devices[] = {
                { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPKBD) },
                { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CUSBKBD) },
                { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CBTKBD) },
++ ++++++       { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPPRODOCK) },
                { }
         };
         
@@@@@@@@@@ -779,10 -774,10 -822,12 -774,10 -774,10 -774,10 -774,10 -774,10 -774,10 +827,12 @@@@@@@@@@ MODULE_DEVICE_TABLE(hid, lenovo_devices
         static struct hid_driver lenovo_driver = {
                .name = "lenovo",
                .id_table = lenovo_devices,
++ ++++++       .input_configured = lenovo_input_configured,
                .input_mapping = lenovo_input_mapping,
                .probe = lenovo_probe,
                .remove = lenovo_remove,
                .raw_event = lenovo_raw_event,
++ ++++++       .report_fixup = lenovo_report_fixup,
         };
         module_hid_driver(lenovo_driver);
         
diff --combined drivers/hid/hid-rmi.c
         #define RMI_SET_RMI_MODE_REPORT_ID     0x0f /* Feature Report */
         
         /* flags */
 --------#define RMI_READ_REQUEST_PENDING       BIT(0)
 --------#define RMI_READ_DATA_PENDING          BIT(1)
 --------#define RMI_STARTED                    BIT(2)
 ++++++++#define RMI_READ_REQUEST_PENDING       0
 ++++++++#define RMI_READ_DATA_PENDING          1
 ++++++++#define RMI_STARTED                    2
         
         /* device flags */
         #define RMI_DEVICE                     BIT(0)
@@@@@@@@@@ -1013,6 -1013,6 -1013,6 -1013,6 -1013,7 -1013,6 -1013,6 -1013,6 -1013,6 +1013,7 @@@@@@@@@@ static int rmi_populate_f30(struct hid_
         
         static int rmi_populate(struct hid_device *hdev)
         {
++++ ++++       struct rmi_data *data = hid_get_drvdata(hdev);
                int ret;
         
                ret = rmi_scan_pdt(hdev);
                        return ret;
                }
         
---- ----       ret = rmi_populate_f30(hdev);
---- ----       if (ret)
---- ----               hid_warn(hdev, "Error while initializing F30 (%d).\n", ret);
++++ ++++       if (!(data->device_flags & RMI_DEVICE_HAS_PHYS_BUTTONS)) {
++++ ++++               ret = rmi_populate_f30(hdev);
++++ ++++               if (ret)
++++ ++++                       hid_warn(hdev, "Error while initializing F30 (%d).\n", ret);
++++ ++++       }
         
                return 0;
         }
         #include <linux/i2c/i2c-hid.h>
         
         /* flags */
 --------#define I2C_HID_STARTED                (1 << 0)
 --------#define I2C_HID_RESET_PENDING  (1 << 1)
 --------#define I2C_HID_READ_PENDING   (1 << 2)
 ++++++++#define I2C_HID_STARTED                0
 ++++++++#define I2C_HID_RESET_PENDING  1
 ++++++++#define I2C_HID_READ_PENDING   2
         
         #define I2C_HID_PWR_ON         0x00
         #define I2C_HID_PWR_SLEEP      0x01
@@@@@@@@@@ -862,7 -862,7 -862,6 -862,7 -862,7 -862,6 -862,6 -862,6 -862,6 +862,7 @@@@@@@@@@ static int i2c_hid_acpi_pdata(struct i2
                union acpi_object *obj;
                struct acpi_device *adev;
                acpi_handle handle;
  +  ++++       int ret;
         
                handle = ACPI_HANDLE(&client->dev);
                if (!handle || acpi_bus_get_device(handle, &adev))
                pdata->hid_descriptor_address = obj->integer.value;
                ACPI_FREE(obj);
         
  -  ----       return acpi_dev_add_driver_gpios(adev, i2c_hid_acpi_gpios);
  +  ++++       /* GPIOs are optional */
  +  ++++       ret = acpi_dev_add_driver_gpios(adev, i2c_hid_acpi_gpios);
  +  ++++       return ret < 0 && ret != -ENXIO ? ret : 0;
         }
         
         static const struct acpi_device_id i2c_hid_acpi_match[] = {
@@@@@@@@@@ -1019,7 -1019,6 -1016,7 -1019,7 -1019,7 -1016,7 -1016,7 -1016,7 -1016,7 +1019,6 @@@@@@@@@@ static int i2c_hid_probe(struct i2c_cli
                hid->driver_data = client;
                hid->ll_driver = &i2c_hid_ll_driver;
                hid->dev.parent = &client->dev;
- -------       ACPI_COMPANION_SET(&hid->dev, ACPI_COMPANION(&client->dev));
                hid->bus = BUS_I2C;
                hid->version = le16_to_cpu(ihid->hdesc.bcdVersion);
                hid->vendor = le16_to_cpu(ihid->hdesc.wVendorID);
@@@@@@@@@@ -52,7 -52,7 -52,7 -52,7 -52,7 -52,7 -52,6 -52,7 -52,7 +52,6 @@@@@@@@@@ static const struct hid_blacklist 
                { USB_VENDOR_ID_ETURBOTOUCH, USB_DEVICE_ID_ETURBOTOUCH_2968, HID_QUIRK_MULTI_INPUT },
                { USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_USB_JOYPAD, HID_QUIRK_MULTI_INPUT },
                { USB_VENDOR_ID_PANTHERLORD, USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK, HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS },
------ --       { USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII, HID_QUIRK_MULTI_INPUT },
                { USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS, HID_QUIRK_MULTI_INPUT },
         
                { USB_VENDOR_ID_AIREN, USB_DEVICE_ID_AIREN_SLIMPLUS, HID_QUIRK_NOGET },
                { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM, HID_QUIRK_NOGET },
                { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM, HID_QUIRK_NOGET },
                { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC, HID_QUIRK_NOGET },
  +  ++++       { USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS682, HID_QUIRK_NOGET },
                { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FIGHTERSTICK, HID_QUIRK_NOGET },
                { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_COMBATSTICK, HID_QUIRK_NOGET },
                { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE, HID_QUIRK_NOGET },
                { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_PEDALS, HID_QUIRK_NOGET },
                { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK, HID_QUIRK_NOGET },
                { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },
 ++++++++       { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE, HID_QUIRK_ALWAYS_POLL },
                { USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
                { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN, HID_QUIRK_ALWAYS_POLL },
                { USB_VENDOR_ID_ELAN, USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B, HID_QUIRK_ALWAYS_POLL },
                { USB_VENDOR_ID_MGE, USB_DEVICE_ID_MGE_UPS, HID_QUIRK_NOGET },
                { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3, HID_QUIRK_NO_INIT_REPORTS },
                { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3_JP, HID_QUIRK_NO_INIT_REPORTS },
 ++++++++       { USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER, HID_QUIRK_NO_INIT_REPORTS },
                { USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL, HID_QUIRK_NO_INIT_REPORTS },
                { USB_VENDOR_ID_NEXIO, USB_DEVICE_ID_NEXIO_MULTITOUCH_PTI0750, HID_QUIRK_NO_INIT_REPORTS },
                { USB_VENDOR_ID_NOVATEK, USB_DEVICE_ID_NOVATEK_MOUSE, HID_QUIRK_NO_INIT_REPORTS },
                { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_QUAD_HD, HID_QUIRK_NO_INIT_REPORTS },
                { USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP_V103, HID_QUIRK_NO_INIT_REPORTS },
                { USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBOARD_A096, HID_QUIRK_NO_INIT_INPUT_REPORTS },
 ++++++++       { USB_VENDOR_ID_MULTIPLE_1781, USB_DEVICE_ID_RAPHNET_4NES4SNES_OLD, HID_QUIRK_MULTI_INPUT },
 ++++++++       { USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_2NES2SNES, HID_QUIRK_MULTI_INPUT },
 ++++++++       { USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_4NES4SNES, HID_QUIRK_MULTI_INPUT },
         
                { 0, 0 }
         };
diff --combined drivers/hid/wacom_wac.c
@@@@@@@@@@ -69,7 -69,7 -69,7 -69,7 -69,7 -69,7 -69,7 -69,7 -69,7 +69,7 @@@@@@@@@@ static void wacom_notify_battery(struc
         static int wacom_penpartner_irq(struct wacom_wac *wacom)
         {
                unsigned char *data = wacom->data;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->pen_input;
         
                switch (data[0]) {
                case 1:
@@@@@@@@@@ -114,7 -114,7 -114,7 -114,7 -114,7 -114,7 -114,7 -114,7 -114,7 +114,7 @@@@@@@@@@ static int wacom_pl_irq(struct wacom_wa
         {
                struct wacom_features *features = &wacom->features;
                unsigned char *data = wacom->data;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->pen_input;
                int prox, pressure;
         
                if (data[0] != WACOM_REPORT_PENABLED) {
         static int wacom_ptu_irq(struct wacom_wac *wacom)
         {
                unsigned char *data = wacom->data;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->pen_input;
         
                if (data[0] != WACOM_REPORT_PENABLED) {
                        dev_dbg(input->dev.parent,
         static int wacom_dtu_irq(struct wacom_wac *wacom)
         {
                unsigned char *data = wacom->data;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->pen_input;
                int prox = data[1] & 0x20;
         
                dev_dbg(input->dev.parent,
         static int wacom_dtus_irq(struct wacom_wac *wacom)
         {
                char *data = wacom->data;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->pen_input;
                unsigned short prox, pressure = 0;
         
                if (data[0] != WACOM_REPORT_DTUS && data[0] != WACOM_REPORT_DTUSPAD) {
@@@@@@@@@@ -297,7 -297,7 -297,7 -297,7 -297,7 -297,7 -297,7 -297,7 -297,7 +297,7 @@@@@@@@@@ static int wacom_graphire_irq(struct wa
         {
                struct wacom_features *features = &wacom->features;
                unsigned char *data = wacom->data;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->pen_input;
                struct input_dev *pad_input = wacom->pad_input;
                int battery_capacity, ps_connected;
                int prox;
@@@@@@@@@@ -464,7 -464,7 -464,7 -464,7 -464,7 -464,7 -464,7 -464,7 -464,7 +464,7 @@@@@@@@@@ static int wacom_intuos_inout(struct wa
         {
                struct wacom_features *features = &wacom->features;
                unsigned char *data = wacom->data;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->pen_input;
                int idx = 0;
         
                /* tool number */
@@@@@@@@@@ -649,7 -649,7 -649,7 -649,7 -649,7 -649,7 -649,7 -649,7 -649,7 +649,7 @@@@@@@@@@ static void wacom_intuos_general(struc
         {
                struct wacom_features *features = &wacom->features;
                unsigned char *data = wacom->data;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->pen_input;
                unsigned int t;
         
                /* general pen packet */
@@@@@@@@@@ -681,7 -681,7 -681,7 -681,7 -681,7 -681,7 -681,7 -681,7 -681,7 +681,7 @@@@@@@@@@ static int wacom_intuos_irq(struct waco
         {
                struct wacom_features *features = &wacom->features;
                unsigned char *data = wacom->data;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->pen_input;
                unsigned int t;
                int idx = 0, result;
         
@@@@@@@@@@ -1025,7 -1025,7 -1025,7 -1025,7 -1025,7 -1025,7 -1025,7 -1025,7 -1025,7 +1025,7 @@@@@@@@@@ static void wacom_intuos_bt_process_dat
                memcpy(wacom->data, data, 10);
                wacom_intuos_irq(wacom);
         
--------        input_sync(wacom->input);
++++++++        input_sync(wacom->pen_input);
                if (wacom->pad_input)
                        input_sync(wacom->pad_input);
         }
@@@@@@@@@@ -1057,7 -1057,7 -1057,7 -1057,7 -1057,7 -1057,7 -1057,7 -1057,7 -1057,7 +1057,7 @@@@@@@@@@ static int wacom_intuos_bt_irq(struct w
                                             ps_connected);
                        break;
                default:
--------                dev_dbg(wacom->input->dev.parent,
++++++++                dev_dbg(wacom->pen_input->dev.parent,
                                        "Unknown report: %d,%d size:%zu\n",
                                        data[0], data[1], len);
                        return 0;
         
         static int wacom_wac_finger_count_touches(struct wacom_wac *wacom)
         {
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->touch_input;
                unsigned touch_max = wacom->features.touch_max;
                int count = 0;
                int i;
         
  -  ---        /* non-HID_GENERIC single touch input doesn't call this routine */
  -  ---        if ((touch_max == 1) && (wacom->features.type == HID_GENERIC))
  -  ---                return wacom->hid_data.tipswitch &&
  +  ++++       if (!touch_max)
  +  ++++               return 0;
  +  ++++
-- --           /* non-HID_GENERIC single touch input doesn't call this routine */
-- --           if ((touch_max == 1) && (wacom->features.type == HID_GENERIC))
-- --                   return wacom->hid_data.tipswitch &&
++++++++        if (touch_max == 1)
++++++++                return test_bit(BTN_TOUCH, input->key) &&
                               !wacom->shared->stylus_in_proximity;
         
                for (i = 0; i < input->mt->num_slots; i++) {
         
         static int wacom_24hdt_irq(struct wacom_wac *wacom)
         {
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->touch_input;
                unsigned char *data = wacom->data;
                int i;
                int current_num_contacts = data[61];
         
         static int wacom_mt_touch(struct wacom_wac *wacom)
         {
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->touch_input;
                unsigned char *data = wacom->data;
                int i;
                int current_num_contacts = data[2];
         
         static int wacom_tpc_mt_touch(struct wacom_wac *wacom)
         {
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->touch_input;
                unsigned char *data = wacom->data;
                int i;
         
         static int wacom_tpc_single_touch(struct wacom_wac *wacom, size_t len)
         {
                unsigned char *data = wacom->data;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->touch_input;
                bool prox = !wacom->shared->stylus_in_proximity;
                int x = 0, y = 0;
         
         static int wacom_tpc_pen(struct wacom_wac *wacom)
         {
                unsigned char *data = wacom->data;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->pen_input;
                bool prox = data[1] & 0x20;
         
                if (!wacom->shared->stylus_in_proximity) /* first in prox */
@@@@@@@@@@ -1305,8 -1305,8 -1302,8 -1305,8 -1305,8 -1302,8 -1302,8 -1302,8 -1301,12 +1304,12 @@@@@@@@@@ static int wacom_tpc_irq(struct wacom_w
         {
                unsigned char *data = wacom->data;
         
--------        dev_dbg(wacom->input->dev.parent,
--------                "%s: received report #%d\n", __func__, data[0]);
++++++++        if (wacom->pen_input)
++++++++                dev_dbg(wacom->pen_input->dev.parent,
++++++++                        "%s: received report #%d\n", __func__, data[0]);
++++++++        else if (wacom->touch_input)
++++++++                dev_dbg(wacom->touch_input->dev.parent,
++++++++                        "%s: received report #%d\n", __func__, data[0]);
         
                switch (len) {
                case WACOM_PKGLEN_TPC1FG:
                return 0;
         }
         
-------- static void wacom_map_usage(struct wacom *wacom, struct hid_usage *usage,
++++++++ static void wacom_map_usage(struct input_dev *input, struct hid_usage *usage,
                        struct hid_field *field, __u8 type, __u16 code, int fuzz)
         {
--------        struct wacom_wac *wacom_wac = &wacom->wacom_wac;
--------        struct input_dev *input = wacom_wac->input;
                int fmin = field->logical_minimum;
                int fmax = field->logical_maximum;
         
@@@@@@@@@@ -1370,36 -1370,36 -1367,36 -1370,36 -1370,36 -1367,36 -1367,36 -1367,36 -1368,38 +1371,38 @@@@@@@@@@ static void wacom_wac_pen_usage_mapping
                        struct hid_field *field, struct hid_usage *usage)
         {
                struct wacom *wacom = hid_get_drvdata(hdev);
++++++++        struct wacom_wac *wacom_wac = &wacom->wacom_wac;
++++++++        struct input_dev *input = wacom_wac->pen_input;
         
                switch (usage->hid) {
                case HID_GD_X:
--------                wacom_map_usage(wacom, usage, field, EV_ABS, ABS_X, 4);
++++++++                wacom_map_usage(input, usage, field, EV_ABS, ABS_X, 4);
                        break;
                case HID_GD_Y:
--------                wacom_map_usage(wacom, usage, field, EV_ABS, ABS_Y, 4);
++++++++                wacom_map_usage(input, usage, field, EV_ABS, ABS_Y, 4);
                        break;
                case HID_DG_TIPPRESSURE:
--------                wacom_map_usage(wacom, usage, field, EV_ABS, ABS_PRESSURE, 0);
++++++++                wacom_map_usage(input, usage, field, EV_ABS, ABS_PRESSURE, 0);
                        break;
                case HID_DG_INRANGE:
--------                wacom_map_usage(wacom, usage, field, EV_KEY, BTN_TOOL_PEN, 0);
++++++++                wacom_map_usage(input, usage, field, EV_KEY, BTN_TOOL_PEN, 0);
                        break;
                case HID_DG_INVERT:
--------                wacom_map_usage(wacom, usage, field, EV_KEY,
++++++++                wacom_map_usage(input, usage, field, EV_KEY,
                                        BTN_TOOL_RUBBER, 0);
                        break;
                case HID_DG_ERASER:
                case HID_DG_TIPSWITCH:
--------                wacom_map_usage(wacom, usage, field, EV_KEY, BTN_TOUCH, 0);
++++++++                wacom_map_usage(input, usage, field, EV_KEY, BTN_TOUCH, 0);
                        break;
                case HID_DG_BARRELSWITCH:
--------                wacom_map_usage(wacom, usage, field, EV_KEY, BTN_STYLUS, 0);
++++++++                wacom_map_usage(input, usage, field, EV_KEY, BTN_STYLUS, 0);
                        break;
                case HID_DG_BARRELSWITCH2:
--------                wacom_map_usage(wacom, usage, field, EV_KEY, BTN_STYLUS2, 0);
++++++++                wacom_map_usage(input, usage, field, EV_KEY, BTN_STYLUS2, 0);
                        break;
                case HID_DG_TOOLSERIALNUMBER:
--------                wacom_map_usage(wacom, usage, field, EV_MSC, MSC_SERIAL, 0);
++++++++                wacom_map_usage(input, usage, field, EV_MSC, MSC_SERIAL, 0);
                        break;
                }
         }
@@@@@@@@@@ -1409,7 -1409,7 -1406,7 -1409,7 -1409,7 -1406,7 -1406,7 -1406,7 -1409,7 +1412,7 @@@@@@@@@@ static int wacom_wac_pen_event(struct h
         {
                struct wacom *wacom = hid_get_drvdata(hdev);
                struct wacom_wac *wacom_wac = &wacom->wacom_wac;
--------        struct input_dev *input = wacom_wac->input;
++++++++        struct input_dev *input = wacom_wac->pen_input;
         
                /* checking which Tool / tip switch to send */
                switch (usage->hid) {
@@@@@@@@@@ -1439,7 -1439,7 -1436,7 -1439,7 -1439,7 -1436,7 -1436,7 -1436,7 -1439,7 +1442,7 @@@@@@@@@@ static void wacom_wac_pen_report(struc
         {
                struct wacom *wacom = hid_get_drvdata(hdev);
                struct wacom_wac *wacom_wac = &wacom->wacom_wac;
--------        struct input_dev *input = wacom_wac->input;
++++++++        struct input_dev *input = wacom_wac->pen_input;
                bool prox = wacom_wac->hid_data.inrange_state;
         
                if (!wacom_wac->shared->stylus_in_proximity) /* first in prox */
@@@@@@@@@@ -1468,23 -1468,23 -1465,23 -1468,23 -1468,23 -1465,23 -1465,23 -1465,23 -1468,24 +1471,24 @@@@@@@@@@ static void wacom_wac_finger_usage_mapp
                struct wacom *wacom = hid_get_drvdata(hdev);
                struct wacom_wac *wacom_wac = &wacom->wacom_wac;
                struct wacom_features *features = &wacom_wac->features;
++++++++        struct input_dev *input = wacom_wac->touch_input;
                unsigned touch_max = wacom_wac->features.touch_max;
         
                switch (usage->hid) {
                case HID_GD_X:
                        features->last_slot_field = usage->hid;
                        if (touch_max == 1)
--------                        wacom_map_usage(wacom, usage, field, EV_ABS, ABS_X, 4);
++++++++                        wacom_map_usage(input, usage, field, EV_ABS, ABS_X, 4);
                        else
--------                        wacom_map_usage(wacom, usage, field, EV_ABS,
++++++++                        wacom_map_usage(input, usage, field, EV_ABS,
                                                ABS_MT_POSITION_X, 4);
                        break;
                case HID_GD_Y:
                        features->last_slot_field = usage->hid;
                        if (touch_max == 1)
--------                        wacom_map_usage(wacom, usage, field, EV_ABS, ABS_Y, 4);
++++++++                        wacom_map_usage(input, usage, field, EV_ABS, ABS_Y, 4);
                        else
--------                        wacom_map_usage(wacom, usage, field, EV_ABS,
++++++++                        wacom_map_usage(input, usage, field, EV_ABS,
                                                ABS_MT_POSITION_Y, 4);
                        break;
                case HID_DG_CONTACTID:
                        break;
                case HID_DG_TIPSWITCH:
                        features->last_slot_field = usage->hid;
--------                wacom_map_usage(wacom, usage, field, EV_KEY, BTN_TOUCH, 0);
++++++++                wacom_map_usage(input, usage, field, EV_KEY, BTN_TOUCH, 0);
                        break;
                }
         }
@@@@@@@@@@ -1554,7 -1554,7 -1551,7 -1554,7 -1554,7 -1551,7 -1551,7 -1551,7 -1555,7 +1558,7 @@@@@@@@@@ static int wacom_wac_finger_event(struc
         
                if (usage->usage_index + 1 == field->report_count) {
                        if (usage->hid == wacom_wac->features.last_slot_field)
--------                        wacom_wac_finger_slot(wacom_wac, wacom_wac->input);
++++++++                        wacom_wac_finger_slot(wacom_wac, wacom_wac->touch_input);
                }
         
                return 0;
@@@@@@@@@@ -1565,7 -1565,7 -1562,7 -1565,7 -1565,7 -1562,7 -1562,7 -1562,7 -1566,7 +1569,7 @@@@@@@@@@ static void wacom_wac_finger_report(str
         {
                struct wacom *wacom = hid_get_drvdata(hdev);
                struct wacom_wac *wacom_wac = &wacom->wacom_wac;
--------        struct input_dev *input = wacom_wac->input;
++++++++        struct input_dev *input = wacom_wac->touch_input;
                unsigned touch_max = wacom_wac->features.touch_max;
         
                if (touch_max > 1)
@@@@@@@@@@ -1582,10 -1582,10 -1579,10 -1582,10 -1582,10 -1579,10 -1579,10 -1579,10 -1583,10 +1586,10 @@@@@@@@@@ void wacom_wac_usage_mapping(struct hid
         {
                struct wacom *wacom = hid_get_drvdata(hdev);
                struct wacom_wac *wacom_wac = &wacom->wacom_wac;
--------        struct input_dev *input = wacom_wac->input;
         
                /* currently, only direct devices have proper hid report descriptors */
--------        __set_bit(INPUT_PROP_DIRECT, input->propbit);
++++++++        __set_bit(INPUT_PROP_DIRECT, wacom_wac->pen_input->propbit);
++++++++        __set_bit(INPUT_PROP_DIRECT, wacom_wac->touch_input->propbit);
         
                if (WACOM_PEN_FIELD(field))
                        return wacom_wac_pen_usage_mapping(hdev, field, usage);
@@@@@@@@@@ -1630,7 -1630,7 -1627,7 -1630,7 -1630,7 -1627,7 -1627,7 -1627,7 -1631,7 +1634,7 @@@@@@@@@@ void wacom_wac_report(struct hid_devic
         static int wacom_bpt_touch(struct wacom_wac *wacom)
         {
                struct wacom_features *features = &wacom->features;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->touch_input;
                struct input_dev *pad_input = wacom->pad_input;
                unsigned char *data = wacom->data;
                int i;
         static void wacom_bpt3_touch_msg(struct wacom_wac *wacom, unsigned char *data)
         {
                struct wacom_features *features = &wacom->features;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->touch_input;
                bool touch = data[1] & 0x80;
                int slot = input_mt_get_slot_by_key(input, data[0]);
         
@@@@@@@@@@ -1736,7 -1736,7 -1733,7 -1736,7 -1736,7 -1733,7 -1733,7 -1733,7 -1737,6 +1740,6 @@@@@@@@@@ static void wacom_bpt3_button_msg(struc
         
         static int wacom_bpt3_touch(struct wacom_wac *wacom)
         {
--------        struct input_dev *input = wacom->input;
                unsigned char *data = wacom->data;
                int count = data[1] & 0x07;
                int i;
                                wacom_bpt3_button_msg(wacom, data + offset);
         
                }
--------        input_mt_sync_frame(input);
--------        wacom->shared->touch_down = wacom_wac_finger_count_touches(wacom);
++++++++ 
++++++++        /* only update the touch if we actually have a touchpad */
++++++++        if (wacom->touch_registered) {
++++++++                input_mt_sync_frame(wacom->touch_input);
++++++++                wacom->shared->touch_down = wacom_wac_finger_count_touches(wacom);
++++++++        }
         
                return 1;
         }
         static int wacom_bpt_pen(struct wacom_wac *wacom)
         {
                struct wacom_features *features = &wacom->features;
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->pen_input;
                unsigned char *data = wacom->data;
                int prox = 0, x = 0, y = 0, p = 0, d = 0, pen = 0, btn1 = 0, btn2 = 0;
         
@@@@@@@@@@ -1873,7 -1873,7 -1870,7 -1873,7 -1873,7 -1870,7 -1870,7 -1870,7 -1877,7 +1880,7 @@@@@@@@@@ static void wacom_bamboo_pad_pen_event(
         static int wacom_bamboo_pad_touch_event(struct wacom_wac *wacom,
                        unsigned char *data)
         {
--------        struct input_dev *input = wacom->input;
++++++++        struct input_dev *input = wacom->touch_input;
                unsigned char *finger_data, prefix;
                unsigned id;
                int x, y;
@@@@@@@@@@ -2117,7 -2117,7 -2114,7 -2117,7 -2117,7 -2114,7 -2114,7 -2114,7 -2121,10 +2124,10 @@@@@@@@@@ void wacom_wac_irq(struct wacom_wac *wa
                }
         
                if (sync) {
--------                input_sync(wacom_wac->input);
++++++++                if (wacom_wac->pen_input)
++++++++                        input_sync(wacom_wac->pen_input);
++++++++                if (wacom_wac->touch_input)
++++++++                        input_sync(wacom_wac->touch_input);
                        if (wacom_wac->pad_input)
                                input_sync(wacom_wac->pad_input);
                }
         
         static void wacom_setup_cintiq(struct wacom_wac *wacom_wac)
         {
--------        struct input_dev *input_dev = wacom_wac->input;
++++++++        struct input_dev *input_dev = wacom_wac->pen_input;
         
                input_set_capability(input_dev, EV_MSC, MSC_SERIAL);
         
         
         static void wacom_setup_intuos(struct wacom_wac *wacom_wac)
         {
--------        struct input_dev *input_dev = wacom_wac->input;
++++++++        struct input_dev *input_dev = wacom_wac->pen_input;
         
                input_set_capability(input_dev, EV_REL, REL_WHEEL);
         
                input_set_abs_params(input_dev, ABS_THROTTLE, -1023, 1023, 0, 0);
         }
         
-------- void wacom_setup_device_quirks(struct wacom_features *features)
++++++++ void wacom_setup_device_quirks(struct wacom *wacom)
         {
++++++++        struct wacom_features *features = &wacom->wacom_wac.features;
++++++++ 
++++++++        /* The pen and pad share the same interface on most devices */
++++++++        if (features->type == GRAPHIRE_BT || features->type == WACOM_G4 ||
++++++++            features->type == DTUS || features->type == WACOM_MO ||
++++++++            (features->type >= INTUOS3S && features->type <= WACOM_13HD && 
++++++++             features->type != INTUOSHT)) {
++++++++                if (features->device_type & WACOM_DEVICETYPE_PEN)
++++++++                        features->device_type |= WACOM_DEVICETYPE_PAD;
++++++++        }
         
                /* touch device found but size is not defined. use default */
--------        if (features->device_type == BTN_TOOL_FINGER && !features->x_max) {
++++++++        if (features->device_type & WACOM_DEVICETYPE_TOUCH && !features->x_max) {
                        features->x_max = 1023;
                        features->y_max = 1023;
                }
         
++++++++        /*
++++++++         * Intuos5/Pro and Bamboo 3rd gen have no useful data about its
++++++++         * touch interface in its HID descriptor. If this is the touch
++++++++         * interface (PacketSize of WACOM_PKGLEN_BBTOUCH3), override the
++++++++         * tablet values.
++++++++         */
++++++++        if ((features->type >= INTUOS5S && features->type <= INTUOSHT) ||
++++++++                (features->type == BAMBOO_PT)) {
++++++++                if (features->pktlen == WACOM_PKGLEN_BBTOUCH3) {
++++++++                        if (features->touch_max)
++++++++                                features->device_type |= WACOM_DEVICETYPE_TOUCH;
++++++++                        if (features->type == BAMBOO_PT || features->type == INTUOSHT)
++++++++                                features->device_type |= WACOM_DEVICETYPE_PAD;
++++++++ 
++++++++                        features->x_max = 4096;
++++++++                        features->y_max = 4096;
++++++++                }
++++++++        }
++++++++ 
++++++++        /*
++++++++         * Raw Wacom-mode pen and touch events both come from interface
++++++++         * 0, whose HID descriptor has an application usage of 0xFF0D
++++++++         * (i.e., WACOM_VENDORDEFINED_PEN). We route pen packets back
++++++++         * out through the HID_GENERIC device created for interface 1,
++++++++         * so rewrite this one to be of type BTN_TOOL_FINGER.
++++++++         */
++++++++        if (features->type == BAMBOO_PAD)
++++++++                features->device_type |= WACOM_DEVICETYPE_TOUCH;
++++++++ 
++++++++        if (wacom->hdev->bus == BUS_BLUETOOTH)
++++++++                features->quirks |= WACOM_QUIRK_BATTERY;
++++++++ 
                /* quirk for bamboo touch with 2 low res touches */
                if (features->type == BAMBOO_PT &&
                    features->pktlen == WACOM_PKGLEN_BBTOUCH) {
                        features->quirks |= WACOM_QUIRK_NO_INPUT;
         
                        /* must be monitor interface if no device_type set */
--------                if (!features->device_type) {
++++++++                if (features->device_type == WACOM_DEVICETYPE_NONE) {
                                features->quirks |= WACOM_QUIRK_MONITOR;
                                features->quirks |= WACOM_QUIRK_BATTERY;
                        }
                }
         }
         
-------- static void wacom_abs_set_axis(struct input_dev *input_dev,
--------                               struct wacom_wac *wacom_wac)
-------- {
--------        struct wacom_features *features = &wacom_wac->features;
-------- 
--------        if (features->device_type == BTN_TOOL_PEN) {
--------                input_set_abs_params(input_dev, ABS_X, features->x_min,
--------                                     features->x_max, features->x_fuzz, 0);
--------                input_set_abs_params(input_dev, ABS_Y, features->y_min,
--------                                     features->y_max, features->y_fuzz, 0);
--------                input_set_abs_params(input_dev, ABS_PRESSURE, 0,
--------                        features->pressure_max, features->pressure_fuzz, 0);
-------- 
--------                /* penabled devices have fixed resolution for each model */
--------                input_abs_set_res(input_dev, ABS_X, features->x_resolution);
--------                input_abs_set_res(input_dev, ABS_Y, features->y_resolution);
--------        } else {
--------                if (features->touch_max == 1) {
--------                        input_set_abs_params(input_dev, ABS_X, 0,
--------                                features->x_max, features->x_fuzz, 0);
--------                        input_set_abs_params(input_dev, ABS_Y, 0,
--------                                features->y_max, features->y_fuzz, 0);
--------                        input_abs_set_res(input_dev, ABS_X,
--------                                          features->x_resolution);
--------                        input_abs_set_res(input_dev, ABS_Y,
--------                                          features->y_resolution);
--------                }
-------- 
--------                if (features->touch_max > 1) {
--------                        input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0,
--------                                features->x_max, features->x_fuzz, 0);
--------                        input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0,
--------                                features->y_max, features->y_fuzz, 0);
--------                        input_abs_set_res(input_dev, ABS_MT_POSITION_X,
--------                                          features->x_resolution);
--------                        input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
--------                                          features->y_resolution);
--------                }
--------        }
-------- }
-------- 
-------- int wacom_setup_pentouch_input_capabilities(struct input_dev *input_dev,
++++++++ int wacom_setup_pen_input_capabilities(struct input_dev *input_dev,
                                           struct wacom_wac *wacom_wac)
         {
                struct wacom_features *features = &wacom_wac->features;
         
                input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
         
++++++++        if (!(features->device_type & WACOM_DEVICETYPE_PEN))
++++++++                return -ENODEV;
++++++++ 
                if (features->type == HID_GENERIC)
                        /* setup has already been done */
                        return 0;
                __set_bit(BTN_TOUCH, input_dev->keybit);
                __set_bit(ABS_MISC, input_dev->absbit);
         
--------        wacom_abs_set_axis(input_dev, wacom_wac);
++++++++        input_set_abs_params(input_dev, ABS_X, features->x_min,
++++++++                             features->x_max, features->x_fuzz, 0);
++++++++        input_set_abs_params(input_dev, ABS_Y, features->y_min,
++++++++                             features->y_max, features->y_fuzz, 0);
++++++++        input_set_abs_params(input_dev, ABS_PRESSURE, 0,
++++++++                features->pressure_max, features->pressure_fuzz, 0);
++++++++ 
++++++++        /* penabled devices have fixed resolution for each model */
++++++++        input_abs_set_res(input_dev, ABS_X, features->x_resolution);
++++++++        input_abs_set_res(input_dev, ABS_Y, features->y_resolution);
++++++++ 
         
                switch (features->type) {
                case GRAPHIRE_BT:
                case INTUOSPS:
                        __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
         
--------                if (features->device_type == BTN_TOOL_PEN) {
--------                        input_set_abs_params(input_dev, ABS_DISTANCE, 0,
--------                                              features->distance_max,
--------                                              0, 0);
-------- 
--------                        input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
--------                        input_abs_set_res(input_dev, ABS_Z, 287);
++++++++                input_set_abs_params(input_dev, ABS_DISTANCE, 0,
++++++++                                      features->distance_max,
++++++++                                      0, 0);
         
--------                        wacom_setup_intuos(wacom_wac);
--------                } else if (features->device_type == BTN_TOOL_FINGER) {
--------                        __clear_bit(ABS_MISC, input_dev->absbit);
++++++++                input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0);
++++++++                input_abs_set_res(input_dev, ABS_Z, 287);
         
--------                        input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR,
--------                                             0, features->x_max, 0, 0);
--------                        input_set_abs_params(input_dev, ABS_MT_TOUCH_MINOR,
--------                                             0, features->y_max, 0, 0);
--------                        input_mt_init_slots(input_dev, features->touch_max, INPUT_MT_POINTER);
--------                }
++++++++                wacom_setup_intuos(wacom_wac);
                        break;
         
                case WACOM_24HDT:
--------                if (features->device_type == BTN_TOOL_FINGER) {
--------                        input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, features->x_max, 0, 0);
--------                        input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, features->x_max, 0, 0);
--------                        input_set_abs_params(input_dev, ABS_MT_WIDTH_MINOR, 0, features->y_max, 0, 0);
--------                        input_set_abs_params(input_dev, ABS_MT_ORIENTATION, 0, 1, 0, 0);
--------                }
--------                /* fall through */
-------- 
                case WACOM_27QHDT:
                case MTSCREEN:
                case MTTPC:
                case MTTPC_B:
                case TABLETPC2FG:
--------                if (features->device_type == BTN_TOOL_FINGER && features->touch_max > 1)
--------                        input_mt_init_slots(input_dev, features->touch_max, INPUT_MT_DIRECT);
--------                /* fall through */
-------- 
                case TABLETPC:
                case TABLETPCE:
                        __clear_bit(ABS_MISC, input_dev->absbit);
-------- 
--------                __set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
-------- 
--------                if (features->device_type != BTN_TOOL_PEN)
--------                        break;  /* no need to process stylus stuff */
-------- 
                        /* fall through */
         
                case DTUS:
                        break;
         
                case INTUOSHT:
--------                if (features->touch_max &&
--------                    features->device_type == BTN_TOOL_FINGER) {
--------                        input_dev->evbit[0] |= BIT_MASK(EV_SW);
--------                        __set_bit(SW_MUTE_DEVICE, input_dev->swbit);
--------                }
--------                /* fall through */
-------- 
                case BAMBOO_PT:
                        __clear_bit(ABS_MISC, input_dev->absbit);
         
--------                if (features->device_type == BTN_TOOL_FINGER) {
++++++++                __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
++++++++                __set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
++++++++                __set_bit(BTN_TOOL_PEN, input_dev->keybit);
++++++++                __set_bit(BTN_STYLUS, input_dev->keybit);
++++++++                __set_bit(BTN_STYLUS2, input_dev->keybit);
++++++++                input_set_abs_params(input_dev, ABS_DISTANCE, 0,
++++++++                                      features->distance_max,
++++++++                                      0, 0);
++++++++                break;
++++++++        case BAMBOO_PAD:
++++++++                __clear_bit(ABS_MISC, input_dev->absbit);
++++++++                break;
++++++++        }
++++++++        return 0;
++++++++ }
         
--------                        if (features->touch_max) {
--------                                if (features->pktlen == WACOM_PKGLEN_BBTOUCH3) {
--------                                        input_set_abs_params(input_dev,
--------                                                     ABS_MT_TOUCH_MAJOR,
--------                                                     0, features->x_max, 0, 0);
--------                                        input_set_abs_params(input_dev,
--------                                                     ABS_MT_TOUCH_MINOR,
--------                                                     0, features->y_max, 0, 0);
--------                                }
--------                                input_mt_init_slots(input_dev, features->touch_max, INPUT_MT_POINTER);
--------                        } else {
--------                                /* buttons/keys only interface */
--------                                __clear_bit(ABS_X, input_dev->absbit);
--------                                __clear_bit(ABS_Y, input_dev->absbit);
--------                                __clear_bit(BTN_TOUCH, input_dev->keybit);
++++++++ int wacom_setup_touch_input_capabilities(struct input_dev *input_dev,
++++++++                                         struct wacom_wac *wacom_wac)
++++++++ {
++++++++        struct wacom_features *features = &wacom_wac->features;
         
--------                                /* PAD is setup by wacom_setup_pad_input_capabilities later */
--------                                return 1;
--------                        }
--------                } else if (features->device_type == BTN_TOOL_PEN) {
--------                        __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
--------                        __set_bit(BTN_TOOL_RUBBER, input_dev->keybit);
--------                        __set_bit(BTN_TOOL_PEN, input_dev->keybit);
--------                        __set_bit(BTN_STYLUS, input_dev->keybit);
--------                        __set_bit(BTN_STYLUS2, input_dev->keybit);
--------                        input_set_abs_params(input_dev, ABS_DISTANCE, 0,
--------                                              features->distance_max,
--------                                              0, 0);
++++++++        input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
++++++++ 
++++++++        if (!(features->device_type & WACOM_DEVICETYPE_TOUCH))
++++++++                return -ENODEV;
++++++++ 
++++++++        if (features->type == HID_GENERIC)
++++++++                /* setup has already been done */
++++++++                return 0;
++++++++ 
++++++++        __set_bit(BTN_TOUCH, input_dev->keybit);
++++++++ 
++++++++        if (features->touch_max == 1) {
++++++++                input_set_abs_params(input_dev, ABS_X, 0,
++++++++                        features->x_max, features->x_fuzz, 0);
++++++++                input_set_abs_params(input_dev, ABS_Y, 0,
++++++++                        features->y_max, features->y_fuzz, 0);
++++++++                input_abs_set_res(input_dev, ABS_X,
++++++++                                  features->x_resolution);
++++++++                input_abs_set_res(input_dev, ABS_Y,
++++++++                                  features->y_resolution);
++++++++        }
++++++++        else if (features->touch_max > 1) {
++++++++                input_set_abs_params(input_dev, ABS_MT_POSITION_X, 0,
++++++++                        features->x_max, features->x_fuzz, 0);
++++++++                input_set_abs_params(input_dev, ABS_MT_POSITION_Y, 0,
++++++++                        features->y_max, features->y_fuzz, 0);
++++++++                input_abs_set_res(input_dev, ABS_MT_POSITION_X,
++++++++                                  features->x_resolution);
++++++++                input_abs_set_res(input_dev, ABS_MT_POSITION_Y,
++++++++                                  features->y_resolution);
++++++++        }
++++++++ 
++++++++        switch (features->type) {
++++++++        case INTUOS5:
++++++++        case INTUOS5L:
++++++++        case INTUOSPM:
++++++++        case INTUOSPL:
++++++++        case INTUOS5S:
++++++++        case INTUOSPS:
++++++++                __set_bit(INPUT_PROP_POINTER, input_dev->propbit);
++++++++ 
++++++++                input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, features->x_max, 0, 0);
++++++++                input_set_abs_params(input_dev, ABS_MT_TOUCH_MINOR, 0, features->y_max, 0, 0);
++++++++                input_mt_init_slots(input_dev, features->touch_max, INPUT_MT_POINTER);
++++++++                break;
++++++++ 
++++++++        case WACOM_24HDT:
++++++++                input_set_abs_params(input_dev, ABS_MT_TOUCH_MAJOR, 0, features->x_max, 0, 0);
++++++++                input_set_abs_params(input_dev, ABS_MT_WIDTH_MAJOR, 0, features->x_max, 0, 0);
++++++++                input_set_abs_params(input_dev, ABS_MT_WIDTH_MINOR, 0, features->y_max, 0, 0);
++++++++                input_set_abs_params(input_dev, ABS_MT_ORIENTATION, 0, 1, 0, 0);
++++++++                /* fall through */
++++++++ 
++++++++        case WACOM_27QHDT:
++++++++        case MTSCREEN:
++++++++        case MTTPC:
++++++++        case MTTPC_B:
++++++++        case TABLETPC2FG:
++++++++                input_mt_init_slots(input_dev, features->touch_max, INPUT_MT_DIRECT);
++++++++                /*fall through */
++++++++ 
++++++++        case TABLETPC:
++++++++        case TABLETPCE:
++++++++                __set_bit(INPUT_PROP_DIRECT, input_dev->propbit);
++++++++                break;
++++++++ 
++++++++        case INTUOSHT:
++++++++                input_dev->evbit[0] |= BIT_MASK(EV_SW);
++++++++                __set_bit(SW_MUTE_DEVICE, input_dev->swbit);
++++++++                /* fall through */
++++++++ 
++++++++        case BAMBOO_PT:
++++++++                if (features->pktlen == WACOM_PKGLEN_BBTOUCH3) {
++++++++                        input_set_abs_params(input_dev,
++++++++                                     ABS_MT_TOUCH_MAJOR,
++++++++                                     0, features->x_max, 0, 0);
++++++++                        input_set_abs_params(input_dev,
++++++++                                     ABS_MT_TOUCH_MINOR,
++++++++                                     0, features->y_max, 0, 0);
                        }
++++++++                input_mt_init_slots(input_dev, features->touch_max, INPUT_MT_POINTER);
                        break;
++++++++ 
                case BAMBOO_PAD:
--------                __clear_bit(ABS_MISC, input_dev->absbit);
                        input_mt_init_slots(input_dev, features->touch_max,
                                            INPUT_MT_POINTER);
                        __set_bit(BTN_LEFT, input_dev->keybit);
@@@@@@@@@@ -2456,6 -2456,6 -2453,6 -2456,6 -2456,6 -2453,6 -2453,6 -2453,6 -2513,9 +2516,9 @@@@@@@@@@ int wacom_setup_pad_input_capabilities(
                struct wacom_features *features = &wacom_wac->features;
                int i;
         
++++++++        if (!(features->device_type & WACOM_DEVICETYPE_PAD))
++++++++                return -ENODEV;
++++++++ 
                input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
         
                /* kept for making legacy xf86-input-wacom working with the wheels */
         
                case INTUOS5S:
                case INTUOSPS:
--------                /* touch interface does not have the pad device */
--------                if (features->device_type != BTN_TOOL_PEN)
--------                        return -ENODEV;
-------- 
                        for (i = 0; i < 7; i++)
                                __set_bit(BTN_0 + i, input_dev->keybit);
         
         
                case INTUOSHT:
                case BAMBOO_PT:
--------                /* pad device is on the touch interface */
--------                if ((features->device_type != BTN_TOOL_FINGER) ||
--------                    /* Bamboo Pen only tablet does not have pad */
--------                    ((features->type == BAMBOO_PT) && !features->touch_max))
--------                        return -ENODEV;
-------- 
                        __clear_bit(ABS_MISC, input_dev->absbit);
         
                        __set_bit(BTN_LEFT, input_dev->keybit);
@@@@@@@@@@ -2922,6 -2922,6 -2919,6 -2922,6 -2922,6 -2919,6 -2919,6 -2919,6 -2972,9 +2975,9 @@@@@@@@@@ static const struct wacom_features waco
                { "Wacom DTU1031X", 22472, 12728, 511, 0,
                  DTUSX, WACOM_INTUOS_RES, WACOM_INTUOS_RES,
                  WACOM_DTU_OFFSET, WACOM_DTU_OFFSET };
++++++++ static const struct wacom_features wacom_features_0x336 =
++++++++        { "Wacom DTU1141", 23472, 13203, 1023, 0,
++++++++          DTUS, WACOM_INTUOS_RES, WACOM_INTUOS_RES };
         static const struct wacom_features wacom_features_0x57 =
                { "Wacom DTK2241", 95640, 54060, 2047, 63,
                  DTK, WACOM_INTUOS3_RES, WACOM_INTUOS3_RES,
@@@@@@@@@@ -3275,6 -3275,6 -3272,6 -3275,6 -3275,6 -3272,6 -3272,6 -3272,6 -3328,7 +3331,7 @@@@@@@@@@ const struct hid_device_id wacom_ids[] 
                { USB_DEVICE_WACOM(0x32F) },
                { USB_DEVICE_WACOM(0x333) },
                { USB_DEVICE_WACOM(0x335) },
++++++++        { USB_DEVICE_WACOM(0x336) },
                { USB_DEVICE_WACOM(0x4001) },
                { USB_DEVICE_WACOM(0x4004) },
                { USB_DEVICE_WACOM(0x5000) },