summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Zabel <philipp.zabel@gmail.com>2019-01-14 08:19:22 +0100
committerBenjamin Tissoires <benjamin.tissoires@redhat.com>2019-01-16 14:29:48 +0100
commit1950f462916edc9581168ca8d5882a8101e8bbcf (patch)
tree866de4ed3a30a68635f0d49b433c82ea175df50b
parent77ae0d8e401f083ca69c202502da4fc0e38cb1b7 (diff)
HID: core: simplify active collection tracking
Manually tracking an active collection to set collection parents is not necessary, we just have to look one step back into the collection stack to find the correct parent. Signed-off-by: Philipp Zabel <philipp.zabel@gmail.com> Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
-rw-r--r--drivers/hid/hid-core.c13
-rw-r--r--include/linux/hid.h1
2 files changed, 2 insertions, 12 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index f9093dedf647..9993b692598f 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -173,8 +173,8 @@ static int open_collection(struct hid_parser *parser, unsigned type)
collection->type = type;
collection->usage = usage;
collection->level = parser->collection_stack_ptr - 1;
- collection->parent_idx = parser->active_collection_idx;
- parser->active_collection_idx = collection_index;
+ collection->parent_idx = (collection->level == 0) ? -1 :
+ parser->collection_stack[collection->level - 1];
if (type == HID_COLLECTION_APPLICATION)
parser->device->maxapplication++;
@@ -193,13 +193,6 @@ static int close_collection(struct hid_parser *parser)
return -EINVAL;
}
parser->collection_stack_ptr--;
- if (parser->active_collection_idx != -1) {
- struct hid_device *device = parser->device;
- struct hid_collection *c;
-
- c = &device->collection[parser->active_collection_idx];
- parser->active_collection_idx = c->parent_idx;
- }
return 0;
}
@@ -825,7 +818,6 @@ static int hid_scan_report(struct hid_device *hid)
return -ENOMEM;
parser->device = hid;
- parser->active_collection_idx = -1;
hid->group = HID_GROUP_GENERIC;
/*
@@ -1179,7 +1171,6 @@ int hid_open_report(struct hid_device *device)
}
parser->device = device;
- parser->active_collection_idx = -1;
end = start + size;
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 992bbb7196df..f9707d1dcb58 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -658,7 +658,6 @@ struct hid_parser {
unsigned int *collection_stack;
unsigned int collection_stack_ptr;
unsigned int collection_stack_size;
- int active_collection_idx; /* device->collection */
struct hid_device *device;
unsigned int scan_flags;
};