diff options
| -rw-r--r-- | drivers/hid/hid-core.c | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index c0ef2b49a00c..ebcc7a232a03 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
| @@ -90,7 +90,7 @@ static struct hid_field *hid_register_field(struct hid_report *report, unsigned | |||
| 90 | struct hid_field *field; | 90 | struct hid_field *field; |
| 91 | 91 | ||
| 92 | if (report->maxfield == HID_MAX_FIELDS) { | 92 | if (report->maxfield == HID_MAX_FIELDS) { |
| 93 | dbg_hid("too many fields in report\n"); | 93 | hid_err(report->device, "too many fields in report\n"); |
| 94 | return NULL; | 94 | return NULL; |
| 95 | } | 95 | } |
| 96 | 96 | ||
| @@ -121,7 +121,7 @@ static int open_collection(struct hid_parser *parser, unsigned type) | |||
| 121 | usage = parser->local.usage[0]; | 121 | usage = parser->local.usage[0]; |
| 122 | 122 | ||
| 123 | if (parser->collection_stack_ptr == HID_COLLECTION_STACK_SIZE) { | 123 | if (parser->collection_stack_ptr == HID_COLLECTION_STACK_SIZE) { |
| 124 | dbg_hid("collection stack overflow\n"); | 124 | hid_err(parser->device, "collection stack overflow\n"); |
| 125 | return -1; | 125 | return -1; |
| 126 | } | 126 | } |
| 127 | 127 | ||
| @@ -129,7 +129,7 @@ static int open_collection(struct hid_parser *parser, unsigned type) | |||
| 129 | collection = kmalloc(sizeof(struct hid_collection) * | 129 | collection = kmalloc(sizeof(struct hid_collection) * |
| 130 | parser->device->collection_size * 2, GFP_KERNEL); | 130 | parser->device->collection_size * 2, GFP_KERNEL); |
| 131 | if (collection == NULL) { | 131 | if (collection == NULL) { |
| 132 | dbg_hid("failed to reallocate collection array\n"); | 132 | hid_err(parser->device, "failed to reallocate collection array\n"); |
| 133 | return -1; | 133 | return -1; |
| 134 | } | 134 | } |
| 135 | memcpy(collection, parser->device->collection, | 135 | memcpy(collection, parser->device->collection, |
| @@ -165,7 +165,7 @@ static int open_collection(struct hid_parser *parser, unsigned type) | |||
| 165 | static int close_collection(struct hid_parser *parser) | 165 | static int close_collection(struct hid_parser *parser) |
| 166 | { | 166 | { |
| 167 | if (!parser->collection_stack_ptr) { | 167 | if (!parser->collection_stack_ptr) { |
| 168 | dbg_hid("collection stack underflow\n"); | 168 | hid_err(parser->device, "collection stack underflow\n"); |
| 169 | return -1; | 169 | return -1; |
| 170 | } | 170 | } |
| 171 | parser->collection_stack_ptr--; | 171 | parser->collection_stack_ptr--; |
| @@ -197,7 +197,7 @@ static unsigned hid_lookup_collection(struct hid_parser *parser, unsigned type) | |||
| 197 | static int hid_add_usage(struct hid_parser *parser, unsigned usage) | 197 | static int hid_add_usage(struct hid_parser *parser, unsigned usage) |
| 198 | { | 198 | { |
| 199 | if (parser->local.usage_index >= HID_MAX_USAGES) { | 199 | if (parser->local.usage_index >= HID_MAX_USAGES) { |
| 200 | dbg_hid("usage index exceeded\n"); | 200 | hid_err(parser->device, "usage index exceeded\n"); |
| 201 | return -1; | 201 | return -1; |
| 202 | } | 202 | } |
| 203 | parser->local.usage[parser->local.usage_index] = usage; | 203 | parser->local.usage[parser->local.usage_index] = usage; |
| @@ -222,12 +222,13 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign | |||
| 222 | 222 | ||
| 223 | report = hid_register_report(parser->device, report_type, parser->global.report_id); | 223 | report = hid_register_report(parser->device, report_type, parser->global.report_id); |
| 224 | if (!report) { | 224 | if (!report) { |
| 225 | dbg_hid("hid_register_report failed\n"); | 225 | hid_err(parser->device, "hid_register_report failed\n"); |
| 226 | return -1; | 226 | return -1; |
| 227 | } | 227 | } |
| 228 | 228 | ||
| 229 | if (parser->global.logical_maximum < parser->global.logical_minimum) { | 229 | if (parser->global.logical_maximum < parser->global.logical_minimum) { |
| 230 | dbg_hid("logical range invalid %d %d\n", parser->global.logical_minimum, parser->global.logical_maximum); | 230 | hid_err(parser->device, "logical range invalid %d %d\n", |
| 231 | parser->global.logical_minimum, parser->global.logical_maximum); | ||
| 231 | return -1; | 232 | return -1; |
| 232 | } | 233 | } |
| 233 | 234 | ||
| @@ -307,7 +308,7 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item) | |||
| 307 | case HID_GLOBAL_ITEM_TAG_PUSH: | 308 | case HID_GLOBAL_ITEM_TAG_PUSH: |
| 308 | 309 | ||
| 309 | if (parser->global_stack_ptr == HID_GLOBAL_STACK_SIZE) { | 310 | if (parser->global_stack_ptr == HID_GLOBAL_STACK_SIZE) { |
| 310 | dbg_hid("global environment stack overflow\n"); | 311 | hid_err(parser->device, "global environment stack overflow\n"); |
| 311 | return -1; | 312 | return -1; |
| 312 | } | 313 | } |
| 313 | 314 | ||
| @@ -318,7 +319,7 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item) | |||
| 318 | case HID_GLOBAL_ITEM_TAG_POP: | 319 | case HID_GLOBAL_ITEM_TAG_POP: |
| 319 | 320 | ||
| 320 | if (!parser->global_stack_ptr) { | 321 | if (!parser->global_stack_ptr) { |
| 321 | dbg_hid("global environment stack underflow\n"); | 322 | hid_err(parser->device, "global environment stack underflow\n"); |
| 322 | return -1; | 323 | return -1; |
| 323 | } | 324 | } |
| 324 | 325 | ||
| @@ -363,7 +364,7 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item) | |||
| 363 | case HID_GLOBAL_ITEM_TAG_REPORT_SIZE: | 364 | case HID_GLOBAL_ITEM_TAG_REPORT_SIZE: |
| 364 | parser->global.report_size = item_udata(item); | 365 | parser->global.report_size = item_udata(item); |
| 365 | if (parser->global.report_size > 96) { | 366 | if (parser->global.report_size > 96) { |
| 366 | dbg_hid("invalid report_size %d\n", | 367 | hid_err(parser->device, "invalid report_size %d\n", |
| 367 | parser->global.report_size); | 368 | parser->global.report_size); |
| 368 | return -1; | 369 | return -1; |
| 369 | } | 370 | } |
| @@ -372,7 +373,7 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item) | |||
| 372 | case HID_GLOBAL_ITEM_TAG_REPORT_COUNT: | 373 | case HID_GLOBAL_ITEM_TAG_REPORT_COUNT: |
| 373 | parser->global.report_count = item_udata(item); | 374 | parser->global.report_count = item_udata(item); |
| 374 | if (parser->global.report_count > HID_MAX_USAGES) { | 375 | if (parser->global.report_count > HID_MAX_USAGES) { |
| 375 | dbg_hid("invalid report_count %d\n", | 376 | hid_err(parser->device, "invalid report_count %d\n", |
| 376 | parser->global.report_count); | 377 | parser->global.report_count); |
| 377 | return -1; | 378 | return -1; |
| 378 | } | 379 | } |
| @@ -381,13 +382,13 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item) | |||
| 381 | case HID_GLOBAL_ITEM_TAG_REPORT_ID: | 382 | case HID_GLOBAL_ITEM_TAG_REPORT_ID: |
| 382 | parser->global.report_id = item_udata(item); | 383 | parser->global.report_id = item_udata(item); |
| 383 | if (parser->global.report_id == 0) { | 384 | if (parser->global.report_id == 0) { |
| 384 | dbg_hid("report_id 0 is invalid\n"); | 385 | hid_err(parser->device, "report_id 0 is invalid\n"); |
| 385 | return -1; | 386 | return -1; |
| 386 | } | 387 | } |
| 387 | return 0; | 388 | return 0; |
| 388 | 389 | ||
| 389 | default: | 390 | default: |
| 390 | dbg_hid("unknown global tag 0x%x\n", item->tag); | 391 | hid_err(parser->device, "unknown global tag 0x%x\n", item->tag); |
| 391 | return -1; | 392 | return -1; |
| 392 | } | 393 | } |
| 393 | } | 394 | } |
| @@ -414,14 +415,14 @@ static int hid_parser_local(struct hid_parser *parser, struct hid_item *item) | |||
| 414 | * items and the first delimiter set. | 415 | * items and the first delimiter set. |
| 415 | */ | 416 | */ |
| 416 | if (parser->local.delimiter_depth != 0) { | 417 | if (parser->local.delimiter_depth != 0) { |
| 417 | dbg_hid("nested delimiters\n"); | 418 | hid_err(parser->device, "nested delimiters\n"); |
| 418 | return -1; | 419 | return -1; |
| 419 | } | 420 | } |
| 420 | parser->local.delimiter_depth++; | 421 | parser->local.delimiter_depth++; |
| 421 | parser->local.delimiter_branch++; | 422 | parser->local.delimiter_branch++; |
| 422 | } else { | 423 | } else { |
| 423 | if (parser->local.delimiter_depth < 1) { | 424 | if (parser->local.delimiter_depth < 1) { |
| 424 | dbg_hid("bogus close delimiter\n"); | 425 | hid_err(parser->device, "bogus close delimiter\n"); |
| 425 | return -1; | 426 | return -1; |
| 426 | } | 427 | } |
| 427 | parser->local.delimiter_depth--; | 428 | parser->local.delimiter_depth--; |
| @@ -506,7 +507,7 @@ static int hid_parser_main(struct hid_parser *parser, struct hid_item *item) | |||
| 506 | ret = hid_add_field(parser, HID_FEATURE_REPORT, data); | 507 | ret = hid_add_field(parser, HID_FEATURE_REPORT, data); |
| 507 | break; | 508 | break; |
| 508 | default: | 509 | default: |
| 509 | dbg_hid("unknown main item tag 0x%x\n", item->tag); | 510 | hid_err(parser->device, "unknown main item tag 0x%x\n", item->tag); |
| 510 | ret = 0; | 511 | ret = 0; |
| 511 | } | 512 | } |
| 512 | 513 | ||
| @@ -678,12 +679,12 @@ int hid_parse_report(struct hid_device *device, __u8 *start, | |||
| 678 | while ((start = fetch_item(start, end, &item)) != NULL) { | 679 | while ((start = fetch_item(start, end, &item)) != NULL) { |
| 679 | 680 | ||
| 680 | if (item.format != HID_ITEM_FORMAT_SHORT) { | 681 | if (item.format != HID_ITEM_FORMAT_SHORT) { |
| 681 | dbg_hid("unexpected long global item\n"); | 682 | hid_err(device, "unexpected long global item\n"); |
| 682 | goto err; | 683 | goto err; |
| 683 | } | 684 | } |
| 684 | 685 | ||
| 685 | if (dispatch_type[item.type](parser, &item)) { | 686 | if (dispatch_type[item.type](parser, &item)) { |
| 686 | dbg_hid("item %u %u %u %u parsing failed\n", | 687 | hid_err(device, "item %u %u %u %u parsing failed\n", |
| 687 | item.format, (unsigned)item.size, | 688 | item.format, (unsigned)item.size, |
| 688 | (unsigned)item.type, (unsigned)item.tag); | 689 | (unsigned)item.type, (unsigned)item.tag); |
| 689 | goto err; | 690 | goto err; |
| @@ -691,11 +692,11 @@ int hid_parse_report(struct hid_device *device, __u8 *start, | |||
| 691 | 692 | ||
| 692 | if (start == end) { | 693 | if (start == end) { |
| 693 | if (parser->collection_stack_ptr) { | 694 | if (parser->collection_stack_ptr) { |
| 694 | dbg_hid("unbalanced collection at end of report description\n"); | 695 | hid_err(device, "unbalanced collection at end of report description\n"); |
| 695 | goto err; | 696 | goto err; |
| 696 | } | 697 | } |
| 697 | if (parser->local.delimiter_depth) { | 698 | if (parser->local.delimiter_depth) { |
| 698 | dbg_hid("unbalanced delimiter at end of report description\n"); | 699 | hid_err(device, "unbalanced delimiter at end of report description\n"); |
| 699 | goto err; | 700 | goto err; |
| 700 | } | 701 | } |
| 701 | vfree(parser); | 702 | vfree(parser); |
| @@ -703,7 +704,7 @@ int hid_parse_report(struct hid_device *device, __u8 *start, | |||
| 703 | } | 704 | } |
| 704 | } | 705 | } |
| 705 | 706 | ||
| 706 | dbg_hid("item fetching failed at offset %d\n", (int)(end - start)); | 707 | hid_err(device, "item fetching failed at offset %d\n", (int)(end - start)); |
| 707 | err: | 708 | err: |
| 708 | vfree(parser); | 709 | vfree(parser); |
| 709 | return ret; | 710 | return ret; |
| @@ -873,7 +874,7 @@ static void hid_process_event(struct hid_device *hid, struct hid_field *field, | |||
| 873 | ret = hdrv->event(hid, field, usage, value); | 874 | ret = hdrv->event(hid, field, usage, value); |
| 874 | if (ret != 0) { | 875 | if (ret != 0) { |
| 875 | if (ret < 0) | 876 | if (ret < 0) |
| 876 | dbg_hid("%s's event failed with %d\n", | 877 | hid_err(hid, "%s's event failed with %d\n", |
| 877 | hdrv->name, ret); | 878 | hdrv->name, ret); |
| 878 | return; | 879 | return; |
| 879 | } | 880 | } |
| @@ -995,12 +996,13 @@ int hid_set_field(struct hid_field *field, unsigned offset, __s32 value) | |||
| 995 | hid_dump_input(field->report->device, field->usage + offset, value); | 996 | hid_dump_input(field->report->device, field->usage + offset, value); |
| 996 | 997 | ||
| 997 | if (offset >= field->report_count) { | 998 | if (offset >= field->report_count) { |
| 998 | dbg_hid("offset (%d) exceeds report_count (%d)\n", offset, field->report_count); | 999 | hid_err(field->report->device, "offset (%d) exceeds report_count (%d)\n", |
| 1000 | offset, field->report_count); | ||
| 999 | return -1; | 1001 | return -1; |
| 1000 | } | 1002 | } |
| 1001 | if (field->logical_minimum < 0) { | 1003 | if (field->logical_minimum < 0) { |
| 1002 | if (value != snto32(s32ton(value, size), size)) { | 1004 | if (value != snto32(s32ton(value, size), size)) { |
| 1003 | dbg_hid("value %d is out of range\n", value); | 1005 | hid_err(field->report->device, "value %d is out of range\n", value); |
| 1004 | return -1; | 1006 | return -1; |
| 1005 | } | 1007 | } |
| 1006 | } | 1008 | } |
