Commit c6b9e73f authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid:
  HID: avoid '\0' in hid debugfs events file
  HID: Add RGT Clutch Wheel clutch device id
  HID: ntrig: fix touch events
  HID: add quirk for UC-Logik WP4030 tablet
  HID: magicmouse: fix oops after device removal
parents 441f4058 e639ba48
...@@ -1357,6 +1357,7 @@ static const struct hid_device_id hid_blacklist[] = { ...@@ -1357,6 +1357,7 @@ static const struct hid_device_id hid_blacklist[] = {
{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb323) }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb323) },
{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb324) }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb324) },
{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651) }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651) },
{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb653) },
{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654) }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654) },
{ HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) }, { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) },
{ HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) }, { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) },
......
...@@ -564,10 +564,10 @@ void hid_debug_event(struct hid_device *hdev, char *buf) ...@@ -564,10 +564,10 @@ void hid_debug_event(struct hid_device *hdev, char *buf)
struct hid_debug_list *list; struct hid_debug_list *list;
list_for_each_entry(list, &hdev->debug_list, node) { list_for_each_entry(list, &hdev->debug_list, node) {
for (i = 0; i <= strlen(buf); i++) for (i = 0; i < strlen(buf); i++)
list->hid_debug_buf[(list->tail + i) % (HID_DEBUG_BUFSIZE - 1)] = list->hid_debug_buf[(list->tail + i) % HID_DEBUG_BUFSIZE] =
buf[i]; buf[i];
list->tail = (list->tail + i) % (HID_DEBUG_BUFSIZE - 1); list->tail = (list->tail + i) % HID_DEBUG_BUFSIZE;
} }
} }
EXPORT_SYMBOL_GPL(hid_debug_event); EXPORT_SYMBOL_GPL(hid_debug_event);
......
...@@ -445,6 +445,7 @@ ...@@ -445,6 +445,7 @@
#define USB_VENDOR_ID_UCLOGIC 0x5543 #define USB_VENDOR_ID_UCLOGIC 0x5543
#define USB_DEVICE_ID_UCLOGIC_TABLET_PF1209 0x0042 #define USB_DEVICE_ID_UCLOGIC_TABLET_PF1209 0x0042
#define USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U 0x0003
#define USB_VENDOR_ID_VERNIER 0x08f7 #define USB_VENDOR_ID_VERNIER 0x08f7
#define USB_DEVICE_ID_VERNIER_LABPRO 0x0001 #define USB_DEVICE_ID_VERNIER_LABPRO 0x0001
......
...@@ -353,7 +353,7 @@ static int magicmouse_probe(struct hid_device *hdev, ...@@ -353,7 +353,7 @@ static int magicmouse_probe(struct hid_device *hdev,
goto err_free; goto err_free;
} }
ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT & ~HID_CONNECT_HIDINPUT);
if (ret) { if (ret) {
dev_err(&hdev->dev, "magicmouse hw start failed\n"); dev_err(&hdev->dev, "magicmouse hw start failed\n");
goto err_free; goto err_free;
...@@ -409,8 +409,11 @@ static int magicmouse_probe(struct hid_device *hdev, ...@@ -409,8 +409,11 @@ static int magicmouse_probe(struct hid_device *hdev,
static void magicmouse_remove(struct hid_device *hdev) static void magicmouse_remove(struct hid_device *hdev)
{ {
struct magicmouse_sc *msc = hid_get_drvdata(hdev);
hid_hw_stop(hdev); hid_hw_stop(hdev);
kfree(hid_get_drvdata(hdev)); input_unregister_device(msc->input);
kfree(msc);
} }
static const struct hid_device_id magic_mice[] = { static const struct hid_device_id magic_mice[] = {
......
...@@ -140,6 +140,9 @@ static int ntrig_event (struct hid_device *hid, struct hid_field *field, ...@@ -140,6 +140,9 @@ static int ntrig_event (struct hid_device *hid, struct hid_field *field,
nd->reading_mt = 1; nd->reading_mt = 1;
nd->first_contact_confidence = 0; nd->first_contact_confidence = 0;
break; break;
case HID_DG_TIPSWITCH:
/* Prevent emission of touch until validated */
return 1;
case HID_DG_CONFIDENCE: case HID_DG_CONFIDENCE:
nd->confidence = value; nd->confidence = value;
break; break;
...@@ -259,6 +262,7 @@ static int ntrig_event (struct hid_device *hid, struct hid_field *field, ...@@ -259,6 +262,7 @@ static int ntrig_event (struct hid_device *hid, struct hid_field *field,
BTN_TOOL_TRIPLETAP, 0); BTN_TOOL_TRIPLETAP, 0);
input_report_key(input, input_report_key(input,
BTN_TOOL_QUADTAP, 0); BTN_TOOL_QUADTAP, 0);
input_report_key(input, BTN_TOUCH, 0);
} }
break; break;
...@@ -308,13 +312,20 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id) ...@@ -308,13 +312,20 @@ static int ntrig_probe(struct hid_device *hdev, const struct hid_device_id *id)
list_for_each_entry(hidinput, &hdev->inputs, list) { list_for_each_entry(hidinput, &hdev->inputs, list) {
if (hidinput->report->maxfield < 1)
continue;
input = hidinput->input; input = hidinput->input;
switch (hidinput->report->field[0]->application) { switch (hidinput->report->field[0]->application) {
case HID_DG_PEN: case HID_DG_PEN:
input->name = "N-Trig Pen"; input->name = "N-Trig Pen";
break; break;
case HID_DG_TOUCHSCREEN: case HID_DG_TOUCHSCREEN:
/* These keys are redundant for fingers, clear them
* to prevent incorrect identification */
__clear_bit(BTN_TOOL_PEN, input->keybit); __clear_bit(BTN_TOOL_PEN, input->keybit);
__clear_bit(BTN_TOOL_FINGER, input->keybit);
__clear_bit(BTN_0, input->keybit);
/* /*
* A little something special to enable * A little something special to enable
* two and three finger taps. * two and three finger taps.
......
...@@ -251,6 +251,8 @@ static const struct hid_device_id tm_devices[] = { ...@@ -251,6 +251,8 @@ static const struct hid_device_id tm_devices[] = {
.driver_data = (unsigned long)ff_rumble }, .driver_data = (unsigned long)ff_rumble },
{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651), /* FGT Rumble Force Wheel */ { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651), /* FGT Rumble Force Wheel */
.driver_data = (unsigned long)ff_rumble }, .driver_data = (unsigned long)ff_rumble },
{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb653), /* RGT Force Feedback CLUTCH Raging Wheel */
.driver_data = (unsigned long)ff_joystick },
{ HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654), /* FGT Force Feedback Wheel */ { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654), /* FGT Force Feedback Wheel */
.driver_data = (unsigned long)ff_joystick }, .driver_data = (unsigned long)ff_joystick },
{ } { }
......
...@@ -63,6 +63,7 @@ static const struct hid_blacklist { ...@@ -63,6 +63,7 @@ static const struct hid_blacklist {
{ USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET }, { USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD, HID_QUIRK_NOGET }, { USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD, HID_QUIRK_NOGET },
{ USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_PF1209, HID_QUIRK_MULTI_INPUT }, { USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_PF1209, HID_QUIRK_MULTI_INPUT },
{ USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U, HID_QUIRK_MULTI_INPUT },
{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS }, { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_DUAL_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS },
{ USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, { USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD, HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment