]> Pileus Git - ~andy/linux/commitdiff
Merge branches 'for-3.10/wiimote' and 'for-3.9/upstream-fixes' into for-linus
authorJiri Kosina <jkosina@suse.cz>
Tue, 30 Apr 2013 08:19:21 +0000 (10:19 +0200)
committerJiri Kosina <jkosina@suse.cz>
Tue, 30 Apr 2013 08:19:21 +0000 (10:19 +0200)
1  2 
drivers/hid/hid-core.c
drivers/hid/hid-ids.h

diff --combined drivers/hid/hid-core.c
index 98dd6ab9aa279cbed74f4a151bb94855eaa1a662,eb0309eae7b976f6a1fb781f24c7cb699a1214d0..6961bbeab3edb0c9a75767865c87bc2a6a6b4386
@@@ -728,7 -728,8 +728,7 @@@ static int hid_scan_report(struct hid_d
                } else if (page == HID_UP_SENSOR &&
                        item.type == HID_ITEM_TYPE_MAIN &&
                        item.tag == HID_MAIN_ITEM_TAG_BEGIN_COLLECTION &&
 -                      (item_udata(&item) & 0xff) == HID_COLLECTION_PHYSICAL &&
 -                      (hid->bus == BUS_USB || hid->bus == BUS_I2C))
 +                      (item_udata(&item) & 0xff) == HID_COLLECTION_PHYSICAL)
                        hid->group = HID_GROUP_SENSOR_HUB;
        }
  
@@@ -1259,12 -1260,14 +1259,12 @@@ int hid_input_report(struct hid_device 
        struct hid_report_enum *report_enum;
        struct hid_driver *hdrv;
        struct hid_report *report;
 -      char *buf;
 -      unsigned int i;
        int ret = 0;
  
        if (!hid)
                return -ENODEV;
  
 -      if (down_trylock(&hid->driver_lock))
 +      if (down_trylock(&hid->driver_input_lock))
                return -EBUSY;
  
        if (!hid->driver) {
        }
  
        /* Avoid unnecessary overhead if debugfs is disabled */
 -      if (list_empty(&hid->debug_list))
 -              goto nomem;
 -
 -      buf = kmalloc(sizeof(char) * HID_DEBUG_BUFSIZE, GFP_ATOMIC);
 -
 -      if (!buf)
 -              goto nomem;
 -
 -      /* dump the report */
 -      snprintf(buf, HID_DEBUG_BUFSIZE - 1,
 -                      "\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);
 +      if (!list_empty(&hid->debug_list))
 +              hid_dump_report(hid, type, data, size);
  
 -nomem:
        report = hid_get_report(report_enum, data);
  
        if (!report) {
        ret = hid_report_raw_event(hid, type, data, size, interrupt);
  
  unlock:
 -      up(&hid->driver_lock);
 +      up(&hid->driver_input_lock);
        return ret;
  }
  EXPORT_SYMBOL_GPL(hid_input_report);
@@@ -1480,6 -1502,8 +1480,6 @@@ 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_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_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL2) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL3) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL5) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_COMFORT_MOUSE_4500) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_SIDEWINDER_GV) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_NE4K_JP) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_LK6K) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_USB) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_DIGITAL_MEDIA_3K) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ARVO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKU) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPLUS) },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPURE) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KOVAPLUS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_LUA) },
        { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRED) },
  
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
        { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE) },
+       { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_NINTENDO, USB_DEVICE_ID_NINTENDO_WIIMOTE2) },
        { }
  };
  
@@@ -1828,11 -1846,6 +1829,11 @@@ static int hid_device_probe(struct devi
  
        if (down_interruptible(&hdev->driver_lock))
                return -EINTR;
 +      if (down_interruptible(&hdev->driver_input_lock)) {
 +              ret = -EINTR;
 +              goto unlock_driver_lock;
 +      }
 +      hdev->io_started = false;
  
        if (!hdev->driver) {
                id = hid_match_device(hdev, hdrv);
                }
        }
  unlock:
 +      if (!hdev->io_started)
 +              up(&hdev->driver_input_lock);
 +unlock_driver_lock:
        up(&hdev->driver_lock);
        return ret;
  }
@@@ -1866,15 -1876,9 +1867,15 @@@ static int hid_device_remove(struct dev
  {
        struct hid_device *hdev = container_of(dev, struct hid_device, dev);
        struct hid_driver *hdrv;
 +      int ret = 0;
  
        if (down_interruptible(&hdev->driver_lock))
                return -EINTR;
 +      if (down_interruptible(&hdev->driver_input_lock)) {
 +              ret = -EINTR;
 +              goto unlock_driver_lock;
 +      }
 +      hdev->io_started = false;
  
        hdrv = hdev->driver;
        if (hdrv) {
                hdev->driver = NULL;
        }
  
 +      if (!hdev->io_started)
 +              up(&hdev->driver_input_lock);
 +unlock_driver_lock:
        up(&hdev->driver_lock);
 -      return 0;
 +      return ret;
  }
  
  static ssize_t modalias_show(struct device *dev, struct device_attribute *a,
@@@ -2077,6 -2078,7 +2078,6 @@@ static const struct hid_device_id hid_i
        { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HYBRID) },
        { HID_USB_DEVICE(USB_VENDOR_ID_LD, USB_DEVICE_ID_LD_HEATCONTROL) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_BEATPAD) },
 -      { HID_USB_DEVICE(USB_VENDOR_ID_MASTERKIT, USB_DEVICE_ID_MASTERKIT_MA901RADIO) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1024LS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MCC, USB_DEVICE_ID_MCC_PMD1208LS) },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_PICKIT1) },
@@@ -2243,18 -2245,6 +2244,18 @@@ bool hid_ignore(struct hid_device *hdev
                     hdev->product <= USB_DEVICE_ID_VELLEMAN_K8061_LAST))
                        return true;
                break;
 +      case USB_VENDOR_ID_ATMEL_V_USB:
 +              /* Masterkit MA901 usb radio based on Atmel tiny85 chip and
 +               * it has the same USB ID as many Atmel V-USB devices. This
 +               * usb radio is handled by radio-ma901.c driver so we want
 +               * ignore the hid. Check the name, bus, product and ignore
 +               * if we have MA901 usb radio.
 +               */
 +              if (hdev->product == USB_DEVICE_ID_ATMEL_V_USB &&
 +                      hdev->bus == BUS_USB &&
 +                      strncmp(hdev->name, "www.masterkit.ru MA901", 22) == 0)
 +                      return true;
 +              break;
        }
  
        if (hdev->type == HID_TYPE_USBMOUSE &&
@@@ -2340,9 -2330,7 +2341,9 @@@ struct hid_device *hid_allocate_device(
  
        init_waitqueue_head(&hdev->debug_wait);
        INIT_LIST_HEAD(&hdev->debug_list);
 +      mutex_init(&hdev->debug_list_lock);
        sema_init(&hdev->driver_lock, 1);
 +      sema_init(&hdev->driver_input_lock, 1);
  
        return hdev;
  }
diff --combined drivers/hid/hid-ids.h
index 61bea32b6ab5c49117e8ced2e91d1ff00521795e,4905346b03f8c4eb15d408e0c671840f6d16635f..38535c9243d532b36d8cd321638fd4f2aeabb9c4
  #define USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO   0x0256
  #define USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY  0x030a
  #define USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY   0x030b
 -#define USB_DEVICE_ID_APPLE_ATV_IRCONTROL     0x8241
 +#define USB_DEVICE_ID_APPLE_IRCONTROL 0x8240
 +#define USB_DEVICE_ID_APPLE_IRCONTROL2        0x1440
 +#define USB_DEVICE_ID_APPLE_IRCONTROL3        0x8241
  #define USB_DEVICE_ID_APPLE_IRCONTROL4        0x8242
 +#define USB_DEVICE_ID_APPLE_IRCONTROL5        0x8243
  
  #define USB_VENDOR_ID_ASUS            0x0486
  #define USB_DEVICE_ID_ASUS_T91MT      0x0185
  #define USB_VENDOR_ID_ATMEL           0x03eb
  #define USB_DEVICE_ID_ATMEL_MULTITOUCH        0x211c
  #define USB_DEVICE_ID_ATMEL_MXT_DIGITIZER     0x2118
 +#define USB_VENDOR_ID_ATMEL_V_USB     0x16c0
 +#define USB_DEVICE_ID_ATMEL_V_USB     0x05df
  
  #define USB_VENDOR_ID_AUREAL          0x0755
  #define USB_DEVICE_ID_AUREAL_W01RN    0x2626
  #define USB_VENDOR_ID_MADCATZ         0x0738
  #define USB_DEVICE_ID_MADCATZ_BEATPAD 0x4540
  
 -#define USB_VENDOR_ID_MASTERKIT                       0x16c0
 -#define USB_DEVICE_ID_MASTERKIT_MA901RADIO    0x05df
 -
  #define USB_VENDOR_ID_MCC             0x09db
  #define USB_DEVICE_ID_MCC_PMD1024LS   0x0076
  #define USB_DEVICE_ID_MCC_PMD1208LS   0x007a
  #define USB_DEVICE_ID_SIDEWINDER_GV   0x003b
  #define USB_DEVICE_ID_WIRELESS_OPTICAL_DESKTOP_3_0 0x009d
  #define USB_DEVICE_ID_MS_NE4K         0x00db
 +#define USB_DEVICE_ID_MS_NE4K_JP      0x00dc
  #define USB_DEVICE_ID_MS_LK6K         0x00f9
  #define USB_DEVICE_ID_MS_PRESENTER_8K_BT      0x0701
  #define USB_DEVICE_ID_MS_PRESENTER_8K_USB     0x0713
  
  #define USB_VENDOR_ID_NINTENDO                0x057e
  #define USB_DEVICE_ID_NINTENDO_WIIMOTE        0x0306
+ #define USB_DEVICE_ID_NINTENDO_WIIMOTE2       0x0330
  
  #define USB_VENDOR_ID_NOVATEK         0x0603
  #define USB_DEVICE_ID_NOVATEK_PCT     0x0600
  #define USB_VENDOR_ID_ROCCAT          0x1e7d
  #define USB_DEVICE_ID_ROCCAT_ARVO     0x30d4
  #define USB_DEVICE_ID_ROCCAT_ISKU     0x319c
 +#define USB_DEVICE_ID_ROCCAT_ISKUFX   0x3264
  #define USB_DEVICE_ID_ROCCAT_KONE     0x2ced
  #define USB_DEVICE_ID_ROCCAT_KONEPLUS 0x2d51
 +#define USB_DEVICE_ID_ROCCAT_KONEPURE 0x2dbe
  #define USB_DEVICE_ID_ROCCAT_KONEXTD  0x2e22
  #define USB_DEVICE_ID_ROCCAT_KOVAPLUS 0x2d50
  #define USB_DEVICE_ID_ROCCAT_LUA      0x2c2e