Merge branches 'upstream' and 'upstream-fixes' into for-linus
authorJiri Kosina <jkosina@suse.cz>
Sat, 23 Oct 2010 20:44:36 +0000 (22:44 +0200)
committerJiri Kosina <jkosina@suse.cz>
Sat, 23 Oct 2010 20:44:36 +0000 (22:44 +0200)
13 files changed:
drivers/hid/Kconfig
drivers/hid/hid-a4tech.c
drivers/hid/hid-core.c
drivers/hid/hid-debug.c
drivers/hid/hid-ids.h
drivers/hid/hid-input.c
drivers/hid/hid-sony.c
drivers/hid/hid-stantum.c
drivers/hid/hidraw.c
drivers/hid/usbhid/hid-core.c
drivers/hid/usbhid/hid-quirks.c
drivers/hid/usbhid/hiddev.c
include/linux/hiddev.h

index 6369ba7..2072e01 100644 (file)
@@ -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 @@ config HID_ACRUX_FF
        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 @@ config HID_APPLE
        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 @@ config HID_CANDO
        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 @@ config HID_PRODIKEYS
          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,46 @@ config HID_EGALAX
        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_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---
@@ -245,39 +245,39 @@ config HID_MAGICMOUSE
        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
@@ -292,7 +292,7 @@ config PANTHERLORD_FF
          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.
@@ -356,7 +356,7 @@ config HID_PICOLCD_LEDS
          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.
@@ -377,31 +377,31 @@ config HID_ROCCAT_KONE
        Support for Roccat Kone 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
index 3a2b223..1666c16 100644 (file)
@@ -133,6 +133,8 @@ static const struct hid_device_id a4_devices[] = {
                .driver_data = A4_2WHEEL_MOUSE_HACK_7 },
        { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D),
                .driver_data = A4_2WHEEL_MOUSE_HACK_B8 },
+       { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649),
+               .driver_data = A4_2WHEEL_MOUSE_HACK_B8 },
        { }
 };
 MODULE_DEVICE_TABLE(hid, a4_devices);
index 3cb6632..5ac2be9 100644 (file)
@@ -1241,6 +1241,7 @@ static const struct hid_device_id hid_blacklist[] = {
        { 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
@@ -1377,6 +1378,8 @@ static const struct hid_device_id hid_blacklist[] = {
        { 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) },
index 61a3e57..75c5e23 100644 (file)
@@ -570,6 +570,8 @@ void hid_debug_event(struct hid_device *hdev, char *buf)
                                buf[i];
                list->tail = (list->tail + i) % HID_DEBUG_BUFSIZE;
         }
+
+       wake_up_interruptible(&hdev->debug_wait);
 }
 EXPORT_SYMBOL_GPL(hid_debug_event);
 
index 855aa8e..5247f5b 100644 (file)
@@ -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
 #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_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
 
index 6c03dcc..8e733b6 100644 (file)
@@ -149,6 +149,83 @@ static int hidinput_setkeycode(struct input_dev *dev,
 }
 
 
+/**
+ * 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)
 {
@@ -537,6 +614,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);
index 402d557..0c164b3 100644 (file)
@@ -24,7 +24,9 @@
 
 #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;
@@ -44,12 +46,31 @@ static void sony_report_fixup(struct hid_device *hdev, __u8 *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);
@@ -74,7 +95,7 @@ static int sony_set_operational_usb(struct hid_device *hdev)
        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);
@@ -108,16 +129,14 @@ static int sony_probe(struct hid_device *hdev, const struct hid_device_id *id)
                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;
@@ -137,8 +156,10 @@ static void sony_remove(struct hid_device *hdev)
 }
 
 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 },
        { }
index 90df886..3171be2 100644 (file)
@@ -249,6 +249,8 @@ static void stantum_remove(struct hid_device *hdev)
 
 static const struct hid_device_id stantum_devices[] = {
        { 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) },
        { }
 };
 MODULE_DEVICE_TABLE(hid, stantum_devices);
index 925992f..8a4b32d 100644 (file)
@@ -218,9 +218,13 @@ static int hidraw_release(struct inode * inode, struct file * file)
        unsigned int minor = iminor(inode);
        struct hidraw *dev;
        struct hidraw_list *list = file->private_data;
+       int ret;
 
-       if (!hidraw_table[minor])
-               return -ENODEV;
+       mutex_lock(&minors_lock);
+       if (!hidraw_table[minor]) {
+               ret = -ENODEV;
+               goto unlock;
+       }
 
        list_del(&list->node);
        dev = hidraw_table[minor];
@@ -233,10 +237,12 @@ static int hidraw_release(struct inode * inode, struct file * file)
                        kfree(list->hidraw);
                }
        }
-
        kfree(list);
+       ret = 0;
+unlock:
+       mutex_unlock(&minors_lock);
 
-       return 0;
+       return ret;
 }
 
 static long hidraw_ioctl(struct file *file, unsigned int cmd,
index 599041a..7a778ac 100644 (file)
@@ -810,6 +810,7 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co
        if (usbhid->urbout) {
                int actual_length;
                int skipped_report_id = 0;
+
                if (buf[0] == 0x0) {
                        /* Don't send the Report ID */
                        buf++;
@@ -1469,9 +1470,6 @@ static int __init hid_init(void)
        retval = usbhid_quirks_init(quirks_param);
        if (retval)
                goto usbhid_quirks_init_fail;
-       retval = hiddev_init();
-       if (retval)
-               goto hiddev_init_fail;
        retval = usb_register(&hid_driver);
        if (retval)
                goto usb_register_fail;
@@ -1479,8 +1477,6 @@ static int __init hid_init(void)
 
        return 0;
 usb_register_fail:
-       hiddev_exit();
-hiddev_init_fail:
        usbhid_quirks_exit();
 usbhid_quirks_init_fail:
        hid_unregister_driver(&hid_usb_driver);
@@ -1493,7 +1489,6 @@ no_queue:
 static void __exit hid_exit(void)
 {
        usb_deregister(&hid_driver);
-       hiddev_exit();
        usbhid_quirks_exit();
        hid_unregister_driver(&hid_usb_driver);
        destroy_workqueue(resumption_waker);
index f0260c6..f90e937 100644 (file)
@@ -63,6 +63,7 @@ static const struct hid_blacklist {
        { 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 },
index dfcb276..fedd88d 100644 (file)
@@ -67,8 +67,6 @@ struct hiddev_list {
        struct mutex thread_lock;
 };
 
-static struct usb_driver hiddev_driver;
-
 /*
  * Find a report, given the report's type and ID.  The ID can be specified
  * indirectly by REPORT_ID_FIRST (which returns the first report of the given
@@ -926,41 +924,3 @@ void hiddev_disconnect(struct hid_device *hid)
                kfree(hiddev);
        }
 }
-
-/* Currently this driver is a USB driver.  It's not a conventional one in
- * the sense that it doesn't probe at the USB level.  Instead it waits to
- * be connected by HID through the hiddev_connect / hiddev_disconnect
- * routines.  The reason to register as a USB device is to gain part of the
- * minor number space from the USB major.
- *
- * In theory, should the HID code be generalized to more than one physical
- * medium (say, IEEE 1384), this driver will probably need to register its
- * own major number, and in doing so, no longer need to register with USB.
- * At that point the probe routine and hiddev_driver struct below will no
- * longer be useful.
- */
-
-
-/* We never attach in this manner, and rely on HID to connect us.  This
- * is why there is no disconnect routine defined in the usb_driver either.
- */
-static int hiddev_usbd_probe(struct usb_interface *intf,
-                            const struct usb_device_id *hiddev_info)
-{
-       return -ENODEV;
-}
-
-static /* const */ struct usb_driver hiddev_driver = {
-       .name =         "hiddev",
-       .probe =        hiddev_usbd_probe,
-};
-
-int __init hiddev_init(void)
-{
-       return usb_register(&hiddev_driver);
-}
-
-void hiddev_exit(void)
-{
-       usb_deregister(&hiddev_driver);
-}
index bb6f58b..a3f481a 100644 (file)
@@ -226,8 +226,6 @@ void hiddev_disconnect(struct hid_device *);
 void hiddev_hid_event(struct hid_device *hid, struct hid_field *field,
                      struct hid_usage *usage, __s32 value);
 void hiddev_report_event(struct hid_device *hid, struct hid_report *report);
-int __init hiddev_init(void);
-void hiddev_exit(void);
 #else
 static inline int hiddev_connect(struct hid_device *hid,
                unsigned int force)
@@ -236,8 +234,6 @@ static inline void hiddev_disconnect(struct hid_device *hid) { }
 static inline void hiddev_hid_event(struct hid_device *hid, struct hid_field *field,
                      struct hid_usage *usage, __s32 value) { }
 static inline void hiddev_report_event(struct hid_device *hid, struct hid_report *report) { }
-static inline int hiddev_init(void) { return 0; }
-static inline void hiddev_exit(void) { }
 #endif
 
 #endif