@@ -659,6 +659,9 @@ static int input_default_setkeycode(struct input_dev *dev,
int input_get_keycode(struct input_dev *dev,
unsigned int scancode, unsigned int *keycode)
{
+ if (!dev->getkeycode)
+ return -ENODEV;
+
return dev->getkeycode(dev, scancode, keycode);
}
EXPORT_SYMBOL(input_get_keycode);
@@ -682,6 +685,9 @@ int input_set_keycode(struct input_dev *dev,
if (keycode > KEY_MAX)
return -EINVAL;
+ if (!dev->getkeycode || !dev->setkeycode)
+ return -ENODEV;
+
spin_lock_irqsave(&dev->event_lock, flags);
retval = dev->getkeycode(dev, scancode, &old_keycode);
@@ -34,6 +34,9 @@ struct key_entry *sparse_keymap_entry_from_scancode(struct input_dev *dev,
{
struct key_entry *key;
+ if (!dev->keycode)
+ return NULL;
+
for (key = dev->keycode; key->type != KE_END; key++)
if (code == key->code)
return key;
@@ -55,6 +58,9 @@ struct key_entry *sparse_keymap_entry_from_keycode(struct input_dev *dev,
{
struct key_entry *key;
+ if (!dev->keycode)
+ return NULL;
+
for (key = dev->keycode; key->type != KE_END; key++)
if (key->type == KE_KEY && keycode == key->keycode)
return key;