forked from mirrors/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
					
				
					 2 changed files with 6 additions and 0 deletions
				
			
		| 
						 | 
					@ -172,6 +172,8 @@ static int open_collection(struct hid_parser *parser, unsigned type)
 | 
				
			||||||
	collection->type = type;
 | 
						collection->type = type;
 | 
				
			||||||
	collection->usage = usage;
 | 
						collection->usage = usage;
 | 
				
			||||||
	collection->level = parser->collection_stack_ptr - 1;
 | 
						collection->level = parser->collection_stack_ptr - 1;
 | 
				
			||||||
 | 
						collection->parent = parser->active_collection;
 | 
				
			||||||
 | 
						parser->active_collection = collection;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (type == HID_COLLECTION_APPLICATION)
 | 
						if (type == HID_COLLECTION_APPLICATION)
 | 
				
			||||||
		parser->device->maxapplication++;
 | 
							parser->device->maxapplication++;
 | 
				
			||||||
| 
						 | 
					@ -190,6 +192,8 @@ static int close_collection(struct hid_parser *parser)
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	parser->collection_stack_ptr--;
 | 
						parser->collection_stack_ptr--;
 | 
				
			||||||
 | 
						if (parser->active_collection)
 | 
				
			||||||
 | 
							parser->active_collection = parser->active_collection->parent;
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -427,6 +427,7 @@ struct hid_local {
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct hid_collection {
 | 
					struct hid_collection {
 | 
				
			||||||
 | 
						struct hid_collection *parent;
 | 
				
			||||||
	unsigned type;
 | 
						unsigned type;
 | 
				
			||||||
	unsigned usage;
 | 
						unsigned usage;
 | 
				
			||||||
	unsigned level;
 | 
						unsigned level;
 | 
				
			||||||
| 
						 | 
					@ -650,6 +651,7 @@ struct hid_parser {
 | 
				
			||||||
	unsigned int         *collection_stack;
 | 
						unsigned int         *collection_stack;
 | 
				
			||||||
	unsigned int          collection_stack_ptr;
 | 
						unsigned int          collection_stack_ptr;
 | 
				
			||||||
	unsigned int          collection_stack_size;
 | 
						unsigned int          collection_stack_size;
 | 
				
			||||||
 | 
						struct hid_collection *active_collection;
 | 
				
			||||||
	struct hid_device    *device;
 | 
						struct hid_device    *device;
 | 
				
			||||||
	unsigned int          scan_flags;
 | 
						unsigned int          scan_flags;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue