Merge branches 'upstream', 'upstream-fixes' and 'debugfs' into for-linus
This commit is contained in:
@@ -44,12 +44,10 @@
|
||||
#define DRIVER_DESC "HID core driver"
|
||||
#define DRIVER_LICENSE "GPL"
|
||||
|
||||
#ifdef CONFIG_HID_DEBUG
|
||||
int hid_debug = 0;
|
||||
module_param_named(debug, hid_debug, int, 0600);
|
||||
MODULE_PARM_DESC(debug, "HID debugging (0=off, 1=probing info, 2=continuous data dumping)");
|
||||
MODULE_PARM_DESC(debug, "toggle HID debugging messages");
|
||||
EXPORT_SYMBOL_GPL(hid_debug);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Register a new report for a device.
|
||||
@@ -861,7 +859,7 @@ static void hid_process_event(struct hid_device *hid, struct hid_field *field,
|
||||
struct hid_driver *hdrv = hid->driver;
|
||||
int ret;
|
||||
|
||||
hid_dump_input(usage, value);
|
||||
hid_dump_input(hid, usage, value);
|
||||
|
||||
if (hdrv && hdrv->event && hid_match_usage(hid, usage)) {
|
||||
ret = hdrv->event(hid, field, usage, value);
|
||||
@@ -983,11 +981,10 @@ int hid_set_field(struct hid_field *field, unsigned offset, __s32 value)
|
||||
{
|
||||
unsigned size = field->report_size;
|
||||
|
||||
hid_dump_input(field->usage + offset, value);
|
||||
hid_dump_input(field->report->device, field->usage + offset, value);
|
||||
|
||||
if (offset >= field->report_count) {
|
||||
dbg_hid("offset (%d) exceeds report_count (%d)\n", offset, field->report_count);
|
||||
hid_dump_field(field, 8);
|
||||
return -1;
|
||||
}
|
||||
if (field->logical_minimum < 0) {
|
||||
@@ -1078,6 +1075,7 @@ int hid_input_report(struct hid_device *hid, int type, u8 *data, int size, int i
|
||||
struct hid_report_enum *report_enum;
|
||||
struct hid_driver *hdrv;
|
||||
struct hid_report *report;
|
||||
char *buf;
|
||||
unsigned int i;
|
||||
int ret;
|
||||
|
||||
@@ -1091,18 +1089,38 @@ int hid_input_report(struct hid_device *hid, int type, u8 *data, int size, int i
|
||||
return -1;
|
||||
}
|
||||
|
||||
dbg_hid("report (size %u) (%snumbered)\n", size, report_enum->numbered ? "" : "un");
|
||||
buf = kmalloc(sizeof(char) * HID_DEBUG_BUFSIZE,
|
||||
interrupt ? GFP_ATOMIC : GFP_KERNEL);
|
||||
|
||||
if (!buf) {
|
||||
report = hid_get_report(report_enum, data);
|
||||
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)
|
||||
if (!report) {
|
||||
kfree(buf);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* dump the report */
|
||||
dbg_hid("report %d (size %u) = ", report->id, size);
|
||||
for (i = 0; i < size; i++)
|
||||
dbg_hid_line(" %02x", data[i]);
|
||||
dbg_hid_line("\n");
|
||||
snprintf(buf, HID_DEBUG_BUFSIZE - 1,
|
||||
"report %d (size %u) = ", report->id, size);
|
||||
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:
|
||||
if (hdrv && hdrv->raw_event && hid_match_report(hid, report)) {
|
||||
ret = hdrv->raw_event(hid, report, data, size);
|
||||
if (ret != 0)
|
||||
@@ -1323,7 +1341,6 @@ static const struct hid_device_id hid_blacklist[] = {
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
|
||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },
|
||||
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, 0x030c) },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PRESENTER_8K_BT) },
|
||||
{ }
|
||||
};
|
||||
@@ -1730,6 +1747,8 @@ int hid_add_device(struct hid_device *hdev)
|
||||
if (!ret)
|
||||
hdev->status |= HID_STAT_ADDED;
|
||||
|
||||
hid_debug_register(hdev, dev_name(&hdev->dev));
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(hid_add_device);
|
||||
@@ -1766,6 +1785,9 @@ struct hid_device *hid_allocate_device(void)
|
||||
for (i = 0; i < HID_REPORT_TYPES; i++)
|
||||
INIT_LIST_HEAD(&hdev->report_enum[i].report_list);
|
||||
|
||||
init_waitqueue_head(&hdev->debug_wait);
|
||||
INIT_LIST_HEAD(&hdev->debug_list);
|
||||
|
||||
return hdev;
|
||||
err:
|
||||
put_device(&hdev->dev);
|
||||
@@ -1777,6 +1799,7 @@ static void hid_remove_device(struct hid_device *hdev)
|
||||
{
|
||||
if (hdev->status & HID_STAT_ADDED) {
|
||||
device_del(&hdev->dev);
|
||||
hid_debug_unregister(hdev);
|
||||
hdev->status &= ~HID_STAT_ADDED;
|
||||
}
|
||||
}
|
||||
@@ -1852,6 +1875,10 @@ static int __init hid_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (hid_debug)
|
||||
printk(KERN_WARNING "HID: hid_debug is now used solely for parser and driver debugging.\n"
|
||||
"HID: debugfs is now used for inspecting the device (report descriptor, reports)\n");
|
||||
|
||||
ret = bus_register(&hid_bus_type);
|
||||
if (ret) {
|
||||
printk(KERN_ERR "HID: can't register hid bus\n");
|
||||
@@ -1862,6 +1889,8 @@ static int __init hid_init(void)
|
||||
if (ret)
|
||||
goto err_bus;
|
||||
|
||||
hid_debug_init();
|
||||
|
||||
return 0;
|
||||
err_bus:
|
||||
bus_unregister(&hid_bus_type);
|
||||
@@ -1871,6 +1900,7 @@ err:
|
||||
|
||||
static void __exit hid_exit(void)
|
||||
{
|
||||
hid_debug_exit();
|
||||
hidraw_exit();
|
||||
bus_unregister(&hid_bus_type);
|
||||
}
|
||||
|
Reference in New Issue
Block a user