diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-02-02 21:08:26 -0800 | 
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2010-02-04 00:25:19 -0800 | 
| commit | 0b7024ac4df5821347141c18e680b7166bc1cb20 (patch) | |
| tree | 7a61e55e66bdd39351b3ec39ecef367588b47170 /drivers/char/keyboard.c | |
| parent | 1e87a43080a259a0e9739377708ece163b08de8d (diff) | |
| download | olio-linux-3.10-0b7024ac4df5821347141c18e680b7166bc1cb20.tar.xz olio-linux-3.10-0b7024ac4df5821347141c18e680b7166bc1cb20.zip  | |
Input: add match() method to input hanlders
Get rid of blacklist in input handler structure and instead allow
handlers to define their own match() method to perform fine-grained
filtering of supported devices.
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Diffstat (limited to 'drivers/char/keyboard.c')
| -rw-r--r-- | drivers/char/keyboard.c | 24 | 
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/char/keyboard.c b/drivers/char/keyboard.c index cbf64b985ef..ada25bb8941 100644 --- a/drivers/char/keyboard.c +++ b/drivers/char/keyboard.c @@ -1323,6 +1323,21 @@ static void kbd_event(struct input_handle *handle, unsigned int event_type,  	schedule_console_callback();  } +static bool kbd_match(struct input_handler *handler, struct input_dev *dev) +{ +	int i; + +	if (test_bit(EV_SND, dev->evbit)) +		return true; + +	if (test_bit(EV_KEY, dev->evbit)) +		for (i = KEY_RESERVED; i < BTN_MISC; i++) +			if (test_bit(i, dev->keybit)) +				return true; + +	return false; +} +  /*   * When a keyboard (or other input device) is found, the kbd_connect   * function is called. The function then looks at the device, and if it @@ -1334,14 +1349,6 @@ static int kbd_connect(struct input_handler *handler, struct input_dev *dev,  {  	struct input_handle *handle;  	int error; -	int i; - -	for (i = KEY_RESERVED; i < BTN_MISC; i++) -		if (test_bit(i, dev->keybit)) -			break; - -	if (i == BTN_MISC && !test_bit(EV_SND, dev->evbit)) -		return -ENODEV;  	handle = kzalloc(sizeof(struct input_handle), GFP_KERNEL);  	if (!handle) @@ -1407,6 +1414,7 @@ MODULE_DEVICE_TABLE(input, kbd_ids);  static struct input_handler kbd_handler = {  	.event		= kbd_event, +	.match		= kbd_match,  	.connect	= kbd_connect,  	.disconnect	= kbd_disconnect,  	.start		= kbd_start,  |