forked from Minki/linux
HID: core: store the collections as a basic tree
For each collection parsed, store a pointer to the parent collection (if any). This makes it a lot easier to look up which collection(s) any given item is part of Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Verified-by: Harry Cutts <hcutts@chromium.org> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
This commit is contained in:
parent
52ea899637
commit
c53431eb69
@ -172,6 +172,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 = parser->active_collection;
|
||||
parser->active_collection = collection;
|
||||
|
||||
if (type == HID_COLLECTION_APPLICATION)
|
||||
parser->device->maxapplication++;
|
||||
@ -190,6 +192,8 @@ static int close_collection(struct hid_parser *parser)
|
||||
return -EINVAL;
|
||||
}
|
||||
parser->collection_stack_ptr--;
|
||||
if (parser->active_collection)
|
||||
parser->active_collection = parser->active_collection->parent;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -427,6 +427,7 @@ struct hid_local {
|
||||
*/
|
||||
|
||||
struct hid_collection {
|
||||
struct hid_collection *parent;
|
||||
unsigned type;
|
||||
unsigned usage;
|
||||
unsigned level;
|
||||
@ -650,6 +651,7 @@ struct hid_parser {
|
||||
unsigned int *collection_stack;
|
||||
unsigned int collection_stack_ptr;
|
||||
unsigned int collection_stack_size;
|
||||
struct hid_collection *active_collection;
|
||||
struct hid_device *device;
|
||||
unsigned int scan_flags;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user