summaryrefslogtreecommitdiff
path: root/drivers/input/input.c
diff options
context:
space:
mode:
authorDmitry Torokhov <dtor@insightbb.com>2006-07-06 04:21:03 (GMT)
committerDmitry Torokhov <dtor@insightbb.com>2006-07-06 04:21:03 (GMT)
commitc7e8dc6ee6d59bf72f5478fa6355a27750e6c7d2 (patch)
treefb728aee7806ed08f23cb6e24749d3ce6030bb21 /drivers/input/input.c
parente9c8862f19958846dd0c7b39d0f6216aad6c7bee (diff)
downloadlinux-c7e8dc6ee6d59bf72f5478fa6355a27750e6c7d2.tar.xz
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.c12
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();