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
This commit is contained in:
@@ -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)
|
|||||||
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 @@
|
|||||||
|
|
||||||
#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,
|
|||||||
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 @@ err_free:
|
|||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
|
|
||||||
|
|
||||||
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[] = {
|
|||||||
.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 {
|
|||||||
{ 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 },
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user