diff options
author | Tingwei Zhang <tingwei@codeaurora.org> | 2019-09-10 13:58:33 +0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2019-09-11 03:55:00 -0700 |
commit | 1f01db5a42ccd3123517a9d5730024719abf095d (patch) | |
tree | a650c745ad7815d6cf7418d80e1c41550d124831 | |
parent | 1d1a62b9870023ec7faed6193eade1ecea20ea91 (diff) |
Revert "HID: core: move Usage Page concatenation to Main item"LA.UM.8.3.r1-05800-sdm845.0
This reverts commit 1410277e190084f1de51f8656215d508d9132086.
Upstream commit causes issue in report parsing leading to device
registration failure.
Change-Id: Ia1615c1330157de1d7583f60902552b888b95404
Signed-off-by: Tingwei Zhang <tingwei@codeaurora.org>
-rw-r--r-- | drivers/hid/hid-core.c | 36 | ||||
-rw-r--r-- | include/linux/hid.h | 1 |
2 files changed, 12 insertions, 25 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index d030731d2a51..81efba580279 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -200,14 +200,13 @@ static unsigned hid_lookup_collection(struct hid_parser *parser, unsigned type) * Add a usage to the temporary parser table. */ -static int hid_add_usage(struct hid_parser *parser, unsigned usage, u8 size) +static int hid_add_usage(struct hid_parser *parser, unsigned usage) { if (parser->local.usage_index >= HID_MAX_USAGES) { hid_err(parser->device, "usage index exceeded\n"); return -1; } parser->local.usage[parser->local.usage_index] = usage; - parser->local.usage_size[parser->local.usage_index] = size; parser->local.collection_index[parser->local.usage_index] = parser->collection_stack_ptr ? parser->collection_stack[parser->collection_stack_ptr - 1] : 0; @@ -464,7 +463,10 @@ static int hid_parser_local(struct hid_parser *parser, struct hid_item *item) return 0; } - return hid_add_usage(parser, data, item->size); + if (item->size <= 2) + data = (parser->global.usage_page << 16) + data; + + return hid_add_usage(parser, data); case HID_LOCAL_ITEM_TAG_USAGE_MINIMUM: @@ -473,6 +475,9 @@ static int hid_parser_local(struct hid_parser *parser, struct hid_item *item) return 0; } + if (item->size <= 2) + data = (parser->global.usage_page << 16) + data; + parser->local.usage_minimum = data; return 0; @@ -483,6 +488,9 @@ static int hid_parser_local(struct hid_parser *parser, struct hid_item *item) return 0; } + if (item->size <= 2) + data = (parser->global.usage_page << 16) + data; + count = data - parser->local.usage_minimum; if (count + parser->local.usage_index >= HID_MAX_USAGES) { /* @@ -502,7 +510,7 @@ static int hid_parser_local(struct hid_parser *parser, struct hid_item *item) } for (n = parser->local.usage_minimum; n <= data; n++) - if (hid_add_usage(parser, n, item->size)) { + if (hid_add_usage(parser, n)) { dbg_hid("hid_add_usage failed\n"); return -1; } @@ -517,22 +525,6 @@ static int hid_parser_local(struct hid_parser *parser, struct hid_item *item) } /* - * Concatenate Usage Pages into Usages where relevant: - * As per specification, 6.2.2.8: "When the parser encounters a main item it - * concatenates the last declared Usage Page with a Usage to form a complete - * usage value." - */ - -static void hid_concatenate_usage_page(struct hid_parser *parser) -{ - int i; - - for (i = 0; i < parser->local.usage_index; i++) - if (parser->local.usage_size[i] <= 2) - parser->local.usage[i] += parser->global.usage_page << 16; -} - -/* * Process a main item. */ @@ -541,8 +533,6 @@ static int hid_parser_main(struct hid_parser *parser, struct hid_item *item) __u32 data; int ret; - hid_concatenate_usage_page(parser); - data = item_udata(item); switch (item->tag) { @@ -756,8 +746,6 @@ static int hid_scan_main(struct hid_parser *parser, struct hid_item *item) __u32 data; int i; - hid_concatenate_usage_page(parser); - data = item_udata(item); switch (item->tag) { diff --git a/include/linux/hid.h b/include/linux/hid.h index 04bdf5477ec5..fab65b61d6d4 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h @@ -374,7 +374,6 @@ struct hid_global { struct hid_local { unsigned usage[HID_MAX_USAGES]; /* usage array */ - u8 usage_size[HID_MAX_USAGES]; /* usage size array */ unsigned collection_index[HID_MAX_USAGES]; /* collection index array */ unsigned usage_index; unsigned usage_minimum; |