aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input
diff options
context:
space:
mode:
authorDmitry Torokhov <dtor@insightbb.com>2006-07-06 00:21:03 -0400
committerDmitry Torokhov <dtor@insightbb.com>2006-07-06 00:21:03 -0400
commitc7e8dc6ee6d59bf72f5478fa6355a27750e6c7d2 (patch)
treefb728aee7806ed08f23cb6e24749d3ce6030bb21 /drivers/input
parente9c8862f19958846dd0c7b39d0f6216aad6c7bee (diff)
downloadkernel_samsung_crespo-c7e8dc6ee6d59bf72f5478fa6355a27750e6c7d2.zip
kernel_samsung_crespo-c7e8dc6ee6d59bf72f5478fa6355a27750e6c7d2.tar.gz
kernel_samsung_crespo-c7e8dc6ee6d59bf72f5478fa6355a27750e6c7d2.tar.bz2
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')
-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();