Merge branches 'doc', 'multitouch', 'upstream' and 'upstream-fixes' into for-linus
authorJiri Kosina <jkosina@suse.cz>
Mon, 23 May 2011 10:49:25 +0000 (12:49 +0200)
committerJiri Kosina <jkosina@suse.cz>
Mon, 23 May 2011 10:49:25 +0000 (12:49 +0200)
1  2  3  4 
drivers/hid/Kconfig
drivers/hid/hid-core.c
drivers/hid/hid-ids.h
drivers/hid/hid-lgff.c
drivers/hid/hid-magicmouse.c
drivers/hid/usbhid/hid-quirks.c
drivers/hid/usbhid/hiddev.c
samples/Kconfig

diff --combined drivers/hid/Kconfig
@@@@@ -55,12 -55,6 -55,12 -55,12 +55,6 @@@@@ source "drivers/hid/usbhid/Kconfig
    menu "Special HID drivers"
        depends on HID
    
- --config HID_3M_PCT
- --    tristate "3M PCT touchscreen"
- --    depends on USB_HID
- --    ---help---
- --    Support for 3M PCT touch screens.
- --
    config HID_A4TECH
        tristate "A4 tech mice" if EXPERT
        depends on USB_HID
@@@@@ -100,12 -94,6 -100,12 -100,12 +94,6 @@@@@ config HID_BELKI
        ---help---
        Support for Belkin Flip KVM and Wireless keyboard.
    
- --config HID_CANDO
- --    tristate "Cando dual touch panel"
- --    depends on USB_HID
- --    ---help---
- --    Support for Cando dual touch panel.
- --
    config HID_CHERRY
        tristate "Cherry Cymotion keyboard" if EXPERT
        depends on USB_HID
@@@@@ -185,7 -173,7 -185,7 -185,7 +173,7 @@@@@ config HID_EZKE
        Support for Ezkey BTC 8193 keyboard.
    
    config HID_KEYTOUCH
-- -    tristate "Keyoutch HID devices"
++ +    tristate "Keytouch HID devices"
        depends on USB_HID
        ---help---
        Support for Keytouch HID devices not fully compliant with
@@@@@ -300,12 -288,6 -300,12 -300,12 +288,6 @@@@@ config HID_MICROSOF
        ---help---
        Support for Microsoft devices that are not fully compliant with HID standard.
    
- --config HID_MOSART
- --    tristate "MosArt dual-touch panels"
- --    depends on USB_HID
- --    ---help---
- --    Support for MosArt dual-touch panels.
- --
    config HID_MONTEREY
        tristate "Monterey Genius KB29E keyboard" if EXPERT
        depends on USB_HID
@@@@@ -320,13 -302,25 -320,13 -320,13 +302,25 @@@@@ config HID_MULTITOUC
          Generic support for HID multitouch panels.
    
          Say Y here if you have one of the following devices:
+ ++      - 3M PCT touch screens
+ ++      - ActionStar dual touch panels
+ ++      - Cando dual touch panels
+ ++      - CVTouch panels
          - Cypress TrueTouch panels
+ ++      - Elo TouchSystems IntelliTouch Plus panels
+ ++      - GeneralTouch 'Sensing Win7-TwoFinger' panels
+ ++      - GoodTouch panels
          - Hanvon dual touch panels
+ ++      - Ilitek dual touch panels
          - IrTouch Infrared USB panels
+ ++      - Lumio CrystalTouch panels
+ ++      - MosArt dual-touch panels
+ ++      - PenMount dual touch panels
          - Pixcir dual touch panels
- --      - 'Sensing Win7-TwoFinger' panel by GeneralTouch
- --          - eGalax dual-touch panels, including the
- --        Joojoo and Wetab tablets
+ ++      - eGalax dual-touch panels, including the Joojoo and Wetab tablets
+ ++      - Stantum multitouch panels
+ ++      - Touch International Panels
+ ++      - Unitec Panels
    
          If unsure, say N.
    
@@@@@ -340,10 -334,10 -340,17 -340,10 +334,17 @@@@@ config HID_NTRI
        Support for N-Trig touch screen.
    
    config HID_ORTEK
-- -    tristate "Ortek PKB-1700/WKB-2000 wireless keyboard and mouse trackpad"
++ +    tristate "Ortek PKB-1700/WKB-2000/Skycable wireless keyboard and mouse trackpad"
        depends on USB_HID
        ---help---
-- -    Support for Ortek PKB-1700/WKB-2000 wireless keyboard + mouse trackpad.
++ +    There are certain devices which have LogicalMaximum wrong in the keyboard
++ +    usage page of their report descriptor. The most prevailing ones so far
++ +    are manufactured by Ortek, thus the name of the driver. Currently
++ +    supported devices by this driver are
++ +
++ +       - Ortek PKB-1700
++ +       - Ortek WKB-2000
++ +       - Skycable wireless presenter
    
    config HID_PANTHERLORD
        tristate "Pantherlord/GreenAsia game controller"
@@@@@ -493,12 -487,6 -500,12 -493,12 +494,6 @@@@@ config HID_SON
        ---help---
        Support for Sony PS3 controller.
    
- --config HID_STANTUM
- --    tristate "Stantum multitouch panel"
- --    depends on USB_HID
- --    ---help---
- --    Support for Stantum multitouch panel.
- --
    config HID_SUNPLUS
        tristate "Sunplus wireless desktop"
        depends on USB_HID
diff --combined drivers/hid/hid-core.c
@@@@@ -306,7 -306,7 -306,7 -306,7 +306,7 @@@@@ static int hid_parser_global(struct hid
        case HID_GLOBAL_ITEM_TAG_PUSH:
    
                if (parser->global_stack_ptr == HID_GLOBAL_STACK_SIZE) {
-- -                    dbg_hid("global enviroment stack overflow\n");
++ +                    dbg_hid("global environment stack overflow\n");
                        return -1;
                }
    
        case HID_GLOBAL_ITEM_TAG_POP:
    
                if (!parser->global_stack_ptr) {
-- -                    dbg_hid("global enviroment stack underflow\n");
++ +                    dbg_hid("global environment stack underflow\n");
                        return -1;
                }
    
@@@@@ -1045,6 -1045,6 -1045,6 -1045,9 +1045,9 @@@@@ void hid_report_raw_event(struct hid_de
    
        rsize = ((report->size - 1) >> 3) + 1;
    
+++     if (rsize > HID_MAX_BUFFER_SIZE)
+++             rsize = HID_MAX_BUFFER_SIZE;
+++ 
        if (csize < rsize) {
                dbg_hid("report %d is too short, (%d < %d)\n", report->id,
                                csize, rsize);
@@@@@ -1290,6 -1290,7 -1290,6 -1293,6 +1293,7 @@@@@ static const struct hid_device_id hid_h
        { 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) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) },
+ ++    { HID_USB_DEVICE(USB_VENDOR_ID_ACTIONSTAR, USB_DEVICE_ID_ACTIONSTAR_1011) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) },
        { 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_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) },
++ +    { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI) },
++ +    { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO) },
++ +    { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_JIS) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_PRODIKEYS_PCMIDI) },
+ ++    { HID_USB_DEVICE(USB_VENDOR_ID_CVTOUCH, USB_DEVICE_ID_CVTOUCH_SCREEN) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_3) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH3) },
        { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH4) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
+ ++    { HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2515) },
        { HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II) },
        { HID_USB_DEVICE(USB_VENDOR_ID_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_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
+ ++    { HID_USB_DEVICE(USB_VENDOR_ID_GOODTOUCH, USB_DEVICE_ID_GOODTOUCH_000f) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0003) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0012) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_3) },
        { HID_USB_DEVICE(USB_VENDOR_ID_HANVON, USB_DEVICE_ID_HANVON_MULTITOUCH) },
+ ++    { HID_USB_DEVICE(USB_VENDOR_ID_ILITEK, USB_DEVICE_ID_ILITEK_MULTITOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_IRTOUCHSYSTEMS, USB_DEVICE_ID_IRTOUCH_INFRARED_USB) },
        { HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFP_WHEEL) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) },
+++     { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G27_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_LUMIO, USB_DEVICE_ID_CRYSTALTOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICOLCD_BOOTLOADER) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) },
        { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) },
+ ++    { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_PCI) },
        { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_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_KONEPLUS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KOVAPLUS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRED) },
++ +    { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRELESS) },
        { 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_SKYCABLE, USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER) },
        { 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_VAIO_VGX_MOUSE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_STANTUM, USB_DEVICE_ID_MTP) },
        { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb65a) },
        { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) },
        { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED2, USB_DEVICE_ID_TOPSEED2_RF_COMBO) },
+ ++    { HID_USB_DEVICE(USB_VENDOR_ID_TOUCH_INTL, USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },
        { 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_UNITEC, USB_DEVICE_ID_UNITEC_USB_TOUCH_0709) },
+ ++    { HID_USB_DEVICE(USB_VENDOR_ID_UNITEC, USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19) },
        { 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_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH) },
@@@@@ -1840,6 -1850,6 -1845,9 -1845,6 +1860,9 @@@@@ static const struct hid_device_id hid_m
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS) },
++ +    { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI) },
++ +    { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_ISO) },
++ +    { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING5_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) },
        { }
diff --combined drivers/hid/hid-ids.h
    
    #define USB_VENDOR_ID_ACRUX         0x1a34
    
+ ++#define USB_VENDOR_ID_ACTIONSTAR    0x2101
+ ++#define USB_DEVICE_ID_ACTIONSTAR_1011       0x1011
+ ++
    #define USB_VENDOR_ID_ADS_TECH              0x06e1
    #define USB_DEVICE_ID_ADS_TECH_RADIO_SI470X 0xa155
    
    #define USB_DEVICE_ID_APPLE_WELLSPRING4A_ANSI       0x0242
    #define USB_DEVICE_ID_APPLE_WELLSPRING4A_ISO        0x0243
    #define USB_DEVICE_ID_APPLE_WELLSPRING4A_JIS        0x0244
++ +#define USB_DEVICE_ID_APPLE_WELLSPRING5_ANSI        0x0245
++ +#define USB_DEVICE_ID_APPLE_WELLSPRING5_ISO 0x0246
++ +#define USB_DEVICE_ID_APPLE_WELLSPRING5_JIS 0x0247
    #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI  0x0239
    #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO   0x023a
    #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS   0x023b
    #define USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6 0x0f01
    
    #define USB_VENDOR_ID_CH            0x068e
++ +#define USB_DEVICE_ID_CH_PRO_THROTTLE       0x00f1
    #define USB_DEVICE_ID_CH_PRO_PEDALS 0x00f2
    #define USB_DEVICE_ID_CH_COMBATSTICK        0x00f4
    #define USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE       0x0051
    #define USB_VENDOR_ID_CREATIVELABS  0x041e
    #define USB_DEVICE_ID_PRODIKEYS_PCMIDI      0x2801
    
+ ++#define USB_VENDOR_ID_CVTOUCH               0x1ff7
+ ++#define USB_DEVICE_ID_CVTOUCH_SCREEN        0x0013
+ ++
    #define USB_VENDOR_ID_CYGNAL                0x10c4
    #define USB_DEVICE_ID_CYGNAL_RADIO_SI470X   0x818a
    
    #define USB_VENDOR_ID_DREAM_CHEEKY  0x1d34
    
    #define USB_VENDOR_ID_ELO           0x04E7
+ ++#define USB_DEVICE_ID_ELO_TS2515    0x0022
    #define USB_DEVICE_ID_ELO_TS2700    0x0020
    
    #define USB_VENDOR_ID_EMS           0x2006
    #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_VENDOR_ID_GOTOP         0x08f2
    #define USB_DEVICE_ID_SUPER_Q2              0x007f
    #define USB_DEVICE_ID_GOGOPEN               0x00ce
    #define USB_DEVICE_ID_UGCI_FLYING   0x0020
    #define USB_DEVICE_ID_UGCI_FIGHTING 0x0030
    
+ ++#define USB_VENDOR_ID_ILITEK                0x222a
+ ++#define USB_DEVICE_ID_ILITEK_MULTITOUCH     0x0001
+ ++
    #define USB_VENDOR_ID_IMATION               0x0718
    #define USB_DEVICE_ID_DISC_STAKKA   0xd000
    
    #define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL   0xc295
    #define USB_DEVICE_ID_LOGITECH_DFP_WHEEL    0xc298
    #define USB_DEVICE_ID_LOGITECH_G25_WHEEL    0xc299
+++ #define USB_DEVICE_ID_LOGITECH_G27_WHEEL    0xc29b
    #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_DINOVO_MINI   0xc71f
    #define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2  0xca03
    
+ ++#define USB_VENDOR_ID_LUMIO         0x202e
+ ++#define USB_DEVICE_ID_CRYSTALTOUCH  0x0006
+ ++
    #define USB_VENDOR_ID_MCC           0x09db
    #define USB_DEVICE_ID_MCC_PMD1024LS 0x0076
    #define USB_DEVICE_ID_MCC_PMD1208LS 0x007a
    #define USB_VENDOR_ID_PANTHERLORD   0x0810
    #define USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK 0x0001
    
+ ++#define USB_VENDOR_ID_PENMOUNT              0x14e1
+ ++#define USB_DEVICE_ID_PENMOUNT_PCI  0x3500
+ ++
    #define USB_VENDOR_ID_PETALYNX              0x18b1
    #define USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE        0x0037
    
    #define USB_DEVICE_ID_SAMSUNG_IR_REMOTE     0x0001
    #define USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE    0x0600
    
++ +#define USB_VENDOR_ID_SKYCABLE                      0x1223
++ +#define     USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER       0x3F07
++ +
    #define USB_VENDOR_ID_SONY                  0x054c
    #define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE   0x024b
    #define USB_DEVICE_ID_SONY_PS3_CONTROLLER   0x0268
+++ #define USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER    0x042f
    
    #define USB_VENDOR_ID_SOUNDGRAPH    0x15c2
    #define USB_DEVICE_ID_SOUNDGRAPH_IMON_FIRST 0x0034
    #define USB_VENDOR_ID_SUNPLUS               0x04fc
    #define USB_DEVICE_ID_SUNPLUS_WDESKTOP      0x05d8
    
+++ #define USB_VENDOR_ID_SYMBOL                0x05e0
+++ #define USB_DEVICE_ID_SYMBOL_SCANNER_1      0x0800
+++ #define USB_DEVICE_ID_SYMBOL_SCANNER_2      0x1300
+++ 
    #define USB_VENDOR_ID_THRUSTMASTER  0x044f
    
    #define USB_VENDOR_ID_TOPSEED               0x0766
    #define USB_VENDOR_ID_TOPMAX                0x0663
    #define USB_DEVICE_ID_TOPMAX_COBRAPAD       0x0103
    
+ ++#define USB_VENDOR_ID_TOUCH_INTL    0x1e5e
+ ++#define USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH        0x0313
+ ++
    #define USB_VENDOR_ID_TOUCHPACK             0x1bfd
    #define USB_DEVICE_ID_TOUCHPACK_RTS 0x1688
    
    #define USB_DEVICE_ID_UCLOGIC_TABLET_WP5540U        0x0004
    #define USB_DEVICE_ID_UCLOGIC_TABLET_WP8060U        0x0005
    
+ ++#define USB_VENDOR_ID_UNITEC        0x227d
+ ++#define USB_DEVICE_ID_UNITEC_USB_TOUCH_0709 0x0709
+ ++#define USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19 0x0a19
+ ++
    #define USB_VENDOR_ID_VERNIER               0x08f7
    #define USB_DEVICE_ID_VERNIER_LABPRO        0x0001
    #define USB_DEVICE_ID_VERNIER_GOTEMP        0x0002
diff --combined drivers/hid/hid-lgff.c
@@@@@ -72,7 -72,7 -72,9 -72,10 +72,12 @@@@@ static const struct dev_type devices[] 
        { 0x046d, 0xc287, ff_joystick_ac },
        { 0x046d, 0xc293, ff_joystick },
        { 0x046d, 0xc294, ff_wheel },
+++     { 0x046d, 0xc298, ff_wheel },
+++     { 0x046d, 0xc299, ff_wheel },
+++     { 0x046d, 0xc29b, ff_wheel },
        { 0x046d, 0xc295, ff_joystick },
++ +    { 0x046d, 0xc298, ff_wheel },
++ +    { 0x046d, 0xc299, ff_wheel },
        { 0x046d, 0xca03, ff_wheel },
    };
    
@@@@@ -76,7 -76,7 -76,7 -76,7 +76,7 @@@@@ MODULE_PARM_DESC(report_undeciphered, "
     * This is true when single_touch_id is equal to NO_TOUCHES. If multiple touches
     * are down and the touch providing for single touch emulation is lifted,
     * single_touch_id is equal to SINGLE_TOUCH_UP. While single touch emulation is
-- - * occuring, single_touch_id corresponds with the tracking id of the touch used.
++ + * occurring, single_touch_id corresponds with the tracking id of the touch used.
     */
    #define NO_TOUCHES -1
    #define SINGLE_TOUCH_UP -2
@@@@@ -418,6 -418,6 -418,8 -418,6 +418,8 @@@@@ static void magicmouse_setup_input(stru
                        input_set_abs_params(input, ABS_MT_POSITION_Y, -2456,
                                2565, 4, 0);
                }
++ +
++ +            input_set_events_per_packet(input, 60);
        }
    
        if (report_undeciphered) {
@@@@@ -499,9 -499,9 -501,9 -499,17 +501,17 @@@@@ static int magicmouse_probe(struct hid_
        }
        report->size = 6;
    
+++     /*
+++      * The device reponds with 'invalid report id' when feature
+++      * report switching it into multitouch mode is sent to it.
+++      *
+++      * This results in -EIO from the _raw low-level transport callback,
+++      * but there seems to be no other way of switching the mode.
+++      * Thus the super-ugly hacky success check below.
+++      */
        ret = hdev->hid_output_raw_report(hdev, feature, sizeof(feature),
                        HID_FEATURE_REPORT);
---     if (ret != sizeof(feature)) {
+++     if (ret != -EIO) {
                hid_err(hdev, "unable to request touch data (%d)\n", ret);
                goto err_stop_hw;
        }
@@@@@ -59,6 -59,6 -59,7 -59,6 +59,7 @@@@@ static const struct hid_blacklist 
        { 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_FLIGHT_SIM_YOKE, HID_QUIRK_NOGET },
++ +    { USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_THROTTLE, 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_PRODIGE, USB_DEVICE_ID_PRODIGE_CORDLESS, HID_QUIRK_NOGET },
        { USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NOGET },
        { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },
+++     { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_1, HID_QUIRK_NOGET },
+++     { USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_2, 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 },
@@@@@ -242,6 -242,6 -242,7 -242,6 +242,7 @@@@@ static int hiddev_release(struct inode 
        list_del(&list->node);
        spin_unlock_irqrestore(&list->hiddev->list_lock, flags);
    
++ +    mutex_lock(&list->hiddev->existancelock);
        if (!--list->hiddev->open) {
                if (list->hiddev->exist) {
                        usbhid_close(list->hiddev->hid);
        }
    
        kfree(list);
++ +    mutex_unlock(&list->hiddev->existancelock);
    
        return 0;
    }
@@@@@ -300,17 -300,17 -302,21 -300,17 +302,21 @@@@@ static int hiddev_open(struct inode *in
        list_add_tail(&list->node, &hiddev->list);
        spin_unlock_irq(&list->hiddev->list_lock);
    
++ +    mutex_lock(&hiddev->existancelock);
        if (!list->hiddev->open++)
                if (list->hiddev->exist) {
                        struct hid_device *hid = hiddev->hid;
                        res = usbhid_get_power(hid);
                        if (res < 0) {
                                res = -EIO;
-- -                            goto bail;
++ +                            goto bail_unlock;
                        }
                        usbhid_open(hid);
                }
++ +    mutex_unlock(&hiddev->existancelock);
        return 0;
++ +bail_unlock:
++ +    mutex_unlock(&hiddev->existancelock);
    bail:
        file->private_data = NULL;
        kfree(list);
@@@@@ -367,8 -367,8 -373,8 -367,10 +373,10 @@@@@ static ssize_t hiddev_read(struct file 
                                /* let O_NONBLOCK tasks run */
                                mutex_unlock(&list->thread_lock);
                                schedule();
---                             if (mutex_lock_interruptible(&list->thread_lock))
+++                             if (mutex_lock_interruptible(&list->thread_lock)) {
+++                                     finish_wait(&list->hiddev->wait, &wait);
                                        return -EINTR;
+++                             }
                                set_current_state(TASK_INTERRUPTIBLE);
                        }
                        finish_wait(&list->hiddev->wait, &wait);
@@@@@ -509,7 -509,7 -515,7 -511,7 +517,7 @@@@@ static noinline int hiddev_ioctl_usage(
                                 (uref_multi->num_values > HID_MAX_MULTI_USAGES ||
                                  uref->usage_index + uref_multi->num_values > field->report_count))
                                goto inval;
-- -                    }
++ +            }
    
                switch (cmd) {
                case HIDIOCGUSAGE:
@@@@@ -801,14 -801,14 -807,7 -803,14 +809,7 @@@@@ static long hiddev_ioctl(struct file *f
                        break;
    
                if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGNAME(0))) {
-- -                    int len;
-- -
-- -                    if (!hid->name) {
-- -                            r = 0;
-- -                            break;
-- -                    }
-- -
-- -                    len = strlen(hid->name) + 1;
++ +                    int len = strlen(hid->name) + 1;
                        if (len > _IOC_SIZE(cmd))
                                 len = _IOC_SIZE(cmd);
                        r = copy_to_user(user_arg, hid->name, len) ?
                }
    
                if (_IOC_NR(cmd) == _IOC_NR(HIDIOCGPHYS(0))) {
-- -                    int len;
-- -
-- -                    if (!hid->phys) {
-- -                            r = 0;
-- -                            break;
-- -                    }
-- -
-- -                    len = strlen(hid->phys) + 1;
++ +                    int len = strlen(hid->phys) + 1;
                        if (len > _IOC_SIZE(cmd))
                                len = _IOC_SIZE(cmd);
                        r = copy_to_user(user_arg, hid->phys, len) ?
@@@@@ -925,7 -925,7 -917,6 -927,7 +919,6 @@@@@ void hiddev_disconnect(struct hid_devic
    
        mutex_lock(&hiddev->existancelock);
        hiddev->exist = 0;
-- -    mutex_unlock(&hiddev->existancelock);
    
        usb_deregister_dev(usbhid->intf, &hiddev_class);
    
        } else {
                kfree(hiddev);
        }
++ +    mutex_unlock(&hiddev->existancelock);
    }
diff --combined samples/Kconfig
@@@@@ -55,16 -55,10 -55,10 -55,10 +55,16 @@@@@ config SAMPLE_KFIF
          If in doubt, say "N" here.
    
    config SAMPLE_KDB
-- -    tristate "Build kdb command exmaple -- loadable modules only"
++ +    tristate "Build kdb command example -- loadable modules only"
        depends on KGDB_KDB && m
        help
          Build an example of how to dynamically add the hello
          command to the kdb shell.
    
 +++config SAMPLE_HIDRAW
 +++    bool "Build simple hidraw example"
 +++    depends on HIDRAW && HEADERS_CHECK
 +++    help
 +++      Build an example of how to use hidraw from userspace.
 +++
    endif # SAMPLES