Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 63cd6303 authored by Prateek Sood's avatar Prateek Sood Committed by Gerrit - the friendly Code Review server
Browse files

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



This reverts commit 69f67200.

Upstream commit causes issue in report parsing leading to device
registration failure.

Resolved minor compiler error in changing unsigned to unsigned int.

Change-Id: I1491044d67239b6fdb0dd463440e93b979a57b9b
Signed-off-by: default avatarPrateek Sood <prsood@codeaurora.org>
parent ce8bff17
Loading
Loading
Loading
Loading
+12 −24
Original line number Diff line number Diff line
@@ -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 int 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) {
+0 −1
Original line number Diff line number Diff line
@@ -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;