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)
1  2  3 
drivers/hid/hid-core.c
drivers/hid/hid-debug.c
drivers/hid/hid-ids.h
drivers/hid/hidraw.c
drivers/hid/usbhid/hid-quirks.c
drivers/hid/usbhid/hiddev.c

diff --combined drivers/hid/hid-core.c
@@@@ -1241,6 -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_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_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) },
@@@@ -1662,7 -1664,6 -1661,6 +1665,7 @@@@ static const struct hid_device_id hid_i
        { 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-debug.c
@@@@ -570,6 -570,8 -570,6 +570,8 @@@@ void hid_debug_event(struct hid_device 
                                buf[i];
                list->tail = (list->tail + i) % HID_DEBUG_BUFSIZE;
           }
+ +
+ +     wake_up_interruptible(&hdev->debug_wait);
   }
   EXPORT_SYMBOL_GPL(hid_debug_event);
   
@@@@ -1051,7 -1053,6 -1051,6 +1053,7 @@@@ static const struct file_operations hid
        .read           = hid_debug_events_read,
        .poll           = hid_debug_events_poll,
        .release        = hid_debug_events_release,
 ++     .llseek         = noop_llseek,
   };
   
   
diff --combined drivers/hid/hid-ids.h
   #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_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_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_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
diff --combined drivers/hid/hidraw.c
@@@@ -109,12 -109,6 -109,6 +109,12 @@@@ static ssize_t hidraw_write(struct fil
        int ret = 0;
   
        mutex_lock(&minors_lock);
 ++
 ++     if (!hidraw_table[minor]) {
 ++             ret = -ENODEV;
 ++             goto out;
 ++     }
 ++
        dev = hidraw_table[minor]->hid;
   
        if (!dev->hid_output_raw_report) {
@@@@ -218,9 -212,9 -212,13 +218,13 @@@@ static int hidraw_release(struct inode 
        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];
                        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,
   
        mutex_lock(&minors_lock);
        dev = hidraw_table[minor];
 ++     if (!dev) {
 ++             ret = -ENODEV;
 ++             goto out;
 ++     }
   
        switch (cmd) {
                case HIDIOCGRDESCSIZE:
   
                ret = -ENOTTY;
        }
 ++out:
        mutex_unlock(&minors_lock);
        return ret;
   }
@@@@ -340,7 -329,6 -335,6 +346,7 @@@@ static const struct file_operations hid
        .open =         hidraw_open,
        .release =      hidraw_release,
        .unlocked_ioctl = hidraw_ioctl,
 ++     .llseek =       noop_llseek,
   };
   
   void hidraw_report_event(struct hid_device *hid, u8 *data, int len)
@@@@ -36,7 -36,6 -36,6 +36,7 @@@@ static const struct hid_blacklist 
        { USB_VENDOR_ID_DWAV, USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER, HID_QUIRK_MULTI_INPUT | HID_QUIRK_NOGET },
        { USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH, HID_QUIRK_MULTI_INPUT },
        { 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 },
        { 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 },
@@@@ -67,8 -67,6 -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
@@@@ -847,7 -845,6 -847,6 +845,7 @@@@ static const struct file_operations hid
   #ifdef CONFIG_COMPAT
        .compat_ioctl   = hiddev_compat_ioctl,
   #endif
 ++     .llseek         = noop_llseek,
   };
   
   static char *hiddev_devnode(struct device *dev, mode_t *mode)
@@@@ -926,41 -923,3 -925,41 +924,3 @@@@ void hiddev_disconnect(struct hid_devic
                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);
- -}