
注册input_dev时将会遍历所有的input_handler_list,然后调用input_attach_handler进行attach,注册input_handler亦然。
input_register_device,先调用所有input_handler的match函数(没有则必定成功),成功再调用connect函数
1 2 3 4 5 6
|
int (struct input_dev *dev) list_add_tail(&dev->node, &input_dev_list); list_for_each_entry(handler, &input_handler_list, node) input_attach_handler(dev, handler);
|
1 2 3 4 5 6
|
int input_register_handler(struct input_handler *handler) list_add_tail(&handler->node, &input_handler_list); list_for_each_entry(dev, &input_dev_list, node) input_attach_handler(dev, handler);
|
从以下函数可以看到,如果一个handler中没有match函数,一定能match上
1 2 3 4 5 6 7 8 9 10
|
static int input_attach_handler(struct input_dev *dev, struct input_handler *handler) id = input_match_device(handler, dev); if (!handler->match || handler->match(handler, dev)) return id; if (!id) return -ENODEV;
error = handler->connect(handler, dev, id);
|
近期评论