diff options
Diffstat (limited to 'drivers/input/input.c')
-rw-r--r-- | drivers/input/input.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c index c2e4d9bdcabf..7aeebb9071c2 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c | |||
@@ -209,8 +209,13 @@ EXPORT_SYMBOL(input_grab_device); | |||
209 | 209 | ||
210 | void input_release_device(struct input_handle *handle) | 210 | void input_release_device(struct input_handle *handle) |
211 | { | 211 | { |
212 | if (handle->dev->grab == handle) | 212 | if (handle->dev->grab == handle) { |
213 | handle->dev->grab = NULL; | 213 | handle->dev->grab = NULL; |
214 | |||
215 | list_for_each_entry(handle, &handle->dev->h_list, d_node) | ||
216 | if (handle->handler->start) | ||
217 | handle->handler->start(handle); | ||
218 | } | ||
214 | } | 219 | } |
215 | EXPORT_SYMBOL(input_release_device); | 220 | EXPORT_SYMBOL(input_release_device); |
216 | 221 | ||
@@ -954,8 +959,11 @@ int input_register_device(struct input_dev *dev) | |||
954 | list_for_each_entry(handler, &input_handler_list, node) | 959 | list_for_each_entry(handler, &input_handler_list, node) |
955 | if (!handler->blacklist || !input_match_device(handler->blacklist, dev)) | 960 | if (!handler->blacklist || !input_match_device(handler->blacklist, dev)) |
956 | if ((id = input_match_device(handler->id_table, dev))) | 961 | if ((id = input_match_device(handler->id_table, dev))) |
957 | if ((handle = handler->connect(handler, dev, id))) | 962 | if ((handle = handler->connect(handler, dev, id))) { |
958 | input_link_handle(handle); | 963 | input_link_handle(handle); |
964 | if (handler->start) | ||
965 | handler->start(handle); | ||
966 | } | ||
959 | 967 | ||
960 | input_wakeup_procfs_readers(); | 968 | input_wakeup_procfs_readers(); |
961 | 969 | ||