Merge branch 'uc-logic' into for-linus
authorJiri Kosina <jkosina@suse.cz>
Sat, 23 Oct 2010 20:49:32 +0000 (22:49 +0200)
committerJiri Kosina <jkosina@suse.cz>
Sat, 23 Oct 2010 20:49:32 +0000 (22:49 +0200)
Conflicts:
drivers/hid/hid-ids.h
drivers/hid/hid-lg.c
drivers/hid/usbhid/hid-quirks.c

1  2 
drivers/hid/Kconfig
drivers/hid/Makefile
drivers/hid/hid-core.c
drivers/hid/hid-ids.h
drivers/hid/hid-input.c
drivers/hid/hid-lg.c
drivers/hid/hid-sony.c
drivers/hid/usbhid/hid-quirks.c
include/linux/hid.h

diff --combined drivers/hid/Kconfig
@@@ -56,20 -56,20 +56,20 @@@ menu "Special HID drivers
        depends on HID
  
  config HID_3M_PCT
 -      tristate "3M PCT"
 +      tristate "3M PCT touchscreen"
        depends on USB_HID
        ---help---
        Support for 3M PCT touch screens.
  
  config HID_A4TECH
 -      tristate "A4 tech" if EMBEDDED
 +      tristate "A4 tech mice" if EMBEDDED
        depends on USB_HID
        default !EMBEDDED
        ---help---
        Support for A4 tech X5 and WOP-35 / Trust 450L mice.
  
  config HID_ACRUX_FF
 -      tristate "ACRUX force feedback support"
 +      tristate "ACRUX force feedback"
        depends on USB_HID
        select INPUT_FF_MEMLESS
        ---help---
@@@ -77,7 -77,7 +77,7 @@@
        game controllers.
  
  config HID_APPLE
 -      tristate "Apple" if EMBEDDED
 +      tristate "Apple {i,Power,Mac}Books" if EMBEDDED
        depends on (USB_HID || BT_HIDP)
        default !EMBEDDED
        ---help---
@@@ -88,7 -88,7 +88,7 @@@
        MacBooks, MacBook Pros and Apple Aluminum.
  
  config HID_BELKIN
 -      tristate "Belkin" if EMBEDDED
 +      tristate "Belkin Flip KVM and Wireless keyboard" if EMBEDDED
        depends on USB_HID
        default !EMBEDDED
        ---help---
@@@ -101,14 -101,14 +101,14 @@@ config HID_CAND
        Support for Cando dual touch panel.
  
  config HID_CHERRY
 -      tristate "Cherry" if EMBEDDED
 +      tristate "Cherry Cymotion keyboard" if EMBEDDED
        depends on USB_HID
        default !EMBEDDED
        ---help---
        Support for Cherry Cymotion keyboard.
  
  config HID_CHICONY
 -      tristate "Chicony" if EMBEDDED
 +      tristate "Chicony Tactical pad" if EMBEDDED
        depends on USB_HID
        default !EMBEDDED
        ---help---
@@@ -130,20 -130,20 +130,20 @@@ config HID_PRODIKEY
          and some additional multimedia keys.
  
  config HID_CYPRESS
 -      tristate "Cypress" if EMBEDDED
 +      tristate "Cypress mouse and barcode readers" if EMBEDDED
        depends on USB_HID
        default !EMBEDDED
        ---help---
        Support for cypress mouse and barcode readers.
  
  config HID_DRAGONRISE
 -      tristate "DragonRise Inc. support"
 +      tristate "DragonRise Inc. game controller"
        depends on USB_HID
        ---help---
        Say Y here if you have DragonRise Inc.game controllers.
  
  config DRAGONRISE_FF
 -      bool "DragonRise Inc. force feedback support"
 +      bool "DragonRise Inc. force feedback"
        depends on HID_DRAGONRISE
        select INPUT_FF_MEMLESS
        ---help---
@@@ -157,46 -157,52 +157,52 @@@ config HID_EGALA
        Support for the eGalax dual-touch panel.
  
  config HID_ELECOM
 -      tristate "ELECOM"
 +      tristate "ELECOM BM084 bluetooth mouse"
        depends on BT_HIDP
        ---help---
        Support for the ELECOM BM084 (bluetooth mouse).
  
  config HID_EZKEY
 -      tristate "Ezkey" if EMBEDDED
 +      tristate "Ezkey BTC 8193 keyboard" if EMBEDDED
        depends on USB_HID
        default !EMBEDDED
        ---help---
        Support for Ezkey BTC 8193 keyboard.
  
  config HID_KYE
 -      tristate "Kye" if EMBEDDED
 +      tristate "Kye/Genius Ergo Mouse" if EMBEDDED
        depends on USB_HID
        default !EMBEDDED
        ---help---
        Support for Kye/Genius Ergo Mouse.
  
+ config HID_UCLOGIC
+       tristate "UC-Logic"
+       depends on USB_HID
+       ---help---
+       Support for UC-Logic tablets.
  config HID_GYRATION
 -      tristate "Gyration"
 +      tristate "Gyration remote control"
        depends on USB_HID
        ---help---
        Support for Gyration remote control.
  
  config HID_TWINHAN
 -      tristate "Twinhan"
 +      tristate "Twinhan IR remote control"
        depends on USB_HID
        ---help---
        Support for Twinhan IR remote control.
  
  config HID_KENSINGTON
 -      tristate "Kensington" if EMBEDDED
 +      tristate "Kensington Slimblade Trackball" if EMBEDDED
        depends on USB_HID
        default !EMBEDDED
        ---help---
        Support for Kensington Slimblade Trackball.
  
  config HID_LOGITECH
 -      tristate "Logitech" if EMBEDDED
 +      tristate "Logitech devices" if EMBEDDED
        depends on USB_HID
        default !EMBEDDED
        ---help---
@@@ -220,12 -226,12 +226,12 @@@ config LOGITECH_F
          force feedback.
  
  config LOGIRUMBLEPAD2_FF
 -      bool "Logitech Rumblepad 2 force feedback support"
 +      bool "Logitech RumblePad/Rumblepad 2 force feedback support"
        depends on HID_LOGITECH
        select INPUT_FF_MEMLESS
        help
          Say Y here if you want to enable force feedback support for Logitech
 -        Rumblepad 2 devices.
 +        RumblePad and Rumblepad 2 devices.
  
  config LOGIG940_FF
        bool "Logitech Flight System G940 force feedback support"
          Say Y here if you want to enable force feedback support for Logitech
          Flight System G940 devices.
  
 +config LOGIWII_FF
 +      bool "Logitech Speed Force Wireless force feedback support"
 +      depends on HID_LOGITECH
 +      select INPUT_FF_MEMLESS
 +      help
 +        Say Y here if you want to enable force feedback support for Logitech
 +        Speed Force Wireless (Wii) devices.
 +
  config HID_MAGICMOUSE
        tristate "Apple MagicMouse multi-touch support"
        depends on BT_HIDP
        Apple Wireless "Magic" Mouse.
  
  config HID_MICROSOFT
 -      tristate "Microsoft" if EMBEDDED
 +      tristate "Microsoft non-fully HID-compliant devices" if EMBEDDED
        depends on USB_HID
        default !EMBEDDED
        ---help---
        Support for Microsoft devices that are not fully compliant with HID standard.
  
  config HID_MOSART
 -      tristate "MosArt"
 +      tristate "MosArt dual-touch panels"
        depends on USB_HID
        ---help---
        Support for MosArt dual-touch panels.
  
  config HID_MONTEREY
 -      tristate "Monterey" if EMBEDDED
 +      tristate "Monterey Genius KB29E keyboard" if EMBEDDED
        depends on USB_HID
        default !EMBEDDED
        ---help---
        Support for Monterey Genius KB29E.
  
  config HID_NTRIG
 -      tristate "NTrig"
 +      tristate "N-Trig touch screen"
        depends on USB_HID
        ---help---
        Support for N-Trig touch screen.
  
  config HID_ORTEK
 -      tristate "Ortek"
 +      tristate "Ortek WKB-2000 wireless keyboard and mouse trackpad"
        depends on USB_HID
        ---help---
        Support for Ortek WKB-2000 wireless keyboard + mouse trackpad.
  
  config HID_PANTHERLORD
 -      tristate "Pantherlord support"
 +      tristate "Pantherlord/GreenAsia game controller"
        depends on USB_HID
        ---help---
          Say Y here if you have a PantherLord/GreenAsia based game controller
@@@ -300,7 -298,7 +306,7 @@@ config PANTHERLORD_F
          or adapter and want to enable force feedback support for it.
  
  config HID_PETALYNX
 -      tristate "Petalynx"
 +      tristate "Petalynx Maxter remote control"
        depends on USB_HID
        ---help---
        Support for Petalynx Maxter remote control.
@@@ -364,7 -362,7 +370,7 @@@ config HID_PICOLCD_LED
          Provide access to PicoLCD's GPO pins via leds class.
  
  config HID_QUANTA
 -      tristate "Quanta Optical Touch"
 +      tristate "Quanta Optical Touch panels"
        depends on USB_HID
        ---help---
        Support for Quanta Optical Touch dual-touch panels.
@@@ -384,39 -382,32 +390,39 @@@ config HID_ROCCAT_KON
        ---help---
        Support for Roccat Kone mouse.
  
 +config HID_ROCCAT_PYRA
 +      tristate "Roccat Pyra mouse support"
 +      depends on USB_HID
 +      select HID_ROCCAT
 +      ---help---
 +      Support for Roccat Pyra mouse.
 +
  config HID_SAMSUNG
 -      tristate "Samsung"
 +      tristate "Samsung InfraRed remote control or keyboards"
        depends on USB_HID
        ---help---
        Support for Samsung InfraRed remote control or keyboards.
  
  config HID_SONY
 -      tristate "Sony"
 +      tristate "Sony PS3 controller"
        depends on USB_HID
        ---help---
        Support for Sony PS3 controller.
  
  config HID_STANTUM
 -      tristate "Stantum"
 +      tristate "Stantum multitouch panel"
        depends on USB_HID
        ---help---
        Support for Stantum multitouch panel.
  
  config HID_SUNPLUS
 -      tristate "Sunplus"
 +      tristate "Sunplus wireless desktop"
        depends on USB_HID
        ---help---
        Support for Sunplus wireless desktop.
  
  config HID_GREENASIA
 -      tristate "GreenAsia (Product ID 0x12) support"
 +      tristate "GreenAsia (Product ID 0x12) game controller support"
        depends on USB_HID
        ---help---
          Say Y here if you have a GreenAsia (Product ID 0x12) based game
diff --combined drivers/hid/Makefile
@@@ -21,9 -21,6 +21,9 @@@ endi
  ifdef CONFIG_LOGIG940_FF
        hid-logitech-objs       += hid-lg3ff.o
  endif
 +ifdef CONFIG_LOGIWII_FF
 +      hid-logitech-objs       += hid-lg4ff.o
 +endif
  
  obj-$(CONFIG_HID_3M_PCT)      += hid-3m-pct.o
  obj-$(CONFIG_HID_A4TECH)      += hid-a4tech.o
@@@ -55,7 -52,6 +55,7 @@@ obj-$(CONFIG_HID_PETALYNX)    += hid-petal
  obj-$(CONFIG_HID_PICOLCD)     += hid-picolcd.o
  obj-$(CONFIG_HID_ROCCAT)      += hid-roccat.o
  obj-$(CONFIG_HID_ROCCAT_KONE) += hid-roccat-kone.o
 +obj-$(CONFIG_HID_ROCCAT_PYRA) += hid-roccat-pyra.o
  obj-$(CONFIG_HID_SAMSUNG)     += hid-samsung.o
  obj-$(CONFIG_HID_SMARTJOYPLUS)        += hid-sjoy.o
  obj-$(CONFIG_HID_SONY)                += hid-sony.o
@@@ -65,6 -61,7 +65,7 @@@ obj-$(CONFIG_HID_GREENASIA)   += hid-gaff
  obj-$(CONFIG_HID_THRUSTMASTER)        += hid-tmff.o
  obj-$(CONFIG_HID_TOPSEED)     += hid-topseed.o
  obj-$(CONFIG_HID_TWINHAN)     += hid-twinhan.o
+ obj-$(CONFIG_HID_UCLOGIC)     += hid-uclogic.o
  obj-$(CONFIG_HID_ZEROPLUS)    += hid-zpff.o
  obj-$(CONFIG_HID_ZYDACRON)    += hid-zydacron.o
  obj-$(CONFIG_HID_WACOM)               += hid-wacom.o
diff --combined drivers/hid/hid-core.c
@@@ -651,7 -651,7 +651,7 @@@ int hid_parse_report(struct hid_device 
        };
  
        if (device->driver->report_fixup)
-               device->driver->report_fixup(device, start, size);
+               start = device->driver->report_fixup(device, start, &size);
  
        device->rdesc = kmemdup(start, size, GFP_KERNEL);
        if (device->rdesc == NULL)
@@@ -1241,7 -1241,6 +1241,7 @@@ static const struct hid_device_id hid_b
        { HID_USB_DEVICE(USB_VENDOR_ID_3M, USB_DEVICE_ID_3M2256) },
        { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) },
        { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) },
  #if defined(CONFIG_HID_ACRUX_FF) || defined(CONFIG_HID_ACRUX_FF_MODULE)
        { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) },
  #endif
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) },
 +      { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_ISO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER_ANSI) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_T91MT) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) },
        { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE_2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION_SOLAR) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
        { HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_EXTREME_3D) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEEL) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD_CORD) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2_2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_F3D) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACETRAVELLER) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACENAVIGATOR) },
        { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRED) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_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_VAIO_VGX_MOUSE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_STANTUM, USB_DEVICE_ID_MTP) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM, USB_DEVICE_ID_MTP_STM) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_STANTUM_SITRONIX, USB_DEVICE_ID_MTP_SITRONIX) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
        { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) },
        { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) },
        { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) },
        { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED2, USB_DEVICE_ID_TOPSEED2_RF_COMBO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_PF1209) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP5540U) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP8060U) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_SMARTJOY_PLUS) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
@@@ -1589,6 -1581,7 +1593,6 @@@ static const struct hid_device_id hid_i
        { HID_USB_DEVICE(USB_VENDOR_ID_AIPTEK, USB_DEVICE_ID_AIPTEK_24) },
        { HID_USB_DEVICE(USB_VENDOR_ID_AIRCABLE, USB_DEVICE_ID_AIRCABLE1) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ALCOR, USB_DEVICE_ID_ALCOR_USBRS232) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_T91MT)},
        { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM)},
        { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_LCM2)},
        { HID_USB_DEVICE(USB_VENDOR_ID_AVERMEDIA, USB_DEVICE_ID_AVER_FM_MR800) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1006) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1007) },
        { HID_USB_DEVICE(USB_VENDOR_ID_IMATION, USB_DEVICE_ID_DISC_STAKKA) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_JESS_YUREX) },
        { HID_USB_DEVICE(USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_KWORLD, USB_DEVICE_ID_KWORLD_RADIO_FM700) },
        { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_GPEN_560) },
diff --combined drivers/hid/hid-ids.h
@@@ -25,7 -25,6 +25,7 @@@
  #define USB_VENDOR_ID_A4TECH          0x09da
  #define USB_DEVICE_ID_A4TECH_WCP32PU  0x0006
  #define USB_DEVICE_ID_A4TECH_X5_005D  0x000a
 +#define USB_DEVICE_ID_A4TECH_RP_649   0x001a
  
  #define USB_VENDOR_ID_AASHIMA         0x06d6
  #define USB_DEVICE_ID_AASHIMA_GAMEPAD 0x0025
@@@ -64,7 -63,6 +64,7 @@@
  #define USB_VENDOR_ID_APPLE           0x05ac
  #define USB_DEVICE_ID_APPLE_MIGHTYMOUSE       0x0304
  #define USB_DEVICE_ID_APPLE_MAGICMOUSE        0x030d
 +#define USB_DEVICE_ID_APPLE_MAGICTRACKPAD     0x030e
  #define USB_DEVICE_ID_APPLE_FOUNTAIN_ANSI     0x020e
  #define USB_DEVICE_ID_APPLE_FOUNTAIN_ISO      0x020f
  #define USB_DEVICE_ID_APPLE_GEYSER_ANSI       0x0214
  
  #define USB_VENDOR_ID_ASUS            0x0486
  #define USB_DEVICE_ID_ASUS_T91MT      0x0185
 +#define USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO  0x0186
  
  #define USB_VENDOR_ID_ASUSTEK         0x0b05
  #define USB_DEVICE_ID_ASUSTEK_LCM     0x1726
  
  #define USB_VENDOR_ID_BTC             0x046e
  #define USB_DEVICE_ID_BTC_EMPREX_REMOTE       0x5578
 +#define USB_DEVICE_ID_BTC_EMPREX_REMOTE_2     0x5577
  
  #define USB_VENDOR_ID_CANDO           0x2087
  #define USB_DEVICE_ID_CANDO_MULTI_TOUCH       0x0a01
  #define USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6 0x0b03
 +#define USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6 0x0f01
  
  #define USB_VENDOR_ID_CH              0x068e
  #define USB_DEVICE_ID_CH_PRO_PEDALS   0x00f2
  #define USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE       0x0051
  #define USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE      0x00ff
  #define USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK  0x00d3
 +#define USB_DEVICE_ID_CH_AXIS_295     0x001c
  
  #define USB_VENDOR_ID_CHERRY          0x046a
  #define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023
  
  #define USB_VENDOR_ID_CHICONY         0x04f2
  #define USB_DEVICE_ID_CHICONY_TACTICAL_PAD    0x0418
 +#define USB_DEVICE_ID_CHICONY_MULTI_TOUCH     0xb19d
  
  #define USB_VENDOR_ID_CIDC            0x1677
  
  #define USB_VENDOR_ID_DWAV            0x0eef
  #define USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER  0x0001
  #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH  0x480d
 +#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1 0x720c
  
  #define USB_VENDOR_ID_ELECOM          0x056e
  #define USB_DEVICE_ID_ELECOM_BM084    0x0061
  #define USB_VENDOR_ID_IMATION         0x0718
  #define USB_DEVICE_ID_DISC_STAKKA     0xd000
  
 +#define USB_VENDOR_ID_JESS            0x0c45
 +#define USB_DEVICE_ID_JESS_YUREX      0x1010
 +
  #define USB_VENDOR_ID_KBGEAR          0x084e
  #define USB_DEVICE_ID_KBGEAR_JAMSTUDIO        0x1001
  
  #define USB_DEVICE_ID_LOGITECH_RECEIVER       0xc101
  #define USB_DEVICE_ID_LOGITECH_HARMONY_FIRST  0xc110
  #define USB_DEVICE_ID_LOGITECH_HARMONY_LAST 0xc14f
 +#define USB_DEVICE_ID_LOGITECH_RUMBLEPAD_CORD 0xc20a
  #define USB_DEVICE_ID_LOGITECH_RUMBLEPAD      0xc211
  #define USB_DEVICE_ID_LOGITECH_EXTREME_3D     0xc215
  #define USB_DEVICE_ID_LOGITECH_RUMBLEPAD2     0xc218
  #define USB_DEVICE_ID_LOGITECH_WINGMAN_FFG    0xc293
  #define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL     0xc295
  #define USB_DEVICE_ID_LOGITECH_G25_WHEEL      0xc299
 +#define USB_DEVICE_ID_LOGITECH_WII_WHEEL      0xc29c
  #define USB_DEVICE_ID_LOGITECH_ELITE_KBD      0xc30a
  #define USB_DEVICE_ID_S510_RECEIVER   0xc50c
  #define USB_DEVICE_ID_S510_RECEIVER_2 0xc517
  
  #define USB_VENDOR_ID_ROCCAT          0x1e7d
  #define USB_DEVICE_ID_ROCCAT_KONE     0x2ced
 +#define USB_DEVICE_ID_ROCCAT_PYRA_WIRED       0x2c24
 +#define USB_DEVICE_ID_ROCCAT_PYRA_WIRELESS    0x2cf6
  
  #define USB_VENDOR_ID_SAITEK          0x06a3
  #define USB_DEVICE_ID_SAITEK_RUMBLEPAD        0xff17
  #define USB_VENDOR_ID_STANTUM         0x1f87
  #define USB_DEVICE_ID_MTP             0x0002
  
 +#define USB_VENDOR_ID_STANTUM_STM             0x0483
 +#define USB_DEVICE_ID_MTP_STM         0x3261
 +
 +#define USB_VENDOR_ID_STANTUM_SITRONIX                0x1403
 +#define USB_DEVICE_ID_MTP_SITRONIX            0x5001
 +
  #define USB_VENDOR_ID_SUN             0x0430
  #define USB_DEVICE_ID_RARITAN_KVM_DONGLE      0xcdab
  
  
  #define USB_VENDOR_ID_TURBOX          0x062a
  #define USB_DEVICE_ID_TURBOX_KEYBOARD 0x0201
 +#define USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART       0x7100
  
  #define USB_VENDOR_ID_TWINHAN         0x6253
  #define USB_DEVICE_ID_TWINHAN_IR_REMOTE       0x0100
  
  #define USB_VENDOR_ID_UCLOGIC         0x5543
  #define USB_DEVICE_ID_UCLOGIC_TABLET_PF1209   0x0042
- #define USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U  0x0003
 +#define USB_DEVICE_ID_UCLOGIC_TABLET_KNA5     0x6001
+ #define USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U  0x0003
+ #define USB_DEVICE_ID_UCLOGIC_TABLET_WP5540U  0x0004
+ #define USB_DEVICE_ID_UCLOGIC_TABLET_WP8060U  0x0005
  
  #define USB_VENDOR_ID_VERNIER         0x08f7
  #define USB_DEVICE_ID_VERNIER_LABPRO  0x0001
diff --combined drivers/hid/hid-input.c
@@@ -149,83 -149,6 +149,83 @@@ static int hidinput_setkeycode(struct i
  }
  
  
 +/**
 + * hidinput_calc_abs_res - calculate an absolute axis resolution
 + * @field: the HID report field to calculate resolution for
 + * @code: axis code
 + *
 + * The formula is:
 + *                         (logical_maximum - logical_minimum)
 + * resolution = ----------------------------------------------------------
 + *              (physical_maximum - physical_minimum) * 10 ^ unit_exponent
 + *
 + * as seen in the HID specification v1.11 6.2.2.7 Global Items.
 + *
 + * Only exponent 1 length units are processed. Centimeters are converted to
 + * inches. Degrees are converted to radians.
 + */
 +static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code)
 +{
 +      __s32 unit_exponent = field->unit_exponent;
 +      __s32 logical_extents = field->logical_maximum -
 +                                      field->logical_minimum;
 +      __s32 physical_extents = field->physical_maximum -
 +                                      field->physical_minimum;
 +      __s32 prev;
 +
 +      /* Check if the extents are sane */
 +      if (logical_extents <= 0 || physical_extents <= 0)
 +              return 0;
 +
 +      /*
 +       * Verify and convert units.
 +       * See HID specification v1.11 6.2.2.7 Global Items for unit decoding
 +       */
 +      if (code == ABS_X || code == ABS_Y || code == ABS_Z) {
 +              if (field->unit == 0x11) {              /* If centimeters */
 +                      /* Convert to inches */
 +                      prev = logical_extents;
 +                      logical_extents *= 254;
 +                      if (logical_extents < prev)
 +                              return 0;
 +                      unit_exponent += 2;
 +              } else if (field->unit != 0x13) {       /* If not inches */
 +                      return 0;
 +              }
 +      } else if (code == ABS_RX || code == ABS_RY || code == ABS_RZ) {
 +              if (field->unit == 0x14) {              /* If degrees */
 +                      /* Convert to radians */
 +                      prev = logical_extents;
 +                      logical_extents *= 573;
 +                      if (logical_extents < prev)
 +                              return 0;
 +                      unit_exponent += 1;
 +              } else if (field->unit != 0x12) {       /* If not radians */
 +                      return 0;
 +              }
 +      } else {
 +              return 0;
 +      }
 +
 +      /* Apply negative unit exponent */
 +      for (; unit_exponent < 0; unit_exponent++) {
 +              prev = logical_extents;
 +              logical_extents *= 10;
 +              if (logical_extents < prev)
 +                      return 0;
 +      }
 +      /* Apply positive unit exponent */
 +      for (; unit_exponent > 0; unit_exponent--) {
 +              prev = physical_extents;
 +              physical_extents *= 10;
 +              if (physical_extents < prev)
 +                      return 0;
 +      }
 +
 +      /* Calculate resolution */
 +      return logical_extents / physical_extents;
 +}
 +
  static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_field *field,
                                     struct hid_usage *usage)
  {
                        map_key_clear(BTN_STYLUS);
                        break;
  
+               case 0x46: /* TabletPick */
+                       map_key_clear(BTN_STYLUS2);
+                       break;
                default:  goto unknown;
                }
                break;
@@@ -614,9 -541,6 +618,9 @@@ mapped
                        input_set_abs_params(input, usage->code, a, b, (b - a) >> 8, (b - a) >> 4);
                else    input_set_abs_params(input, usage->code, a, b, 0, 0);
  
 +              input_abs_set_res(input, usage->code,
 +                                hidinput_calc_abs_res(field, usage->code));
 +
                /* use a larger default input buffer for MT devices */
                if (usage->code == ABS_MT_POSITION_X && input->hint_events_per_packet == 0)
                        input_set_events_per_packet(input, 60);
@@@ -739,9 -663,6 +743,9 @@@ void hidinput_report_event(struct hid_d
  {
        struct hid_input *hidinput;
  
 +      if (hid->quirks & HID_QUIRK_NO_INPUT_SYNC)
 +              return;
 +
        list_for_each_entry(hidinput, &hid->inputs, list)
                input_sync(hidinput->input);
  }
diff --combined drivers/hid/hid-lg.c
@@@ -7,7 -7,6 +7,7 @@@
   *  Copyright (c) 2006-2007 Jiri Kosina
   *  Copyright (c) 2007 Paul Walmsley
   *  Copyright (c) 2008 Jiri Slaby
 + *  Copyright (c) 2010 Hendrik Iben
   */
  
  /*
@@@ -20,9 -19,6 +20,9 @@@
  #include <linux/device.h>
  #include <linux/hid.h>
  #include <linux/module.h>
 +#include <linux/random.h>
 +#include <linux/sched.h>
 +#include <linux/wait.h>
  
  #include "hid-ids.h"
  #include "hid-lg.h"
  #define LG_FF2                        0x400
  #define LG_RDESC_REL_ABS      0x800
  #define LG_FF3                        0x1000
 +#define LG_FF4                        0x2000
  
  /*
   * Certain Logitech keyboards send in report #3 keys which are far
   * above the logical maximum described in descriptor. This extends
   * the original value of 0x28c of logical maximum to 0x104d
   */
- static void lg_report_fixup(struct hid_device *hdev, __u8 *rdesc,
-               unsigned int rsize)
+ static __u8 *lg_report_fixup(struct hid_device *hdev, __u8 *rdesc,
+               unsigned int *rsize)
  {
        unsigned long quirks = (unsigned long)hid_get_drvdata(hdev);
  
-       if ((quirks & LG_RDESC) && rsize >= 90 && rdesc[83] == 0x26 &&
+       if ((quirks & LG_RDESC) && *rsize >= 90 && rdesc[83] == 0x26 &&
                        rdesc[84] == 0x8c && rdesc[85] == 0x02) {
                dev_info(&hdev->dev, "fixing up Logitech keyboard report "
                                "descriptor\n");
                rdesc[84] = rdesc[89] = 0x4d;
                rdesc[85] = rdesc[90] = 0x10;
        }
-       if ((quirks & LG_RDESC_REL_ABS) && rsize >= 50 &&
+       if ((quirks & LG_RDESC_REL_ABS) && *rsize >= 50 &&
                        rdesc[32] == 0x81 && rdesc[33] == 0x06 &&
                        rdesc[49] == 0x81 && rdesc[50] == 0x06) {
                dev_info(&hdev->dev, "fixing up rel/abs in Logitech "
                                "report descriptor\n");
                rdesc[33] = rdesc[50] = 0x02;
        }
 +      if ((quirks & LG_FF4) && rsize >= 101 &&
 +                      rdesc[41] == 0x95 && rdesc[42] == 0x0B &&
 +                      rdesc[47] == 0x05 && rdesc[48] == 0x09) {
 +              dev_info(&hdev->dev, "fixing up Logitech Speed Force Wireless "
 +                      "button descriptor\n");
 +              rdesc[41] = 0x05;
 +              rdesc[42] = 0x09;
 +              rdesc[47] = 0x95;
 +              rdesc[48] = 0x0B;
 +      }
+       return rdesc;
  }
  
  #define lg_map_key_clear(c)   hid_map_usage_clear(hi, usage, bit, max, \
@@@ -301,33 -286,12 +301,33 @@@ static int lg_probe(struct hid_device *
                goto err_free;
        }
  
 +      if (quirks & LG_FF4) {
 +              unsigned char buf[] = { 0x00, 0xAF,  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
 +
 +              ret = hdev->hid_output_raw_report(hdev, buf, sizeof(buf), HID_FEATURE_REPORT);
 +
 +              if (ret >= 0) {
 +                      /* insert a little delay of 10 jiffies ~ 40ms */
 +                      wait_queue_head_t wait;
 +                      init_waitqueue_head (&wait);
 +                      wait_event_interruptible_timeout(wait, 0, 10);
 +
 +                      /* Select random Address */
 +                      buf[1] = 0xB2;
 +                      get_random_bytes(&buf[2], 2);
 +
 +                      ret = hdev->hid_output_raw_report(hdev, buf, sizeof(buf), HID_FEATURE_REPORT);
 +              }
 +      }
 +
        if (quirks & LG_FF)
                lgff_init(hdev);
        if (quirks & LG_FF2)
                lg2ff_init(hdev);
        if (quirks & LG_FF3)
                lg3ff_init(hdev);
 +      if (quirks & LG_FF4)
 +              lg4ff_init(hdev);
  
        return 0;
  err_free:
@@@ -362,8 -326,6 +362,8 @@@ static const struct hid_device_id lg_de
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEEL),
                .driver_data = LG_NOGET | LG_FF },
  
 +      { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD_CORD),
 +              .driver_data = LG_FF2 },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD),
                .driver_data = LG_FF },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2_2),
                .driver_data = LG_FF },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL),
                .driver_data = LG_FF },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL),
 +              .driver_data = LG_FF4 },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG ),
                .driver_data = LG_FF },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2),
diff --combined drivers/hid/hid-sony.c
  
  #include "hid-ids.h"
  
 -#define VAIO_RDESC_CONSTANT 0x0001
 +#define VAIO_RDESC_CONSTANT     (1 << 0)
 +#define SIXAXIS_CONTROLLER_USB  (1 << 1)
 +#define SIXAXIS_CONTROLLER_BT   (1 << 2)
  
  struct sony_sc {
        unsigned long quirks;
  };
  
  /* Sony Vaio VGX has wrongly mouse pointer declared as constant */
- static void sony_report_fixup(struct hid_device *hdev, __u8 *rdesc,
-               unsigned int rsize)
+ static __u8 *sony_report_fixup(struct hid_device *hdev, __u8 *rdesc,
+               unsigned int *rsize)
  {
        struct sony_sc *sc = hid_get_drvdata(hdev);
  
        if ((sc->quirks & VAIO_RDESC_CONSTANT) &&
-                       rsize >= 56 && rdesc[54] == 0x81 && rdesc[55] == 0x07) {
+                       *rsize >= 56 && rdesc[54] == 0x81 && rdesc[55] == 0x07) {
                dev_info(&hdev->dev, "Fixing up Sony Vaio VGX report "
                                "descriptor\n");
                rdesc[55] = 0x06;
        }
+       return rdesc;
  }
  
 +static int sixaxis_usb_output_raw_report(struct hid_device *hid, __u8 *buf,
 +              size_t count, unsigned char report_type)
 +{
 +      struct usb_interface *intf = to_usb_interface(hid->dev.parent);
 +      struct usb_device *dev = interface_to_usbdev(intf);
 +      struct usb_host_interface *interface = intf->cur_altsetting;
 +      int report_id = buf[0];
 +      int ret;
 +
 +      ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
 +              HID_REQ_SET_REPORT,
 +              USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
 +              ((report_type + 1) << 8) | report_id,
 +              interface->desc.bInterfaceNumber, buf, count,
 +              USB_CTRL_SET_TIMEOUT);
 +
 +      return ret;
 +}
 +
  /*
   * Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller
   * to "operational".  Without this, the ps3 controller will not report any
   * events.
   */
 -static int sony_set_operational_usb(struct hid_device *hdev)
 +static int sixaxis_set_operational_usb(struct hid_device *hdev)
  {
        struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
        struct usb_device *dev = interface_to_usbdev(intf);
@@@ -95,7 -75,7 +96,7 @@@
        return ret;
  }
  
 -static int sony_set_operational_bt(struct hid_device *hdev)
 +static int sixaxis_set_operational_bt(struct hid_device *hdev)
  {
        unsigned char buf[] = { 0xf4,  0x42, 0x03, 0x00, 0x00 };
        return hdev->hid_output_raw_report(hdev, buf, sizeof(buf), HID_FEATURE_REPORT);
@@@ -129,14 -109,16 +130,14 @@@ static int sony_probe(struct hid_devic
                goto err_free;
        }
  
 -      switch (hdev->bus) {
 -      case BUS_USB:
 -              ret = sony_set_operational_usb(hdev);
 -              break;
 -      case BUS_BLUETOOTH:
 -              ret = sony_set_operational_bt(hdev);
 -              break;
 -      default:
 -              ret = 0;
 +      if (sc->quirks & SIXAXIS_CONTROLLER_USB) {
 +              hdev->hid_output_raw_report = sixaxis_usb_output_raw_report;
 +              ret = sixaxis_set_operational_usb(hdev);
        }
 +      else if (sc->quirks & SIXAXIS_CONTROLLER_BT)
 +              ret = sixaxis_set_operational_bt(hdev);
 +      else
 +              ret = 0;
  
        if (ret < 0)
                goto err_stop;
@@@ -156,10 -138,8 +157,10 @@@ static void sony_remove(struct hid_devi
  }
  
  static const struct hid_device_id sony_devices[] = {
 -      { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_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_PS3_CONTROLLER),
 +              .driver_data = SIXAXIS_CONTROLLER_USB },
 +      { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER),
 +              .driver_data = SIXAXIS_CONTROLLER_BT },
        { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE),
                .driver_data = VAIO_RDESC_CONSTANT },
        { }
@@@ -33,9 -33,8 +33,9 @@@ static const struct hid_blacklist 
        { USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_PREDATOR, HID_QUIRK_BADPAD },
        { USB_VENDOR_ID_ALPS, USB_DEVICE_ID_IBM_GAMEPAD, HID_QUIRK_BADPAD },
        { USB_VENDOR_ID_CHIC, USB_DEVICE_ID_CHIC_GAMEPAD, HID_QUIRK_BADPAD },
 -      { USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH, HID_QUIRK_MULTI_INPUT },
 +      { USB_VENDOR_ID_DWAV, USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER, HID_QUIRK_MULTI_INPUT | HID_QUIRK_NOGET },
        { USB_VENDOR_ID_MOJO, USB_DEVICE_ID_RETRO_ADAPTER, HID_QUIRK_MULTI_INPUT },
 +      { USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART, HID_QUIRK_MULTI_INPUT },
        { USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_DRIVING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
        { USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
        { USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING, HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
@@@ -62,7 -61,6 +62,7 @@@
        { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_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_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
        { USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
        { USB_VENDOR_ID_PRODIGE, USB_DEVICE_ID_PRODIGE_CORDLESS, HID_QUIRK_NOGET },
        { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },
        { USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD, HID_QUIRK_NOGET },
        { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_PF1209, HID_QUIRK_MULTI_INPUT },
 +      { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U, HID_QUIRK_MULTI_INPUT },
 +      { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_KNA5, HID_QUIRK_MULTI_INPUT },
+       { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP5540U, HID_QUIRK_MULTI_INPUT },
+       { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP8060U, HID_QUIRK_MULTI_INPUT },
        { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS },
        { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
  
@@@ -80,8 -78,6 +82,8 @@@
  
        { USB_VENDOR_ID_PI_ENGINEERING, USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL, HID_QUIRK_HIDINPUT_FORCE },
  
 +      { USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH, HID_QUIRK_MULTI_INPUT },
 +
        { 0, 0 }
  };
  
diff --combined include/linux/hid.h
@@@ -316,7 -316,6 +316,7 @@@ struct hid_item 
  #define HID_QUIRK_FULLSPEED_INTERVAL          0x10000000
  #define HID_QUIRK_NO_INIT_REPORTS             0x20000000
  #define HID_QUIRK_NO_IGNORE                   0x40000000
 +#define HID_QUIRK_NO_INPUT_SYNC                       0x80000000
  
  /*
   * This is the global environment of the parser. This information is
@@@ -627,8 -626,8 +627,8 @@@ struct hid_driver 
        int (*event)(struct hid_device *hdev, struct hid_field *field,
                        struct hid_usage *usage, __s32 value);
  
-       void (*report_fixup)(struct hid_device *hdev, __u8 *buf,
-                       unsigned int size);
+       __u8 *(*report_fixup)(struct hid_device *hdev, __u8 *buf,
+                       unsigned int *size);
  
        int (*input_mapping)(struct hid_device *hdev,
                        struct hid_input *hidinput, struct hid_field *field,