Revert "HID: core: move Usage Page concatenation to Main item"

This reverts commit 69f67200cf.

Test: CtsHardwareTestCases
  android.hardware.input.cts.tests.AsusGamepadTestCase#testAllKeys

fail: java.lang.AssertionError: Press BUTTON_A expected:<96> but
 was:<0>

Link: https://lkml.org/lkml/2019/6/13/1796

Change-Id: Icc2ceacdb7e398177628127277b00995f1b1da38
Signed-off-by: Bian Jin chen <kenjc.bian@rock-chips.com>
This commit is contained in:
Bian Jin chen
2019-11-11 11:52:57 +08:00
committed by Tao Huang
parent f6d4385501
commit 4f29b1cfa6
2 changed files with 12 additions and 25 deletions

View File

@@ -215,14 +215,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;
@@ -483,7 +482,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:
@@ -492,6 +494,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;
@@ -502,6 +507,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) {
/*
@@ -521,7 +529,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;
}
@@ -535,22 +543,6 @@ static int hid_parser_local(struct hid_parser *parser, struct hid_item *item)
return 0;
}
/*
* 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.
*/
@@ -560,8 +552,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) {
@@ -771,8 +761,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) {

View File

@@ -414,7 +414,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;