Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 30 Jul 2015 18:03:04 +0000 (11:03 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 30 Jul 2015 18:03:04 +0000 (11:03 -0700)
Pull input fixes from Dmitry Torokhov:
 "The main change is support for keyboards and touchpads found in 2015
  editions of Macbooks"

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Revert "Input: zforce - don't overwrite the stack"
  Input: bcm5974 - add support for the 2015 Macbook Pro
  HID: apple: Add support for the 2015 Macbook Pro
  Input: bcm5974 - prepare for a new trackpad generation
  Input: synaptics - dump ext10 capabilities as well

1  2 
drivers/hid/hid-core.c
drivers/hid/hid-ids.h

diff --combined drivers/hid/hid-core.c
@@@ -706,8 -706,7 +706,8 @@@ static void hid_scan_collection(struct 
  
        if (hid->vendor == USB_VENDOR_ID_MICROSOFT &&
            (hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3 ||
 -           hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3_JP) &&
 +           hid->product == USB_DEVICE_ID_MS_TYPE_COVER_3_JP ||
 +           hid->product == USB_DEVICE_ID_MS_POWER_COVER) &&
            hid->group == HID_GROUP_MULTITOUCH)
                hid->group = HID_GROUP_GENERIC;
  
@@@ -1062,13 -1061,13 +1062,13 @@@ static u32 s32ton(__s32 value, unsigne
   * Search linux-kernel and linux-usb-devel archives for "hid-core extract".
   */
  
 -static __u32 extract(const struct hid_device *hid, __u8 *report,
 +__u32 hid_field_extract(const struct hid_device *hid, __u8 *report,
                     unsigned offset, unsigned n)
  {
        u64 x;
  
        if (n > 32)
 -              hid_warn(hid, "extract() called with n (%d) > 32! (%s)\n",
 +              hid_warn(hid, "hid_field_extract() called with n (%d) > 32! (%s)\n",
                         n, current->comm);
  
        report += offset >> 3;  /* adjust byte index */
        x = (x >> offset) & ((1ULL << n) - 1);  /* extract bit field */
        return (u32) x;
  }
 +EXPORT_SYMBOL_GPL(hid_field_extract);
  
  /*
   * "implement" : set bits in a little endian bit stream.
@@@ -1223,9 -1221,9 +1223,9 @@@ static void hid_input_field(struct hid_
        for (n = 0; n < count; n++) {
  
                value[n] = min < 0 ?
 -                      snto32(extract(hid, data, offset + n * size, size),
 -                             size) :
 -                      extract(hid, data, offset + n * size, size);
 +                      snto32(hid_field_extract(hid, data, offset + n * size,
 +                             size), size) :
 +                      hid_field_extract(hid, data, offset + n * size, size);
  
                /* Ignore report if ErrorRollOver */
                if (!(field->flags & HID_MAIN_ITEM_VARIABLE) &&
@@@ -1564,26 -1562,12 +1564,26 @@@ read_report_descriptor(struct file *fil
        return count;
  }
  
 +static ssize_t
 +show_country(struct device *dev, struct device_attribute *attr,
 +              char *buf)
 +{
 +      struct hid_device *hdev = container_of(dev, struct hid_device, dev);
 +
 +      return sprintf(buf, "%02x\n", hdev->country & 0xff);
 +}
 +
  static struct bin_attribute dev_bin_attr_report_desc = {
        .attr = { .name = "report_descriptor", .mode = 0444 },
        .read = read_report_descriptor,
        .size = HID_MAX_DESCRIPTOR_SIZE,
  };
  
 +static struct device_attribute dev_attr_country = {
 +      .attr = { .name = "country", .mode = 0444 },
 +      .show = show_country,
 +};
 +
  int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
  {
        static const char *types[] = { "Device", "Pointer", "Mouse", "Device",
                bus = "<UNKNOWN>";
        }
  
 +      ret = device_create_file(&hdev->dev, &dev_attr_country);
 +      if (ret)
 +              hid_warn(hdev,
 +                       "can't create sysfs country code attribute err: %d\n", ret);
 +
        ret = device_create_bin_file(&hdev->dev, &dev_bin_attr_report_desc);
        if (ret)
                hid_warn(hdev,
@@@ -1682,7 -1661,6 +1682,7 @@@ EXPORT_SYMBOL_GPL(hid_connect)
  
  void hid_disconnect(struct hid_device *hdev)
  {
 +      device_remove_file(&hdev->dev, &dev_attr_country);
        device_remove_bin_file(&hdev->dev, &dev_bin_attr_report_desc);
        if (hdev->claimed & HID_CLAIMED_INPUT)
                hidinput_disconnect(hdev);
@@@ -1782,6 -1760,9 +1782,9 @@@ static const struct hid_device_id hid_h
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ISO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_JIS) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ISO) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_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_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X) },
        { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LCPOWER, USB_DEVICE_ID_LCPOWER_LC1000 ) },
  #if IS_ENABLED(CONFIG_HID_LENOVO)
        { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPKBD) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CUSBKBD) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_CBTKBD) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_TPPRODOCK) },
  #endif
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_OFFICE_KB) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_3_JP) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MONTEREY, USB_DEVICE_ID_GENIUS_KB29E) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL) },
        { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SMK, USB_DEVICE_ID_SMK_PS3_BDREMOTE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_BUZZ_CONTROLLER) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER) },
 +      { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_MOTION_CONTROLLER) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
 +      { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_BDREMOTE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS4_CONTROLLER) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_DUAL_BOX_PRO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD, USB_DEVICE_ID_SUPER_JOY_BOX_5_PRO) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_Q_PAD) },
@@@ -2273,6 -2247,14 +2276,6 @@@ static const struct hid_device_id hid_i
        { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0001) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0002) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0004) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_4_PHIDGETSERVO_30) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_1_PHIDGETSERVO_30) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_0_4_IF_KIT) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_16_16_IF_KIT) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_8_8_8_IF_KIT) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_7_IF_KIT) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_0_8_8_IF_KIT) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_GLAB, USB_DEVICE_ID_PHIDGET_MOTORCONTROL) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_SUPER_Q2) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_GOGOPEN) },
        { HID_USB_DEVICE(USB_VENDOR_ID_GOTOP, USB_DEVICE_ID_PENPOWER) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_WTP) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_DPAD) },
  #endif
 -      { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LABPRO) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_GOTEMP) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_SKIP) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_CYCLOPS) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_VERNIER, USB_DEVICE_ID_VERNIER_LCSPEC) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_4_PHIDGETSERVO_20) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_1_PHIDGETSERVO_20) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_8_8_4_IF_KIT) },
        { HID_USB_DEVICE(USB_VENDOR_ID_YEALINK, USB_DEVICE_ID_YEALINK_P1K_P4K_B2K) },
        { HID_USB_DEVICE(USB_VENDOR_ID_RISO_KAGAKU, USB_DEVICE_ID_RI_KA_WEBMAIL) },
        { }
@@@ -2463,6 -2453,9 +2466,9 @@@ static const struct hid_device_id hid_m
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ANSI) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_ISO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING8_JIS) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_ISO) },
+       { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_WELLSPRING9_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_DEVICE_ID_APPLE_WELLSPRING8_ANSI  0x0290
  #define USB_DEVICE_ID_APPLE_WELLSPRING8_ISO   0x0291
  #define USB_DEVICE_ID_APPLE_WELLSPRING8_JIS   0x0292
+ #define USB_DEVICE_ID_APPLE_WELLSPRING9_ANSI  0x0272
+ #define USB_DEVICE_ID_APPLE_WELLSPRING9_ISO           0x0273
+ #define USB_DEVICE_ID_APPLE_WELLSPRING9_JIS           0x0274
  #define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY  0x030a
  #define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY   0x030b
  #define USB_DEVICE_ID_APPLE_IRCONTROL 0x8240
  #define USB_DEVICE_ID_ATEN_2PORTKVM   0x2204
  #define USB_DEVICE_ID_ATEN_4PORTKVM   0x2205
  #define USB_DEVICE_ID_ATEN_4PORTKVMC  0x2208
 +#define USB_DEVICE_ID_ATEN_CS682      0x2213
  
  #define USB_VENDOR_ID_ATMEL           0x03eb
  #define USB_DEVICE_ID_ATMEL_MULTITOUCH        0x211c
  #define USB_DEVICE_ID_CHICONY_TACTICAL_PAD    0x0418
  #define USB_DEVICE_ID_CHICONY_MULTI_TOUCH     0xb19d
  #define USB_DEVICE_ID_CHICONY_WIRELESS        0x0618
 +#define USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE        0x1053
  #define USB_DEVICE_ID_CHICONY_WIRELESS2       0x1123
  #define USB_DEVICE_ID_CHICONY_AK1D    0x1125
  
  #define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_010A 0x010a
  #define USB_DEVICE_ID_GENERAL_TOUCH_WIN8_PIT_E100 0xe100
  
 -#define USB_VENDOR_ID_GLAB            0x06c2
 -#define USB_DEVICE_ID_4_PHIDGETSERVO_30       0x0038
 -#define USB_DEVICE_ID_1_PHIDGETSERVO_30       0x0039
 -#define USB_DEVICE_ID_0_0_4_IF_KIT    0x0040
 -#define USB_DEVICE_ID_0_16_16_IF_KIT  0x0044
 -#define USB_DEVICE_ID_8_8_8_IF_KIT    0x0045
 -#define USB_DEVICE_ID_0_8_7_IF_KIT    0x0051
 -#define USB_DEVICE_ID_0_8_8_IF_KIT    0x0053
 -#define USB_DEVICE_ID_PHIDGET_MOTORCONTROL    0x0058
 -
  #define USB_VENDOR_ID_GOODTOUCH               0x1aad
  #define USB_DEVICE_ID_GOODTOUCH_000f  0x000f
  
  #define USB_DEVICE_ID_UGCI_FLYING     0x0020
  #define USB_DEVICE_ID_UGCI_FIGHTING   0x0030
  
 +#define USB_VENDOR_ID_HP              0x03f0
 +#define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0A4A 0x0a4a
 +#define USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPTICAL_MOUSE_0B4A 0x0b4a
 +#define USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTICAL_MOUSE                0x134a
 +
  #define USB_VENDOR_ID_HUION           0x256c
  #define USB_DEVICE_ID_HUION_TABLET    0x006e
  
  #define USB_DEVICE_ID_KYE_MOUSEPEN_I608X      0x5011
  #define USB_DEVICE_ID_KYE_MOUSEPEN_I608X_2    0x501a
  #define USB_DEVICE_ID_KYE_EASYPEN_M610X       0x5013
 +#define USB_DEVICE_ID_KYE_PENSKETCH_M912      0x5015
  
  #define USB_VENDOR_ID_LABTEC          0x1020
  #define USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD        0x0006
  #define USB_DEVICE_ID_LENOVO_TPKBD    0x6009
  #define USB_DEVICE_ID_LENOVO_CUSBKBD  0x6047
  #define USB_DEVICE_ID_LENOVO_CBTKBD   0x6048
 +#define USB_DEVICE_ID_LENOVO_TPPRODOCK        0x6067
  
  #define USB_VENDOR_ID_LG              0x1fd2
  #define USB_DEVICE_ID_LG_MULTITOUCH   0x0064
  #define USB_DEVICE_ID_LOGITECH_HARMONY_FIRST  0xc110
  #define USB_DEVICE_ID_LOGITECH_HARMONY_LAST 0xc14f
  #define USB_DEVICE_ID_LOGITECH_HARMONY_PS3 0x0306
 +#define USB_DEVICE_ID_LOGITECH_MOUSE_C01A     0xc01a
 +#define USB_DEVICE_ID_LOGITECH_MOUSE_C05A     0xc05a
 +#define USB_DEVICE_ID_LOGITECH_MOUSE_C06A     0xc06a
  #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_MS_TYPE_COVER_2    0x07a9
  #define USB_DEVICE_ID_MS_TYPE_COVER_3    0x07dc
  #define USB_DEVICE_ID_MS_TYPE_COVER_3_JP 0x07dd
 +#define USB_DEVICE_ID_MS_POWER_COVER     0x07da
  
  #define USB_VENDOR_ID_MOJO            0x8282
  #define USB_DEVICE_ID_RETRO_ADAPTER   0x3201
  #define USB_DEVICE_ID_SONY_PS3_BDREMOTE               0x0306
  #define USB_DEVICE_ID_SONY_PS3_CONTROLLER     0x0268
  #define USB_DEVICE_ID_SONY_PS4_CONTROLLER     0x05c4
 +#define USB_DEVICE_ID_SONY_MOTION_CONTROLLER  0x03d5
  #define USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER      0x042f
  #define USB_DEVICE_ID_SONY_BUZZ_CONTROLLER            0x0002
  #define USB_DEVICE_ID_SONY_WIRELESS_BUZZ_CONTROLLER   0x1000
  #define USB_DEVICE_ID_VELLEMAN_K8061_FIRST    0x8061
  #define USB_DEVICE_ID_VELLEMAN_K8061_LAST     0x8068
  
 -#define USB_VENDOR_ID_VERNIER         0x08f7
 -#define USB_DEVICE_ID_VERNIER_LABPRO  0x0001
 -#define USB_DEVICE_ID_VERNIER_GOTEMP  0x0002
 -#define USB_DEVICE_ID_VERNIER_SKIP    0x0003
 -#define USB_DEVICE_ID_VERNIER_CYCLOPS 0x0004
 -#define USB_DEVICE_ID_VERNIER_LCSPEC  0x0006
 -
  #define USB_VENDOR_ID_VTL             0x0306
  #define USB_DEVICE_ID_VTL_MULTITOUCH_FF3F     0xff3f
  
  
  #define USB_VENDOR_ID_WISEGROUP               0x0925
  #define USB_DEVICE_ID_SMARTJOY_PLUS   0x0005
 -#define USB_DEVICE_ID_1_PHIDGETSERVO_20       0x8101
 -#define USB_DEVICE_ID_4_PHIDGETSERVO_20       0x8104
 -#define USB_DEVICE_ID_8_8_4_IF_KIT    0x8201
  #define USB_DEVICE_ID_SUPER_JOY_BOX_3 0x8888
  #define USB_DEVICE_ID_QUAD_USB_JOYPAD 0x8800
  #define USB_DEVICE_ID_DUAL_USB_JOYPAD 0x8866
  #define USB_DEVICE_ID_ZYTRONIC_ZXY100 0x0005
  
  #define USB_VENDOR_ID_PRIMAX  0x0461
 +#define USB_DEVICE_ID_PRIMAX_MOUSE_4D22       0x4d22
  #define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05
  
  
  #define USB_VENDOR_ID_RISO_KAGAKU     0x1294  /* Riso Kagaku Corp. */
  #define USB_DEVICE_ID_RI_KA_WEBMAIL   0x1320  /* Webmail Notifier */
  
 +#define USB_VENDOR_ID_MULTIPLE_1781   0x1781
 +#define USB_DEVICE_ID_RAPHNET_4NES4SNES_OLD   0x0a8d
 +
 +#define USB_VENDOR_ID_DRACAL_RAPHNET  0x289b
 +#define USB_DEVICE_ID_RAPHNET_2NES2SNES       0x0002
 +#define USB_DEVICE_ID_RAPHNET_4NES4SNES       0x0003
 +
  #endif