diff options
author | Dmitry Torokhov <dtor@insightbb.com> | 2006-07-06 00:21:03 -0400 |
---|---|---|
committer | Dmitry Torokhov <dtor@insightbb.com> | 2006-07-06 00:21:03 -0400 |
commit | c7e8dc6ee6d59bf72f5478fa6355a27750e6c7d2 (patch) | |
tree | fb728aee7806ed08f23cb6e24749d3ce6030bb21 /drivers/input/input.c | |
parent | e9c8862f19958846dd0c7b39d0f6216aad6c7bee (diff) | |
download | op-kernel-dev-c7e8dc6ee6d59bf72f5478fa6355a27750e6c7d2.zip op-kernel-dev-c7e8dc6ee6d59bf72f5478fa6355a27750e6c7d2.tar.gz |
Input: add start() method to input handlers
The new start() method is called immediately after connect() and also
when "grabbed" device is released by its owner. This will allow input
handlers to re-synchronize state of once-grabbed device with the rest
of devices.
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
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 c2e4d9b..7aeebb9 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -209,8 +209,13 @@ EXPORT_SYMBOL(input_grab_device); void input_release_device(struct input_handle *handle) { - if (handle->dev->grab == handle) + if (handle->dev->grab == handle) { handle->dev->grab = NULL; + + list_for_each_entry(handle, &handle->dev->h_list, d_node) + if (handle->handler->start) + handle->handler->start(handle); + } } EXPORT_SYMBOL(input_release_device); @@ -954,8 +959,11 @@ int input_register_device(struct input_dev *dev) list_for_each_entry(handler, &input_handler_list, node) if (!handler->blacklist || !input_match_device(handler->blacklist, dev)) if ((id = input_match_device(handler->id_table, dev))) - if ((handle = handler->connect(handler, dev, id))) + if ((handle = handler->connect(handler, dev, id))) { input_link_handle(handle); + if (handler->start) + handler->start(handle); + } input_wakeup_procfs_readers(); |