Merge branches 'for-3.18/upstream-fixes' and 'for-3.19/upstream' into for-linus
authorJiri Kosina <jkosina@suse.cz>
Fri, 12 Dec 2014 10:09:23 +0000 (11:09 +0100)
committerJiri Kosina <jkosina@suse.cz>
Fri, 12 Dec 2014 10:09:23 +0000 (11:09 +0100)
Conflicts:
drivers/hid/hid-input.c

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

diff --combined drivers/hid/hid-core.c
@@@@ -779,16 -779,16 -779,6 +779,6 @@@@ static int hid_scan_report(struct hid_d
            (hid->group == HID_GROUP_MULTITOUCH))
                hid->group = HID_GROUP_MULTITOUCH_WIN_8;
   
--      /*
--      * Vendor specific handlings
--      */
--      if ((hid->vendor == USB_VENDOR_ID_SYNAPTICS) &&
--          (hid->group == HID_GROUP_GENERIC) &&
--          /* only bind to the mouse interface of composite USB devices */
--          (hid->bus != BUS_USB || hid->type == HID_TYPE_USBMOUSE))
--              /* hid-rmi should take care of them, not hid-generic */
--              hid->group = HID_GROUP_RMI;
-- 
        /*
         * Vendor specific handlings
         */
        case USB_VENDOR_ID_WACOM:
                hid->group = HID_GROUP_WACOM;
                break;
++      case USB_VENDOR_ID_SYNAPTICS:
++              if ((hid->group == HID_GROUP_GENERIC) &&
++                  (hid->bus != BUS_USB || hid->type == HID_TYPE_USBMOUSE))
++                      /* hid-rmi should only bind to the mouse interface of
++                       * composite USB devices */
++                      hid->group = HID_GROUP_RMI;
++              break;
        }
   
        vfree(parser);
@@@@ -1659,7 -1659,7 -1656,6 +1656,7 @@@@ void hid_disconnect(struct hid_device *
                hdev->hiddev_disconnect(hdev);
        if (hdev->claimed & HID_CLAIMED_HIDRAW)
                hidraw_disconnect(hdev);
  +     hdev->claimed = 0;
   }
   EXPORT_SYMBOL_GPL(hid_disconnect);
   
@@@@ -1910,6 -1910,6 -1906,7 +1907,7 @@@@ static const struct hid_device_id hid_h
        { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_PS1000) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RAT7) },
        { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_MMO7) },
++      { HID_USB_DEVICE(USB_VENDOR_ID_MADCATZ, USB_DEVICE_ID_MADCATZ_RAT9) },
   #endif
        { 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) },
@@@@ -2539,7 -2539,7 -2536,8 +2537,8 @@@@ int hid_add_device(struct hid_device *h
         * Scan generic devices for group information
         */
        if (hid_ignore_special_drivers ||
--          !hid_match_id(hdev, hid_have_special_driver)) {
++          (!hdev->group &&
++           !hid_match_id(hdev, hid_have_special_driver))) {
                ret = hid_scan_report(hdev);
                if (ret)
                        hid_warn(hdev, "bad device descriptor (%d)\n", ret);
diff --combined drivers/hid/hid-ids.h
   
   #define USB_VENDOR_ID_ELAN           0x04f3
   #define USB_DEVICE_ID_ELAN_TOUCHSCREEN       0x0089
  +#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_009B  0x009b
  +#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_0103  0x0103
 ++#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_010c  0x010c
  +#define USB_DEVICE_ID_ELAN_TOUCHSCREEN_016F  0x016f
   
   #define USB_VENDOR_ID_ELECOM         0x056e
   #define USB_DEVICE_ID_ELECOM_BM084   0x0061
   
   #define USB_VENDOR_ID_MADCATZ                0x0738
   #define USB_DEVICE_ID_MADCATZ_BEATPAD        0x4540
++ #define USB_DEVICE_ID_MADCATZ_RAT9   0x1709
   
   #define USB_VENDOR_ID_MCC            0x09db
   #define USB_DEVICE_ID_MCC_PMD1024LS  0x0076
diff --combined drivers/hid/hid-input.c
@@@@ -695,10 -695,10 -695,7 +695,10 @@@@ static void hidinput_configure_usage(st
                        break;
   
                case 0x5b: /* TransducerSerialNumber */
  -                     set_bit(MSC_SERIAL, input->mscbit);
  +                     usage->type = EV_MSC;
  +                     usage->code = MSC_SERIAL;
  +                     bit = input->mscbit;
  +                     max = MSC_MAX;
                        break;
   
                default:  goto unknown;
                case 0x28b: map_key_clear(KEY_FORWARDMAIL);     break;
                case 0x28c: map_key_clear(KEY_SEND);            break;
   
--              default:    goto ignore;
  +             case 0x2c7: map_key_clear(KEY_KBDINPUTASSIST_PREV);             break;
  +             case 0x2c8: map_key_clear(KEY_KBDINPUTASSIST_NEXT);             break;
  +             case 0x2c9: map_key_clear(KEY_KBDINPUTASSIST_PREVGROUP);                break;
  +             case 0x2ca: map_key_clear(KEY_KBDINPUTASSIST_NEXTGROUP);                break;
  +             case 0x2cb: map_key_clear(KEY_KBDINPUTASSIST_ACCEPT);   break;
  +             case 0x2cc: map_key_clear(KEY_KBDINPUTASSIST_CANCEL);   break;
  +
++              default: map_key_clear(KEY_UNKNOWN);
                }
                break;