aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/input.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/input/input.c')
-rw-r--r--drivers/input/input.c266
1 files changed, 205 insertions, 61 deletions
diff --git a/drivers/input/input.c b/drivers/input/input.c
index a9a706f8fff9..915e9ab7cab0 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -299,12 +299,87 @@ void input_close_device(struct input_handle *handle)
299} 299}
300EXPORT_SYMBOL(input_close_device); 300EXPORT_SYMBOL(input_close_device);
301 301
302static void input_link_handle(struct input_handle *handle) 302static int input_fetch_keycode(struct input_dev *dev, int scancode)
303{ 303{
304 list_add_tail(&handle->d_node, &handle->dev->h_list); 304 switch (dev->keycodesize) {
305 list_add_tail(&handle->h_node, &handle->handler->h_list); 305 case 1:
306 return ((u8 *)dev->keycode)[scancode];
307
308 case 2:
309 return ((u16 *)dev->keycode)[scancode];
310
311 default:
312 return ((u32 *)dev->keycode)[scancode];
313 }
314}
315
316static int input_default_getkeycode(struct input_dev *dev,
317 int scancode, int *keycode)
318{
319 if (!dev->keycodesize)
320 return -EINVAL;
321
322 if (scancode < 0 || scancode >= dev->keycodemax)
323 return -EINVAL;
324
325 *keycode = input_fetch_keycode(dev, scancode);
326
327 return 0;
328}
329
330static int input_default_setkeycode(struct input_dev *dev,
331 int scancode, int keycode)
332{
333 int old_keycode;
334 int i;
335
336 if (scancode < 0 || scancode >= dev->keycodemax)
337 return -EINVAL;
338
339 if (keycode < 0 || keycode > KEY_MAX)
340 return -EINVAL;
341
342 if (!dev->keycodesize)
343 return -EINVAL;
344
345 if (dev->keycodesize < sizeof(keycode) && (keycode >> (dev->keycodesize * 8)))
346 return -EINVAL;
347
348 switch (dev->keycodesize) {
349 case 1: {
350 u8 *k = (u8 *)dev->keycode;
351 old_keycode = k[scancode];
352 k[scancode] = keycode;
353 break;
354 }
355 case 2: {
356 u16 *k = (u16 *)dev->keycode;
357 old_keycode = k[scancode];
358 k[scancode] = keycode;
359 break;
360 }
361 default: {
362 u32 *k = (u32 *)dev->keycode;
363 old_keycode = k[scancode];
364 k[scancode] = keycode;
365 break;
366 }
367 }
368
369 clear_bit(old_keycode, dev->keybit);
370 set_bit(keycode, dev->keybit);
371
372 for (i = 0; i < dev->keycodemax; i++) {
373 if (input_fetch_keycode(dev, i) == old_keycode) {
374 set_bit(old_keycode, dev->keybit);
375 break; /* Setting the bit twice is useless, so break */
376 }
377 }
378
379 return 0;
306} 380}
307 381
382
308#define MATCH_BIT(bit, max) \ 383#define MATCH_BIT(bit, max) \
309 for (i = 0; i < NBITS(max); i++) \ 384 for (i = 0; i < NBITS(max); i++) \
310 if ((id->bit[i] & dev->bit[i]) != id->bit[i]) \ 385 if ((id->bit[i] & dev->bit[i]) != id->bit[i]) \
@@ -351,6 +426,29 @@ static const struct input_device_id *input_match_device(const struct input_devic
351 return NULL; 426 return NULL;
352} 427}
353 428
429static int input_attach_handler(struct input_dev *dev, struct input_handler *handler)
430{
431 const struct input_device_id *id;
432 int error;
433
434 if (handler->blacklist && input_match_device(handler->blacklist, dev))
435 return -ENODEV;
436
437 id = input_match_device(handler->id_table, dev);
438 if (!id)
439 return -ENODEV;
440
441 error = handler->connect(handler, dev, id);
442 if (error && error != -ENODEV)
443 printk(KERN_ERR
444 "input: failed to attach handler %s to device %s, "
445 "error: %d\n",
446 handler->name, kobject_name(&dev->cdev.kobj), error);
447
448 return error;
449}
450
451
354#ifdef CONFIG_PROC_FS 452#ifdef CONFIG_PROC_FS
355 453
356static struct proc_dir_entry *proc_bus_input_dir; 454static struct proc_dir_entry *proc_bus_input_dir;
@@ -439,6 +537,7 @@ static int input_devices_seq_show(struct seq_file *seq, void *v)
439 seq_printf(seq, "N: Name=\"%s\"\n", dev->name ? dev->name : ""); 537 seq_printf(seq, "N: Name=\"%s\"\n", dev->name ? dev->name : "");
440 seq_printf(seq, "P: Phys=%s\n", dev->phys ? dev->phys : ""); 538 seq_printf(seq, "P: Phys=%s\n", dev->phys ? dev->phys : "");
441 seq_printf(seq, "S: Sysfs=%s\n", path ? path : ""); 539 seq_printf(seq, "S: Sysfs=%s\n", path ? path : "");
540 seq_printf(seq, "U: Uniq=%s\n", dev->uniq ? dev->uniq : "");
442 seq_printf(seq, "H: Handlers="); 541 seq_printf(seq, "H: Handlers=");
443 542
444 list_for_each_entry(handle, &dev->h_list, d_node) 543 list_for_each_entry(handle, &dev->h_list, d_node)
@@ -753,6 +852,13 @@ static struct attribute_group input_dev_caps_attr_group = {
753 .attrs = input_dev_caps_attrs, 852 .attrs = input_dev_caps_attrs,
754}; 853};
755 854
855static struct attribute_group *input_dev_attr_groups[] = {
856 &input_dev_attr_group,
857 &input_dev_id_attr_group,
858 &input_dev_caps_attr_group,
859 NULL
860};
861
756static void input_dev_release(struct class_device *class_dev) 862static void input_dev_release(struct class_device *class_dev)
757{ 863{
758 struct input_dev *dev = to_input_dev(class_dev); 864 struct input_dev *dev = to_input_dev(class_dev);
@@ -906,6 +1012,7 @@ struct input_dev *input_allocate_device(void)
906 dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL); 1012 dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL);
907 if (dev) { 1013 if (dev) {
908 dev->cdev.class = &input_class; 1014 dev->cdev.class = &input_class;
1015 dev->cdev.groups = input_dev_attr_groups;
909 class_device_initialize(&dev->cdev); 1016 class_device_initialize(&dev->cdev);
910 mutex_init(&dev->mutex); 1017 mutex_init(&dev->mutex);
911 INIT_LIST_HEAD(&dev->h_list); 1018 INIT_LIST_HEAD(&dev->h_list);
@@ -934,23 +1041,71 @@ EXPORT_SYMBOL(input_allocate_device);
934 */ 1041 */
935void input_free_device(struct input_dev *dev) 1042void input_free_device(struct input_dev *dev)
936{ 1043{
937 if (dev) { 1044 if (dev)
938
939 mutex_lock(&dev->mutex);
940 dev->name = dev->phys = dev->uniq = NULL;
941 mutex_unlock(&dev->mutex);
942
943 input_put_device(dev); 1045 input_put_device(dev);
944 }
945} 1046}
946EXPORT_SYMBOL(input_free_device); 1047EXPORT_SYMBOL(input_free_device);
947 1048
1049/**
1050 * input_set_capability - mark device as capable of a certain event
1051 * @dev: device that is capable of emitting or accepting event
1052 * @type: type of the event (EV_KEY, EV_REL, etc...)
1053 * @code: event code
1054 *
1055 * In addition to setting up corresponding bit in appropriate capability
1056 * bitmap the function also adjusts dev->evbit.
1057 */
1058void input_set_capability(struct input_dev *dev, unsigned int type, unsigned int code)
1059{
1060 switch (type) {
1061 case EV_KEY:
1062 __set_bit(code, dev->keybit);
1063 break;
1064
1065 case EV_REL:
1066 __set_bit(code, dev->relbit);
1067 break;
1068
1069 case EV_ABS:
1070 __set_bit(code, dev->absbit);
1071 break;
1072
1073 case EV_MSC:
1074 __set_bit(code, dev->mscbit);
1075 break;
1076
1077 case EV_SW:
1078 __set_bit(code, dev->swbit);
1079 break;
1080
1081 case EV_LED:
1082 __set_bit(code, dev->ledbit);
1083 break;
1084
1085 case EV_SND:
1086 __set_bit(code, dev->sndbit);
1087 break;
1088
1089 case EV_FF:
1090 __set_bit(code, dev->ffbit);
1091 break;
1092
1093 default:
1094 printk(KERN_ERR
1095 "input_set_capability: unknown type %u (code %u)\n",
1096 type, code);
1097 dump_stack();
1098 return;
1099 }
1100
1101 __set_bit(type, dev->evbit);
1102}
1103EXPORT_SYMBOL(input_set_capability);
1104
948int input_register_device(struct input_dev *dev) 1105int input_register_device(struct input_dev *dev)
949{ 1106{
950 static atomic_t input_no = ATOMIC_INIT(0); 1107 static atomic_t input_no = ATOMIC_INIT(0);
951 struct input_handle *handle;
952 struct input_handler *handler; 1108 struct input_handler *handler;
953 const struct input_device_id *id;
954 const char *path; 1109 const char *path;
955 int error; 1110 int error;
956 1111
@@ -969,55 +1124,41 @@ int input_register_device(struct input_dev *dev)
969 dev->rep[REP_PERIOD] = 33; 1124 dev->rep[REP_PERIOD] = 33;
970 } 1125 }
971 1126
1127 if (!dev->getkeycode)
1128 dev->getkeycode = input_default_getkeycode;
1129
1130 if (!dev->setkeycode)
1131 dev->setkeycode = input_default_setkeycode;
1132
972 list_add_tail(&dev->node, &input_dev_list); 1133 list_add_tail(&dev->node, &input_dev_list);
973 1134
974 snprintf(dev->cdev.class_id, sizeof(dev->cdev.class_id), 1135 snprintf(dev->cdev.class_id, sizeof(dev->cdev.class_id),
975 "input%ld", (unsigned long) atomic_inc_return(&input_no) - 1); 1136 "input%ld", (unsigned long) atomic_inc_return(&input_no) - 1);
976 1137
1138 if (!dev->cdev.dev)
1139 dev->cdev.dev = dev->dev.parent;
1140
977 error = class_device_add(&dev->cdev); 1141 error = class_device_add(&dev->cdev);
978 if (error) 1142 if (error)
979 return error; 1143 return error;
980 1144
981 error = sysfs_create_group(&dev->cdev.kobj, &input_dev_attr_group);
982 if (error)
983 goto fail1;
984
985 error = sysfs_create_group(&dev->cdev.kobj, &input_dev_id_attr_group);
986 if (error)
987 goto fail2;
988
989 error = sysfs_create_group(&dev->cdev.kobj, &input_dev_caps_attr_group);
990 if (error)
991 goto fail3;
992
993 path = kobject_get_path(&dev->cdev.kobj, GFP_KERNEL); 1145 path = kobject_get_path(&dev->cdev.kobj, GFP_KERNEL);
994 printk(KERN_INFO "input: %s as %s\n", 1146 printk(KERN_INFO "input: %s as %s\n",
995 dev->name ? dev->name : "Unspecified device", path ? path : "N/A"); 1147 dev->name ? dev->name : "Unspecified device", path ? path : "N/A");
996 kfree(path); 1148 kfree(path);
997 1149
998 list_for_each_entry(handler, &input_handler_list, node) 1150 list_for_each_entry(handler, &input_handler_list, node)
999 if (!handler->blacklist || !input_match_device(handler->blacklist, dev)) 1151 input_attach_handler(dev, handler);
1000 if ((id = input_match_device(handler->id_table, dev)))
1001 if ((handle = handler->connect(handler, dev, id))) {
1002 input_link_handle(handle);
1003 if (handler->start)
1004 handler->start(handle);
1005 }
1006 1152
1007 input_wakeup_procfs_readers(); 1153 input_wakeup_procfs_readers();
1008 1154
1009 return 0; 1155 return 0;
1010
1011 fail3: sysfs_remove_group(&dev->cdev.kobj, &input_dev_id_attr_group);
1012 fail2: sysfs_remove_group(&dev->cdev.kobj, &input_dev_attr_group);
1013 fail1: class_device_del(&dev->cdev);
1014 return error;
1015} 1156}
1016EXPORT_SYMBOL(input_register_device); 1157EXPORT_SYMBOL(input_register_device);
1017 1158
1018void input_unregister_device(struct input_dev *dev) 1159void input_unregister_device(struct input_dev *dev)
1019{ 1160{
1020 struct list_head *node, *next; 1161 struct input_handle *handle, *next;
1021 int code; 1162 int code;
1022 1163
1023 for (code = 0; code <= KEY_MAX; code++) 1164 for (code = 0; code <= KEY_MAX; code++)
@@ -1027,19 +1168,12 @@ void input_unregister_device(struct input_dev *dev)
1027 1168
1028 del_timer_sync(&dev->timer); 1169 del_timer_sync(&dev->timer);
1029 1170
1030 list_for_each_safe(node, next, &dev->h_list) { 1171 list_for_each_entry_safe(handle, next, &dev->h_list, d_node)
1031 struct input_handle * handle = to_handle(node);
1032 list_del_init(&handle->d_node);
1033 list_del_init(&handle->h_node);
1034 handle->handler->disconnect(handle); 1172 handle->handler->disconnect(handle);
1035 } 1173 WARN_ON(!list_empty(&dev->h_list));
1036 1174
1037 list_del_init(&dev->node); 1175 list_del_init(&dev->node);
1038 1176
1039 sysfs_remove_group(&dev->cdev.kobj, &input_dev_caps_attr_group);
1040 sysfs_remove_group(&dev->cdev.kobj, &input_dev_id_attr_group);
1041 sysfs_remove_group(&dev->cdev.kobj, &input_dev_attr_group);
1042
1043 class_device_unregister(&dev->cdev); 1177 class_device_unregister(&dev->cdev);
1044 1178
1045 input_wakeup_procfs_readers(); 1179 input_wakeup_procfs_readers();
@@ -1049,8 +1183,6 @@ EXPORT_SYMBOL(input_unregister_device);
1049int input_register_handler(struct input_handler *handler) 1183int input_register_handler(struct input_handler *handler)
1050{ 1184{
1051 struct input_dev *dev; 1185 struct input_dev *dev;
1052 struct input_handle *handle;
1053 const struct input_device_id *id;
1054 1186
1055 INIT_LIST_HEAD(&handler->h_list); 1187 INIT_LIST_HEAD(&handler->h_list);
1056 1188
@@ -1064,13 +1196,7 @@ int input_register_handler(struct input_handler *handler)
1064 list_add_tail(&handler->node, &input_handler_list); 1196 list_add_tail(&handler->node, &input_handler_list);
1065 1197
1066 list_for_each_entry(dev, &input_dev_list, node) 1198 list_for_each_entry(dev, &input_dev_list, node)
1067 if (!handler->blacklist || !input_match_device(handler->blacklist, dev)) 1199 input_attach_handler(dev, handler);
1068 if ((id = input_match_device(handler->id_table, dev)))
1069 if ((handle = handler->connect(handler, dev, id))) {
1070 input_link_handle(handle);
1071 if (handler->start)
1072 handler->start(handle);
1073 }
1074 1200
1075 input_wakeup_procfs_readers(); 1201 input_wakeup_procfs_readers();
1076 return 0; 1202 return 0;
@@ -1079,14 +1205,11 @@ EXPORT_SYMBOL(input_register_handler);
1079 1205
1080void input_unregister_handler(struct input_handler *handler) 1206void input_unregister_handler(struct input_handler *handler)
1081{ 1207{
1082 struct list_head *node, *next; 1208 struct input_handle *handle, *next;
1083 1209
1084 list_for_each_safe(node, next, &handler->h_list) { 1210 list_for_each_entry_safe(handle, next, &handler->h_list, h_node)
1085 struct input_handle * handle = to_handle_h(node);
1086 list_del_init(&handle->h_node);
1087 list_del_init(&handle->d_node);
1088 handler->disconnect(handle); 1211 handler->disconnect(handle);
1089 } 1212 WARN_ON(!list_empty(&handler->h_list));
1090 1213
1091 list_del_init(&handler->node); 1214 list_del_init(&handler->node);
1092 1215
@@ -1097,6 +1220,27 @@ void input_unregister_handler(struct input_handler *handler)
1097} 1220}
1098EXPORT_SYMBOL(input_unregister_handler); 1221EXPORT_SYMBOL(input_unregister_handler);
1099 1222
1223int input_register_handle(struct input_handle *handle)
1224{
1225 struct input_handler *handler = handle->handler;
1226
1227 list_add_tail(&handle->d_node, &handle->dev->h_list);
1228 list_add_tail(&handle->h_node, &handler->h_list);
1229
1230 if (handler->start)
1231 handler->start(handle);
1232
1233 return 0;
1234}
1235EXPORT_SYMBOL(input_register_handle);
1236
1237void input_unregister_handle(struct input_handle *handle)
1238{
1239 list_del_init(&handle->h_node);
1240 list_del_init(&handle->d_node);
1241}
1242EXPORT_SYMBOL(input_unregister_handle);
1243
1100static int input_open_file(struct inode *inode, struct file *file) 1244static int input_open_file(struct inode *inode, struct file *file)
1101{ 1245{
1102 struct input_handler *handler = input_table[iminor(inode) >> 5]; 1246 struct input_handler *handler = input_table[iminor(inode) >> 5];