--- a/include/linux/input.h 2006-04-05 17:10:01.000000000 +0400 +++ b/include/linux/input.h 2006-04-05 17:36:49.000000000 +0400 @@ -862,7 +862,7 @@ struct pt_regs *regs; int state; - + int enabled; int sync; int abs[ABS_MAX + 1]; @@ -1019,6 +1019,8 @@ int input_open_device(struct input_handle *); void input_close_device(struct input_handle *); +void input_enable_device(struct input_handle *handle, int enab); + int input_accept_process(struct input_handle *handle, struct file *file); int input_flush_device(struct input_handle* handle, struct file* file); --- a/drivers/input/input.c 2006-01-12 11:23:09.000000000 +0300 +++ b/drivers/input/input.c 2006-04-05 17:51:27.000000000 +0400 @@ -36,6 +36,7 @@ EXPORT_SYMBOL(input_release_device); EXPORT_SYMBOL(input_open_device); EXPORT_SYMBOL(input_close_device); +EXPORT_SYMBOL(input_enable_device); EXPORT_SYMBOL(input_accept_process); EXPORT_SYMBOL(input_flush_device); EXPORT_SYMBOL(input_event); @@ -52,7 +53,7 @@ { struct input_handle *handle; - if (type > EV_MAX || !test_bit(type, dev->evbit)) + if (type > EV_MAX || !test_bit(type, dev->evbit) || !dev->enabled) return; add_input_randomness(type, code, value); @@ -265,6 +266,11 @@ up(&dev->sem); } +void input_enable_device(struct input_handle *handle, int enab) +{ + handle->dev->enabled = enab; +} + static void input_link_handle(struct input_handle *handle) { list_add_tail(&handle->d_node, &handle->dev->h_list); @@ -712,6 +718,7 @@ class_device_initialize(&dev->cdev); INIT_LIST_HEAD(&dev->h_list); INIT_LIST_HEAD(&dev->node); + dev->enabled = 1; } return dev;