Merge branch 'egalax' into for-linus
authorJiri Kosina <jkosina@suse.cz>
Wed, 19 May 2010 12:26:44 +0000 (14:26 +0200)
committerJiri Kosina <jkosina@suse.cz>
Wed, 19 May 2010 12:26:44 +0000 (14:26 +0200)
Conflicts:
drivers/hid/hid-ids.h

1  2 
drivers/hid/Kconfig
drivers/hid/Makefile
drivers/hid/hid-core.c
drivers/hid/hid-ids.h
drivers/hid/usbhid/hid-quirks.c

diff --combined drivers/hid/Kconfig
@@@ -86,12 -86,6 +86,12 @@@ 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" if EMBEDDED
        depends on USB_HID
@@@ -128,6 -122,12 +128,12 @@@ config DRAGONRISE_F
        Say Y here if you want to enable force feedback support for DragonRise Inc.
        game controllers.
  
+ config HID_EGALAX
+       tristate "eGalax multi-touch panel"
+       depends on USB_HID
+       ---help---
+       Support for the eGalax dual-touch panel
  config HID_EZKEY
        tristate "Ezkey" if EMBEDDED
        depends on USB_HID
@@@ -279,7 -279,7 +285,7 @@@ config HID_SAMSUN
        depends on USB_HID
        default !EMBEDDED
        ---help---
 -      Support for Samsung InfraRed remote control.
 +      Support for Samsung InfraRed remote control or keyboards.
  
  config HID_SONY
        tristate "Sony" if EMBEDDED
@@@ -338,7 -338,7 +344,7 @@@ config HID_TOPSEE
        depends on USB_HID
        default !EMBEDDED
        ---help---
 -      Say Y if you have a TopSeed Cyberlink remote control.
 +      Say Y if you have a TopSeed Cyberlink or BTC Emprex remote control.
  
  config HID_THRUSTMASTER
        tristate "ThrustMaster devices support" if EMBEDDED
@@@ -363,14 -363,6 +369,14 @@@ config HID_WACO
        ---help---
        Support for Wacom Graphire Bluetooth tablet.
  
 +config HID_WACOM_POWER_SUPPLY
 +      bool "Wacom Bluetooth devices power supply status support"
 +      depends on HID_WACOM
 +      select POWER_SUPPLY
 +      ---help---
 +        Say Y here if you want to enable power supply status monitoring for
 +        Wacom Bluetooth devices.
 +
  config HID_ZEROPLUS
        tristate "Zeroplus based game controller support" if EMBEDDED
        depends on USB_HID
@@@ -386,13 -378,6 +392,13 @@@ config ZEROPLUS_F
          Say Y here if you have a Zeroplus based game controller and want
          to have force feedback support for it.
  
 +config HID_ZYDACRON
 +      tristate "Zydacron remote control support" if EMBEDDED
 +      depends on USB_HID
 +      default !EMBEDDED
 +      ---help---
 +      Support for Zydacron remote control.
 +
  endmenu
  
  endif # HID_SUPPORT
diff --combined drivers/hid/Makefile
@@@ -26,11 -26,11 +26,12 @@@ obj-$(CONFIG_HID_3M_PCT)   += hid-3m-pct.
  obj-$(CONFIG_HID_A4TECH)      += hid-a4tech.o
  obj-$(CONFIG_HID_APPLE)               += hid-apple.o
  obj-$(CONFIG_HID_BELKIN)      += hid-belkin.o
 +obj-$(CONFIG_HID_CANDO)               += hid-cando.o
  obj-$(CONFIG_HID_CHERRY)      += hid-cherry.o
  obj-$(CONFIG_HID_CHICONY)     += hid-chicony.o
  obj-$(CONFIG_HID_CYPRESS)     += hid-cypress.o
  obj-$(CONFIG_HID_DRAGONRISE)  += hid-drff.o
+ obj-$(CONFIG_HID_EGALAX)      += hid-egalax.o
  obj-$(CONFIG_HID_EZKEY)               += hid-ezkey.o
  obj-$(CONFIG_HID_GYRATION)    += hid-gyration.o
  obj-$(CONFIG_HID_KENSINGTON)  += hid-kensington.o
@@@ -55,7 -55,6 +56,7 @@@ obj-$(CONFIG_HID_THRUSTMASTER)        += hid-t
  obj-$(CONFIG_HID_TOPSEED)     += hid-topseed.o
  obj-$(CONFIG_HID_TWINHAN)     += hid-twinhan.o
  obj-$(CONFIG_HID_ZEROPLUS)    += hid-zpff.o
 +obj-$(CONFIG_HID_ZYDACRON)    += hid-zydacron.o
  obj-$(CONFIG_HID_WACOM)               += hid-wacom.o
  
  obj-$(CONFIG_USB_HID)         += usbhid/
diff --combined drivers/hid/hid-core.c
@@@ -653,9 -653,10 +653,9 @@@ int hid_parse_report(struct hid_device 
        if (device->driver->report_fixup)
                device->driver->report_fixup(device, start, size);
  
 -      device->rdesc = kmalloc(size, GFP_KERNEL);
 +      device->rdesc = kmemdup(start, size, GFP_KERNEL);
        if (device->rdesc == NULL)
                return -ENOMEM;
 -      memcpy(device->rdesc, start, size);
        device->rsize = size;
  
        parser = vmalloc(sizeof(struct hid_parser));
@@@ -939,8 -940,13 +939,8 @@@ static void hid_output_field(struct hid
        unsigned count = field->report_count;
        unsigned offset = field->report_offset;
        unsigned size = field->report_size;
 -      unsigned bitsused = offset + count * size;
        unsigned n;
  
 -      /* make sure the unused bits in the last byte are zeros */
 -      if (count > 0 && size > 0 && (bitsused % 8) != 0)
 -              data[(bitsused-1)/8] &= (1 << (bitsused % 8)) - 1;
 -
        for (n = 0; n < count; n++) {
                if (field->logical_minimum < 0) /* signed values */
                        implement(data, offset + n * size, size, s32ton(field->value[n], size));
@@@ -960,7 -966,6 +960,7 @@@ void hid_output_report(struct hid_repor
        if (report->id > 0)
                *data++ = report->id;
  
 +      memset(data, 0, ((report->size - 1) >> 3) + 1);
        for (n = 0; n < report->maxfield; n++)
                hid_output_field(report->field[n], data);
  }
@@@ -1038,8 -1043,13 +1038,8 @@@ void hid_report_raw_event(struct hid_de
  
        if ((hid->claimed & HID_CLAIMED_HIDDEV) && hid->hiddev_report_event)
                hid->hiddev_report_event(hid, report);
 -      if (hid->claimed & HID_CLAIMED_HIDRAW) {
 -              /* numbered reports need to be passed with the report num */
 -              if (report_enum->numbered)
 -                      hidraw_report_event(hid, data - 1, size + 1);
 -              else
 -                      hidraw_report_event(hid, data, size);
 -      }
 +      if (hid->claimed & HID_CLAIMED_HIDRAW)
 +              hidraw_report_event(hid, data, size);
  
        for (a = 0; a < report->maxfield; a++)
                hid_input_field(hid, report->field[a], cdata, interrupt);
@@@ -1081,28 -1091,35 +1081,28 @@@ int hid_input_report(struct hid_device 
  
        buf = kmalloc(sizeof(char) * HID_DEBUG_BUFSIZE, GFP_ATOMIC);
  
 -      if (!buf) {
 -              report = hid_get_report(report_enum, data);
 +      if (!buf)
                goto nomem;
 -      }
 -
 -      snprintf(buf, HID_DEBUG_BUFSIZE - 1,
 -                      "\nreport (size %u) (%snumbered)\n", size, report_enum->numbered ? "" : "un");
 -      hid_debug_event(hid, buf);
 -
 -      report = hid_get_report(report_enum, data);
 -      if (!report) {
 -              kfree(buf);
 -              return -1;
 -      }
  
        /* dump the report */
        snprintf(buf, HID_DEBUG_BUFSIZE - 1,
 -                      "report %d (size %u) = ", report->id, size);
 +                      "\nreport (size %u) (%snumbered) = ", size, report_enum->numbered ? "" : "un");
        hid_debug_event(hid, buf);
 +
        for (i = 0; i < size; i++) {
                snprintf(buf, HID_DEBUG_BUFSIZE - 1,
                                " %02x", data[i]);
                hid_debug_event(hid, buf);
        }
        hid_debug_event(hid, "\n");
 -
        kfree(buf);
  
  nomem:
 +      report = hid_get_report(report_enum, data);
 +
 +      if (!report)
 +              return -1;
 +
        if (hdrv && hdrv->raw_event && hid_match_report(hid, report)) {
                ret = hdrv->raw_event(hid, report, data, size);
                if (ret != 0)
@@@ -1155,8 -1172,6 +1155,8 @@@ int hid_connect(struct hid_device *hdev
        unsigned int i;
        int len;
  
 +      if (hdev->quirks & HID_QUIRK_HIDDEV_FORCE)
 +              connect_mask |= (HID_CONNECT_HIDDEV_FORCE | HID_CONNECT_HIDDEV);
        if (hdev->bus != BUS_USB)
                connect_mask &= ~HID_CONNECT_HIDDEV;
        if (hid_hiddev(hdev))
@@@ -1236,7 -1251,6 +1236,7 @@@ EXPORT_SYMBOL_GPL(hid_disconnect)
  /* a list of devices for which there is a specialized driver on HID bus */
  static const struct hid_device_id hid_blacklist[] = {
        { HID_USB_DEVICE(USB_VENDOR_ID_3M, USB_DEVICE_ID_3M1968) },
 +      { 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_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) },
        { 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_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_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_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_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_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_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_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_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_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) },
        { 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_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_ZYDACRON, USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL) },
  
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
        { }
@@@ -1754,7 -1762,7 +1755,7 @@@ int hid_add_device(struct hid_device *h
  
        /* we need to kill them here, otherwise they will stay allocated to
         * wait for coming driver */
 -      if (hid_ignore(hdev))
 +      if (!(hdev->quirks & HID_QUIRK_NO_IGNORE) && hid_ignore(hdev))
                return -ENODEV;
  
        /* XXX hack, any other cleaner solution after the driver core
        dev_set_name(&hdev->dev, "%04X:%04X:%04X.%04X", hdev->bus,
                     hdev->vendor, hdev->product, atomic_inc_return(&id));
  
 +      hid_debug_register(hdev, dev_name(&hdev->dev));
        ret = device_add(&hdev->dev);
        if (!ret)
                hdev->status |= HID_STAT_ADDED;
 -
 -      hid_debug_register(hdev, dev_name(&hdev->dev));
 +      else
 +              hid_debug_unregister(hdev);
  
        return ret;
  }
diff --combined drivers/hid/hid-ids.h
@@@ -20,7 -20,6 +20,7 @@@
  
  #define USB_VENDOR_ID_3M              0x0596
  #define USB_DEVICE_ID_3M1968          0x0500
 +#define USB_DEVICE_ID_3M2256          0x0502
  
  #define USB_VENDOR_ID_A4TECH          0x09da
  #define USB_DEVICE_ID_A4TECH_WCP32PU  0x0006
  #define USB_VENDOR_ID_BERKSHIRE               0x0c98
  #define USB_DEVICE_ID_BERKSHIRE_PCWD  0x1140
  
 +#define USB_VENDOR_ID_BTC             0x046e
 +#define USB_DEVICE_ID_BTC_EMPREX_REMOTE       0x5578
 +
 +#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_VENDOR_ID_CH              0x068e
  #define USB_DEVICE_ID_CH_PRO_PEDALS   0x00f2
  #define USB_DEVICE_ID_CH_COMBATSTICK  0x00f4
  
  #define USB_VENDOR_ID_CHERRY          0x046a
  #define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023
 +#define USB_DEVICE_ID_CHERRY_CYMOTION_SOLAR   0x0027
  
  #define USB_VENDOR_ID_CHIC            0x05fe
  #define USB_DEVICE_ID_CHIC_GAMEPAD    0x0014
  
  #define USB_VENDOR_ID_DRAGONRISE      0x0079
  
- #define USB_VENDOR_ID_EGALAX          0x0EEF
+ #define USB_VENDOR_ID_DWAV            0x0eef
 +#define USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER  0x0001
+ #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH  0x480d
  
  #define USB_VENDOR_ID_ELO             0x04E7
  #define USB_DEVICE_ID_ELO_TS2700      0x0020
  
  #define USB_VENDOR_ID_SAMSUNG         0x0419
  #define USB_DEVICE_ID_SAMSUNG_IR_REMOTE       0x0001
 +#define USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE      0x0600
  
  #define USB_VENDOR_ID_SONY                    0x054c
  #define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE     0x024b
  
  #define USB_VENDOR_ID_WACOM           0x056a
  #define USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH        0x81
 +#define USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH 0xbd
  
  #define USB_VENDOR_ID_WISEGROUP               0x0925
  #define USB_DEVICE_ID_SMARTJOY_PLUS   0x0005
  
  #define USB_VENDOR_ID_ZEROPLUS                0x0c12
  
 +#define USB_VENDOR_ID_ZYDACRON        0x13EC
 +#define USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL 0x0006
 +
  #define USB_VENDOR_ID_KYE             0x0458
  #define USB_DEVICE_ID_KYE_ERGO_525V   0x0087
  #define USB_DEVICE_ID_KYE_GPEN_560    0x5003
@@@ -33,7 -33,6 +33,7 @@@ 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_EGALAX, USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER, HID_QUIRK_MULTI_INPUT },
++      { USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH, 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 },