1/* 2 * The input core 3 * 4 * Copyright (c) 1999-2002 Vojtech Pavlik 5 */ 6 7/* 8 * This program is free software; you can redistribute it and/or modify it 9 * under the terms of the GNU General Public License version 2 as published by 10 * the Free Software Foundation. 11 */ 12 13#include <linux/init.h> 14#include <linux/sched.h> 15#include <linux/smp_lock.h> 16#include <linux/input.h> 17#include <linux/module.h> 18#include <linux/random.h> 19#include <linux/major.h> 20#include <linux/proc_fs.h> 21#include <linux/seq_file.h> 22#include <linux/interrupt.h> 23#include <linux/poll.h> 24#include <linux/device.h> 25#include <linux/mutex.h> 26 27MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>"); 28MODULE_DESCRIPTION("Input core"); 29MODULE_LICENSE("GPL"); 30 31#define INPUT_DEVICES 256 32 33static LIST_HEAD(input_dev_list); 34static LIST_HEAD(input_handler_list); 35 36static struct input_handler *input_table[8]; 37 38void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value) 39{ 40 struct input_handle *handle; 41 42 if (type > EV_MAX || !test_bit(type, dev->evbit)) 43 return; 44 45 add_input_randomness(type, code, value); 46 47 switch (type) { 48 49 case EV_SYN: 50 switch (code) { 51 case SYN_CONFIG: 52 if (dev->event) 53 dev->event(dev, type, code, value); 54 break; 55 56 case SYN_REPORT: 57 if (dev->sync) 58 return; 59 dev->sync = 1; 60 break; 61 } 62 break; 63 64 case EV_KEY: 65 66 if (code > KEY_MAX || !test_bit(code, dev->keybit) || !!test_bit(code, dev->key) == value) 67 return; 68 69 if (value == 2) 70 break; 71 72 change_bit(code, dev->key); 73 74 if (test_bit(EV_REP, dev->evbit) && dev->rep[REP_PERIOD] && dev->rep[REP_DELAY] && dev->timer.data && value) { 75 dev->repeat_key = code; 76 mod_timer(&dev->timer, jiffies + msecs_to_jiffies(dev->rep[REP_DELAY])); 77 } 78 79 break; 80 81 case EV_SW: 82 83 if (code > SW_MAX || !test_bit(code, dev->swbit) || !!test_bit(code, dev->sw) == value) 84 return; 85 86 change_bit(code, dev->sw); 87 88 break; 89 90 case EV_ABS: 91 92 if (code > ABS_MAX || !test_bit(code, dev->absbit)) 93 return; 94 95 if (dev->absfuzz[code]) { 96 if ((value > dev->abs[code] - (dev->absfuzz[code] >> 1)) && 97 (value < dev->abs[code] + (dev->absfuzz[code] >> 1))) 98 return; 99 100 if ((value > dev->abs[code] - dev->absfuzz[code]) && 101 (value < dev->abs[code] + dev->absfuzz[code])) 102 value = (dev->abs[code] * 3 + value) >> 2; 103 104 if ((value > dev->abs[code] - (dev->absfuzz[code] << 1)) && 105 (value < dev->abs[code] + (dev->absfuzz[code] << 1))) 106 value = (dev->abs[code] + value) >> 1; 107 } 108 109 if (dev->abs[code] == value) 110 return; 111 112 dev->abs[code] = value; 113 break; 114 115 case EV_REL: 116 117 if (code > REL_MAX || !test_bit(code, dev->relbit) || (value == 0)) 118 return; 119 120 break; 121 122 case EV_MSC: 123 124 if (code > MSC_MAX || !test_bit(code, dev->mscbit)) 125 return; 126 127 if (dev->event) 128 dev->event(dev, type, code, value); 129 130 break; 131 132 case EV_LED: 133 134 if (code > LED_MAX || !test_bit(code, dev->ledbit) || !!test_bit(code, dev->led) == value) 135 return; 136 137 change_bit(code, dev->led); 138 139 if (dev->event) 140 dev->event(dev, type, code, value); 141 142 break; 143 144 case EV_SND: 145 146 if (code > SND_MAX || !test_bit(code, dev->sndbit)) 147 return; 148 149 if (!!test_bit(code, dev->snd) != !!value) 150 change_bit(code, dev->snd); 151 152 if (dev->event) 153 dev->event(dev, type, code, value); 154 155 break; 156 157 case EV_REP: 158 159 if (code > REP_MAX || value < 0 || dev->rep[code] == value) 160 return; 161 162 dev->rep[code] = value; 163 if (dev->event) 164 dev->event(dev, type, code, value); 165 166 break; 167 168 case EV_FF: 169 if (dev->event) 170 dev->event(dev, type, code, value); 171 break; 172 } 173 174 if (type != EV_SYN) 175 dev->sync = 0; 176 177 if (dev->grab) 178 dev->grab->handler->event(dev->grab, type, code, value); 179 else 180 list_for_each_entry(handle, &dev->h_list, d_node) 181 if (handle->open) 182 handle->handler->event(handle, type, code, value); 183} 184EXPORT_SYMBOL(input_event); 185 186static void input_repeat_key(unsigned long data) 187{ 188 struct input_dev *dev = (void *) data; 189 190 if (!test_bit(dev->repeat_key, dev->key)) 191 return; 192 193 input_event(dev, EV_KEY, dev->repeat_key, 2); 194 input_sync(dev); 195 196 if (dev->rep[REP_PERIOD]) 197 mod_timer(&dev->timer, jiffies + msecs_to_jiffies(dev->rep[REP_PERIOD])); 198} 199 200int input_accept_process(struct input_handle *handle, struct file *file) 201{ 202 if (handle->dev->accept) 203 return handle->dev->accept(handle->dev, file); 204 205 return 0; 206} 207EXPORT_SYMBOL(input_accept_process); 208 209int input_grab_device(struct input_handle *handle) 210{ 211 if (handle->dev->grab) 212 return -EBUSY; 213 214 handle->dev->grab = handle; 215 return 0; 216} 217EXPORT_SYMBOL(input_grab_device); 218 219void input_release_device(struct input_handle *handle) 220{ 221 if (handle->dev->grab == handle) 222 handle->dev->grab = NULL; 223} 224EXPORT_SYMBOL(input_release_device); 225 226int input_open_device(struct input_handle *handle) 227{ 228 struct input_dev *dev = handle->dev; 229 int err; 230 231 err = mutex_lock_interruptible(&dev->mutex); 232 if (err) 233 return err; 234 235 handle->open++; 236 237 if (!dev->users++ && dev->open) 238 err = dev->open(dev); 239 240 if (err) 241 handle->open--; 242 243 mutex_unlock(&dev->mutex); 244 245 return err; 246} 247EXPORT_SYMBOL(input_open_device); 248 249int input_flush_device(struct input_handle* handle, struct file* file) 250{ 251 if (handle->dev->flush) 252 return handle->dev->flush(handle->dev, file); 253 254 return 0; 255} 256EXPORT_SYMBOL(input_flush_device); 257 258void input_close_device(struct input_handle *handle) 259{ 260 struct input_dev *dev = handle->dev; 261 262 input_release_device(handle); 263 264 mutex_lock(&dev->mutex); 265 266 if (!--dev->users && dev->close) 267 dev->close(dev); 268 handle->open--; 269 270 mutex_unlock(&dev->mutex); 271} 272EXPORT_SYMBOL(input_close_device); 273 274static void input_link_handle(struct input_handle *handle) 275{ 276 list_add_tail(&handle->d_node, &handle->dev->h_list); 277 list_add_tail(&handle->h_node, &handle->handler->h_list); 278} 279 280#define MATCH_BIT(bit, max) \ 281 for (i = 0; i < NBITS(max); i++) \ 282 if ((id->bit[i] & dev->bit[i]) != id->bit[i]) \ 283 break; \ 284 if (i != NBITS(max)) \ 285 continue; 286 287static struct input_device_id *input_match_device(struct input_device_id *id, struct input_dev *dev) 288{ 289 int i; 290 291 for (; id->flags || id->driver_info; id++) { 292 293 if (id->flags & INPUT_DEVICE_ID_MATCH_BUS) 294 if (id->bustype != dev->id.bustype) 295 continue; 296 297 if (id->flags & INPUT_DEVICE_ID_MATCH_VENDOR) 298 if (id->vendor != dev->id.vendor) 299 continue; 300 301 if (id->flags & INPUT_DEVICE_ID_MATCH_PRODUCT) 302 if (id->product != dev->id.product) 303 continue; 304 305 if (id->flags & INPUT_DEVICE_ID_MATCH_VERSION) 306 if (id->version != dev->id.version) 307 continue; 308 309 MATCH_BIT(evbit, EV_MAX); 310 MATCH_BIT(keybit, KEY_MAX); 311 MATCH_BIT(relbit, REL_MAX); 312 MATCH_BIT(absbit, ABS_MAX); 313 MATCH_BIT(mscbit, MSC_MAX); 314 MATCH_BIT(ledbit, LED_MAX); 315 MATCH_BIT(sndbit, SND_MAX); 316 MATCH_BIT(ffbit, FF_MAX); 317 MATCH_BIT(swbit, SW_MAX); 318 319 return id; 320 } 321 322 return NULL; 323} 324 325#ifdef CONFIG_PROC_FS 326 327static struct proc_dir_entry *proc_bus_input_dir; 328static DECLARE_WAIT_QUEUE_HEAD(input_devices_poll_wait); 329static int input_devices_state; 330 331static inline void input_wakeup_procfs_readers(void) 332{ 333 input_devices_state++; 334 wake_up(&input_devices_poll_wait); 335} 336 337static unsigned int input_proc_devices_poll(struct file *file, poll_table *wait) 338{ 339 int state = input_devices_state; 340 341 poll_wait(file, &input_devices_poll_wait, wait); 342 if (state != input_devices_state) 343 return POLLIN | POLLRDNORM; 344 345 return 0; 346} 347 348static struct list_head *list_get_nth_element(struct list_head *list, loff_t *pos) 349{ 350 struct list_head *node; 351 loff_t i = 0; 352 353 list_for_each(node, list) 354 if (i++ == *pos) 355 return node; 356 357 return NULL; 358} 359 360static struct list_head *list_get_next_element(struct list_head *list, struct list_head *element, loff_t *pos) 361{ 362 if (element->next == list) 363 return NULL; 364 365 ++(*pos); 366 return element->next; 367} 368 369static void *input_devices_seq_start(struct seq_file *seq, loff_t *pos) 370{ 371 /* acquire lock here ... Yes, we do need locking, I knowi, I know... */ 372 373 return list_get_nth_element(&input_dev_list, pos); 374} 375 376static void *input_devices_seq_next(struct seq_file *seq, void *v, loff_t *pos) 377{ 378 return list_get_next_element(&input_dev_list, v, pos); 379} 380 381static void input_devices_seq_stop(struct seq_file *seq, void *v) 382{ 383 /* release lock here */ 384} 385 386static void input_seq_print_bitmap(struct seq_file *seq, const char *name, 387 unsigned long *bitmap, int max) 388{ 389 int i; 390 391 for (i = NBITS(max) - 1; i > 0; i--) 392 if (bitmap[i]) 393 break; 394 395 seq_printf(seq, "B: %s=", name); 396 for (; i >= 0; i--) 397 seq_printf(seq, "%lx%s", bitmap[i], i > 0 ? " " : ""); 398 seq_putc(seq, '\n'); 399} 400 401static int input_devices_seq_show(struct seq_file *seq, void *v) 402{ 403 struct input_dev *dev = container_of(v, struct input_dev, node); 404 const char *path = kobject_get_path(&dev->cdev.kobj, GFP_KERNEL); 405 struct input_handle *handle; 406 407 seq_printf(seq, "I: Bus=%04x Vendor=%04x Product=%04x Version=%04x\n", 408 dev->id.bustype, dev->id.vendor, dev->id.product, dev->id.version); 409 410 seq_printf(seq, "N: Name=\"%s\"\n", dev->name ? dev->name : ""); 411 seq_printf(seq, "P: Phys=%s\n", dev->phys ? dev->phys : ""); 412 seq_printf(seq, "S: Sysfs=%s\n", path ? path : ""); 413 seq_printf(seq, "H: Handlers="); 414 415 list_for_each_entry(handle, &dev->h_list, d_node) 416 seq_printf(seq, "%s ", handle->name); 417 seq_putc(seq, '\n'); 418 419 input_seq_print_bitmap(seq, "EV", dev->evbit, EV_MAX); 420 if (test_bit(EV_KEY, dev->evbit)) 421 input_seq_print_bitmap(seq, "KEY", dev->keybit, KEY_MAX); 422 if (test_bit(EV_REL, dev->evbit)) 423 input_seq_print_bitmap(seq, "REL", dev->relbit, REL_MAX); 424 if (test_bit(EV_ABS, dev->evbit)) 425 input_seq_print_bitmap(seq, "ABS", dev->absbit, ABS_MAX); 426 if (test_bit(EV_MSC, dev->evbit)) 427 input_seq_print_bitmap(seq, "MSC", dev->mscbit, MSC_MAX); 428 if (test_bit(EV_LED, dev->evbit)) 429 input_seq_print_bitmap(seq, "LED", dev->ledbit, LED_MAX); 430 if (test_bit(EV_SND, dev->evbit)) 431 input_seq_print_bitmap(seq, "SND", dev->sndbit, SND_MAX); 432 if (test_bit(EV_FF, dev->evbit)) 433 input_seq_print_bitmap(seq, "FF", dev->ffbit, FF_MAX); 434 if (test_bit(EV_SW, dev->evbit)) 435 input_seq_print_bitmap(seq, "SW", dev->swbit, SW_MAX); 436 437 seq_putc(seq, '\n'); 438 439 kfree(path); 440 return 0; 441} 442 443static struct seq_operations input_devices_seq_ops = { 444 .start = input_devices_seq_start, 445 .next = input_devices_seq_next, 446 .stop = input_devices_seq_stop, 447 .show = input_devices_seq_show, 448}; 449 450static int input_proc_devices_open(struct inode *inode, struct file *file) 451{ 452 return seq_open(file, &input_devices_seq_ops); 453} 454 455static struct file_operations input_devices_fileops = { 456 .owner = THIS_MODULE, 457 .open = input_proc_devices_open, 458 .poll = input_proc_devices_poll, 459 .read = seq_read, 460 .llseek = seq_lseek, 461 .release = seq_release, 462}; 463 464static void *input_handlers_seq_start(struct seq_file *seq, loff_t *pos) 465{ 466 /* acquire lock here ... Yes, we do need locking, I knowi, I know... */ 467 seq->private = (void *)(unsigned long)*pos; 468 return list_get_nth_element(&input_handler_list, pos); 469} 470 471static void *input_handlers_seq_next(struct seq_file *seq, void *v, loff_t *pos) 472{ 473 seq->private = (void *)(unsigned long)(*pos + 1); 474 return list_get_next_element(&input_handler_list, v, pos); 475} 476 477static void input_handlers_seq_stop(struct seq_file *seq, void *v) 478{ 479 /* release lock here */ 480} 481 482static int input_handlers_seq_show(struct seq_file *seq, void *v) 483{ 484 struct input_handler *handler = container_of(v, struct input_handler, node); 485 486 seq_printf(seq, "N: Number=%ld Name=%s", 487 (unsigned long)seq->private, handler->name); 488 if (handler->fops) 489 seq_printf(seq, " Minor=%d", handler->minor); 490 seq_putc(seq, '\n'); 491 492 return 0; 493} 494static struct seq_operations input_handlers_seq_ops = { 495 .start = input_handlers_seq_start, 496 .next = input_handlers_seq_next, 497 .stop = input_handlers_seq_stop, 498 .show = input_handlers_seq_show, 499}; 500 501static int input_proc_handlers_open(struct inode *inode, struct file *file) 502{ 503 return seq_open(file, &input_handlers_seq_ops); 504} 505 506static struct file_operations input_handlers_fileops = { 507 .owner = THIS_MODULE, 508 .open = input_proc_handlers_open, 509 .read = seq_read, 510 .llseek = seq_lseek, 511 .release = seq_release, 512}; 513 514static int __init input_proc_init(void) 515{ 516 struct proc_dir_entry *entry; 517 518 proc_bus_input_dir = proc_mkdir("input", proc_bus); 519 if (!proc_bus_input_dir) 520 return -ENOMEM; 521 522 proc_bus_input_dir->owner = THIS_MODULE; 523 524 entry = create_proc_entry("devices", 0, proc_bus_input_dir); 525 if (!entry) 526 goto fail1; 527 528 entry->owner = THIS_MODULE; 529 entry->proc_fops = &input_devices_fileops; 530 531 entry = create_proc_entry("handlers", 0, proc_bus_input_dir); 532 if (!entry) 533 goto fail2; 534 535 entry->owner = THIS_MODULE; 536 entry->proc_fops = &input_handlers_fileops; 537 538 return 0; 539 540 fail2: remove_proc_entry("devices", proc_bus_input_dir); 541 fail1: remove_proc_entry("input", proc_bus); 542 return -ENOMEM; 543} 544 545static void input_proc_exit(void) 546{ 547 remove_proc_entry("devices", proc_bus_input_dir); 548 remove_proc_entry("handlers", proc_bus_input_dir); 549 remove_proc_entry("input", proc_bus); 550} 551 552#else /* !CONFIG_PROC_FS */ 553static inline void input_wakeup_procfs_readers(void) { } 554static inline int input_proc_init(void) { return 0; } 555static inline void input_proc_exit(void) { } 556#endif 557 558#define INPUT_DEV_STRING_ATTR_SHOW(name) \ 559static ssize_t input_dev_show_##name(struct class_device *dev, char *buf) \ 560{ \ 561 struct input_dev *input_dev = to_input_dev(dev); \ 562 int retval; \ 563 \ 564 retval = mutex_lock_interruptible(&input_dev->mutex); \ 565 if (retval) \ 566 return retval; \ 567 \ 568 retval = scnprintf(buf, PAGE_SIZE, \ 569 "%s\n", input_dev->name ? input_dev->name : ""); \ 570 \ 571 mutex_unlock(&input_dev->mutex); \ 572 \ 573 return retval; \ 574} \ 575static CLASS_DEVICE_ATTR(name, S_IRUGO, input_dev_show_##name, NULL); 576 577INPUT_DEV_STRING_ATTR_SHOW(name); 578INPUT_DEV_STRING_ATTR_SHOW(phys); 579INPUT_DEV_STRING_ATTR_SHOW(uniq); 580 581static int input_print_modalias_bits(char *buf, int size, 582 char name, unsigned long *bm, 583 unsigned int min_bit, unsigned int max_bit) 584{ 585 int len = 0, i; 586 587 len += snprintf(buf, max(size, 0), "%c", name); 588 for (i = min_bit; i < max_bit; i++) 589 if (bm[LONG(i)] & BIT(i)) 590 len += snprintf(buf + len, max(size - len, 0), "%X,", i); 591 return len; 592} 593 594static int input_print_modalias(char *buf, int size, struct input_dev *id, 595 int add_cr) 596{ 597 int len; 598 599 len = snprintf(buf, max(size, 0), 600 "input:b%04Xv%04Xp%04Xe%04X-", 601 id->id.bustype, id->id.vendor, 602 id->id.product, id->id.version); 603 604 len += input_print_modalias_bits(buf + len, size - len, 605 'e', id->evbit, 0, EV_MAX); 606 len += input_print_modalias_bits(buf + len, size - len, 607 'k', id->keybit, KEY_MIN_INTERESTING, KEY_MAX); 608 len += input_print_modalias_bits(buf + len, size - len, 609 'r', id->relbit, 0, REL_MAX); 610 len += input_print_modalias_bits(buf + len, size - len, 611 'a', id->absbit, 0, ABS_MAX); 612 len += input_print_modalias_bits(buf + len, size - len, 613 'm', id->mscbit, 0, MSC_MAX); 614 len += input_print_modalias_bits(buf + len, size - len, 615 'l', id->ledbit, 0, LED_MAX); 616 len += input_print_modalias_bits(buf + len, size - len, 617 's', id->sndbit, 0, SND_MAX); 618 len += input_print_modalias_bits(buf + len, size - len, 619 'f', id->ffbit, 0, FF_MAX); 620 len += input_print_modalias_bits(buf + len, size - len, 621 'w', id->swbit, 0, SW_MAX); 622 623 if (add_cr) 624 len += snprintf(buf + len, max(size - len, 0), "\n"); 625 626 return len; 627} 628 629static ssize_t input_dev_show_modalias(struct class_device *dev, char *buf) 630{ 631 struct input_dev *id = to_input_dev(dev); 632 ssize_t len; 633 634 len = input_print_modalias(buf, PAGE_SIZE, id, 1); 635 636 return min_t(int, len, PAGE_SIZE); 637} 638static CLASS_DEVICE_ATTR(modalias, S_IRUGO, input_dev_show_modalias, NULL); 639 640static struct attribute *input_dev_attrs[] = { 641 &class_device_attr_name.attr, 642 &class_device_attr_phys.attr, 643 &class_device_attr_uniq.attr, 644 &class_device_attr_modalias.attr, 645 NULL 646}; 647 648static struct attribute_group input_dev_attr_group = { 649 .attrs = input_dev_attrs, 650}; 651 652#define INPUT_DEV_ID_ATTR(name) \ 653static ssize_t input_dev_show_id_##name(struct class_device *dev, char *buf) \ 654{ \ 655 struct input_dev *input_dev = to_input_dev(dev); \ 656 return scnprintf(buf, PAGE_SIZE, "%04x\n", input_dev->id.name); \ 657} \ 658static CLASS_DEVICE_ATTR(name, S_IRUGO, input_dev_show_id_##name, NULL); 659 660INPUT_DEV_ID_ATTR(bustype); 661INPUT_DEV_ID_ATTR(vendor); 662INPUT_DEV_ID_ATTR(product); 663INPUT_DEV_ID_ATTR(version); 664 665static struct attribute *input_dev_id_attrs[] = { 666 &class_device_attr_bustype.attr, 667 &class_device_attr_vendor.attr, 668 &class_device_attr_product.attr, 669 &class_device_attr_version.attr, 670 NULL 671}; 672 673static struct attribute_group input_dev_id_attr_group = { 674 .name = "id", 675 .attrs = input_dev_id_attrs, 676}; 677 678static int input_print_bitmap(char *buf, int buf_size, unsigned long *bitmap, 679 int max, int add_cr) 680{ 681 int i; 682 int len = 0; 683 684 for (i = NBITS(max) - 1; i > 0; i--) 685 if (bitmap[i]) 686 break; 687 688 for (; i >= 0; i--) 689 len += snprintf(buf + len, max(buf_size - len, 0), 690 "%lx%s", bitmap[i], i > 0 ? " " : ""); 691 692 if (add_cr) 693 len += snprintf(buf + len, max(buf_size - len, 0), "\n"); 694 695 return len; 696} 697 698#define INPUT_DEV_CAP_ATTR(ev, bm) \ 699static ssize_t input_dev_show_cap_##bm(struct class_device *dev, char *buf) \ 700{ \ 701 struct input_dev *input_dev = to_input_dev(dev); \ 702 int len = input_print_bitmap(buf, PAGE_SIZE, \ 703 input_dev->bm##bit, ev##_MAX, 1); \ 704 return min_t(int, len, PAGE_SIZE); \ 705} \ 706static CLASS_DEVICE_ATTR(bm, S_IRUGO, input_dev_show_cap_##bm, NULL); 707 708INPUT_DEV_CAP_ATTR(EV, ev); 709INPUT_DEV_CAP_ATTR(KEY, key); 710INPUT_DEV_CAP_ATTR(REL, rel); 711INPUT_DEV_CAP_ATTR(ABS, abs); 712INPUT_DEV_CAP_ATTR(MSC, msc); 713INPUT_DEV_CAP_ATTR(LED, led); 714INPUT_DEV_CAP_ATTR(SND, snd); 715INPUT_DEV_CAP_ATTR(FF, ff); 716INPUT_DEV_CAP_ATTR(SW, sw); 717 718static struct attribute *input_dev_caps_attrs[] = { 719 &class_device_attr_ev.attr, 720 &class_device_attr_key.attr, 721 &class_device_attr_rel.attr, 722 &class_device_attr_abs.attr, 723 &class_device_attr_msc.attr, 724 &class_device_attr_led.attr, 725 &class_device_attr_snd.attr, 726 &class_device_attr_ff.attr, 727 &class_device_attr_sw.attr, 728 NULL 729}; 730 731static struct attribute_group input_dev_caps_attr_group = { 732 .name = "capabilities", 733 .attrs = input_dev_caps_attrs, 734}; 735 736static void input_dev_release(struct class_device *class_dev) 737{ 738 struct input_dev *dev = to_input_dev(class_dev); 739 740 kfree(dev); 741 module_put(THIS_MODULE); 742} 743 744/* 745 * Input uevent interface - loading event handlers based on 746 * device bitfields. 747 */ 748static int input_add_uevent_bm_var(char **envp, int num_envp, int *cur_index, 749 char *buffer, int buffer_size, int *cur_len, 750 const char *name, unsigned long *bitmap, int max) 751{ 752 if (*cur_index >= num_envp - 1) 753 return -ENOMEM; 754 755 envp[*cur_index] = buffer + *cur_len; 756 757 *cur_len += snprintf(buffer + *cur_len, max(buffer_size - *cur_len, 0), name); 758 if (*cur_len >= buffer_size) 759 return -ENOMEM; 760 761 *cur_len += input_print_bitmap(buffer + *cur_len, 762 max(buffer_size - *cur_len, 0), 763 bitmap, max, 0) + 1; 764 if (*cur_len > buffer_size) 765 return -ENOMEM; 766 767 (*cur_index)++; 768 return 0; 769} 770 771static int input_add_uevent_modalias_var(char **envp, int num_envp, int *cur_index, 772 char *buffer, int buffer_size, int *cur_len, 773 struct input_dev *dev) 774{ 775 if (*cur_index >= num_envp - 1) 776 return -ENOMEM; 777 778 envp[*cur_index] = buffer + *cur_len; 779 780 *cur_len += snprintf(buffer + *cur_len, max(buffer_size - *cur_len, 0), 781 "MODALIAS="); 782 if (*cur_len >= buffer_size) 783 return -ENOMEM; 784 785 *cur_len += input_print_modalias(buffer + *cur_len, 786 max(buffer_size - *cur_len, 0), 787 dev, 0) + 1; 788 if (*cur_len > buffer_size) 789 return -ENOMEM; 790 791 (*cur_index)++; 792 return 0; 793} 794 795#define INPUT_ADD_HOTPLUG_VAR(fmt, val...) \ 796 do { \ 797 int err = add_uevent_var(envp, num_envp, &i, \ 798 buffer, buffer_size, &len, \ 799 fmt, val); \ 800 if (err) \ 801 return err; \ 802 } while (0) 803 804#define INPUT_ADD_HOTPLUG_BM_VAR(name, bm, max) \ 805 do { \ 806 int err = input_add_uevent_bm_var(envp, num_envp, &i, \ 807 buffer, buffer_size, &len, \ 808 name, bm, max); \ 809 if (err) \ 810 return err; \ 811 } while (0) 812 813#define INPUT_ADD_HOTPLUG_MODALIAS_VAR(dev) \ 814 do { \ 815 int err = input_add_uevent_modalias_var(envp, \ 816 num_envp, &i, \ 817 buffer, buffer_size, &len, \ 818 dev); \ 819 if (err) \ 820 return err; \ 821 } while (0) 822 823static int input_dev_uevent(struct class_device *cdev, char **envp, 824 int num_envp, char *buffer, int buffer_size) 825{ 826 struct input_dev *dev = to_input_dev(cdev); 827 int i = 0; 828 int len = 0; 829 830 INPUT_ADD_HOTPLUG_VAR("PRODUCT=%x/%x/%x/%x", 831 dev->id.bustype, dev->id.vendor, 832 dev->id.product, dev->id.version); 833 if (dev->name) 834 INPUT_ADD_HOTPLUG_VAR("NAME=\"%s\"", dev->name); 835 if (dev->phys) 836 INPUT_ADD_HOTPLUG_VAR("PHYS=\"%s\"", dev->phys); 837 if (dev->uniq) 838 INPUT_ADD_HOTPLUG_VAR("UNIQ=\"%s\"", dev->uniq); 839 840 INPUT_ADD_HOTPLUG_BM_VAR("EV=", dev->evbit, EV_MAX); 841 if (test_bit(EV_KEY, dev->evbit)) 842 INPUT_ADD_HOTPLUG_BM_VAR("KEY=", dev->keybit, KEY_MAX); 843 if (test_bit(EV_REL, dev->evbit)) 844 INPUT_ADD_HOTPLUG_BM_VAR("REL=", dev->relbit, REL_MAX); 845 if (test_bit(EV_ABS, dev->evbit)) 846 INPUT_ADD_HOTPLUG_BM_VAR("ABS=", dev->absbit, ABS_MAX); 847 if (test_bit(EV_MSC, dev->evbit)) 848 INPUT_ADD_HOTPLUG_BM_VAR("MSC=", dev->mscbit, MSC_MAX); 849 if (test_bit(EV_LED, dev->evbit)) 850 INPUT_ADD_HOTPLUG_BM_VAR("LED=", dev->ledbit, LED_MAX); 851 if (test_bit(EV_SND, dev->evbit)) 852 INPUT_ADD_HOTPLUG_BM_VAR("SND=", dev->sndbit, SND_MAX); 853 if (test_bit(EV_FF, dev->evbit)) 854 INPUT_ADD_HOTPLUG_BM_VAR("FF=", dev->ffbit, FF_MAX); 855 if (test_bit(EV_SW, dev->evbit)) 856 INPUT_ADD_HOTPLUG_BM_VAR("SW=", dev->swbit, SW_MAX); 857 858 INPUT_ADD_HOTPLUG_MODALIAS_VAR(dev); 859 860 envp[i] = NULL; 861 return 0; 862} 863 864struct class input_class = { 865 .name = "input", 866 .release = input_dev_release, 867 .uevent = input_dev_uevent, 868}; 869EXPORT_SYMBOL_GPL(input_class); 870 871struct input_dev *input_allocate_device(void) 872{ 873 struct input_dev *dev; 874 875 dev = kzalloc(sizeof(struct input_dev), GFP_KERNEL); 876 if (dev) { 877 dev->dynalloc = 1; 878 dev->cdev.class = &input_class; 879 class_device_initialize(&dev->cdev); 880 mutex_init(&dev->mutex); 881 INIT_LIST_HEAD(&dev->h_list); 882 INIT_LIST_HEAD(&dev->node); 883 } 884 885 return dev; 886} 887EXPORT_SYMBOL(input_allocate_device); 888 889void input_free_device(struct input_dev *dev) 890{ 891 if (dev) { 892 893 mutex_lock(&dev->mutex); 894 dev->name = dev->phys = dev->uniq = NULL; 895 mutex_unlock(&dev->mutex); 896 897 input_put_device(dev); 898 } 899} 900EXPORT_SYMBOL(input_free_device); 901 902int input_register_device(struct input_dev *dev) 903{ 904 static atomic_t input_no = ATOMIC_INIT(0); 905 struct input_handle *handle; 906 struct input_handler *handler; 907 struct input_device_id *id; 908 const char *path; 909 int error; 910 911 if (!dev->dynalloc) { 912 printk(KERN_WARNING "input: device %s is statically allocated, will not register\n" 913 "Please convert to input_allocate_device() or contact dtor_core@ameritech.net\n", 914 dev->name ? dev->name : "<Unknown>"); 915 return -EINVAL; 916 } 917 918 set_bit(EV_SYN, dev->evbit); 919 920 /* 921 * If delay and period are pre-set by the driver, then autorepeating 922 * is handled by the driver itself and we don't do it in input.c. 923 */ 924 925 init_timer(&dev->timer); 926 if (!dev->rep[REP_DELAY] && !dev->rep[REP_PERIOD]) { 927 dev->timer.data = (long) dev; 928 dev->timer.function = input_repeat_key; 929 dev->rep[REP_DELAY] = 250; 930 dev->rep[REP_PERIOD] = 33; 931 } 932 933 INIT_LIST_HEAD(&dev->h_list); 934 list_add_tail(&dev->node, &input_dev_list); 935 936 dev->cdev.class = &input_class; 937 snprintf(dev->cdev.class_id, sizeof(dev->cdev.class_id), 938 "input%ld", (unsigned long) atomic_inc_return(&input_no) - 1); 939 940 error = class_device_add(&dev->cdev); 941 if (error) 942 return error; 943 944 error = sysfs_create_group(&dev->cdev.kobj, &input_dev_attr_group); 945 if (error) 946 goto fail1; 947 948 error = sysfs_create_group(&dev->cdev.kobj, &input_dev_id_attr_group); 949 if (error) 950 goto fail2; 951 952 error = sysfs_create_group(&dev->cdev.kobj, &input_dev_caps_attr_group); 953 if (error) 954 goto fail3; 955 956 __module_get(THIS_MODULE); 957 958 path = kobject_get_path(&dev->cdev.kobj, GFP_KERNEL); 959 printk(KERN_INFO "input: %s as %s\n", 960 dev->name ? dev->name : "Unspecified device", path ? path : "N/A"); 961 kfree(path); 962 963 list_for_each_entry(handler, &input_handler_list, node) 964 if (!handler->blacklist || !input_match_device(handler->blacklist, dev)) 965 if ((id = input_match_device(handler->id_table, dev))) 966 if ((handle = handler->connect(handler, dev, id))) 967 input_link_handle(handle); 968 969 input_wakeup_procfs_readers(); 970 971 return 0; 972 973 fail3: sysfs_remove_group(&dev->cdev.kobj, &input_dev_id_attr_group); 974 fail2: sysfs_remove_group(&dev->cdev.kobj, &input_dev_attr_group); 975 fail1: class_device_del(&dev->cdev); 976 return error; 977} 978EXPORT_SYMBOL(input_register_device); 979 980void input_unregister_device(struct input_dev *dev) 981{ 982 struct list_head *node, *next; 983 984 if (!dev) 985 return; 986 987 del_timer_sync(&dev->timer); 988 989 list_for_each_safe(node, next, &dev->h_list) { 990 struct input_handle * handle = to_handle(node); 991 list_del_init(&handle->d_node); 992 list_del_init(&handle->h_node); 993 handle->handler->disconnect(handle); 994 } 995 996 list_del_init(&dev->node); 997 998 sysfs_remove_group(&dev->cdev.kobj, &input_dev_caps_attr_group); 999 sysfs_remove_group(&dev->cdev.kobj, &input_dev_id_attr_group); 1000 sysfs_remove_group(&dev->cdev.kobj, &input_dev_attr_group); 1001 1002 mutex_lock(&dev->mutex); 1003 dev->name = dev->phys = dev->uniq = NULL; 1004 mutex_unlock(&dev->mutex); 1005 1006 class_device_unregister(&dev->cdev); 1007 1008 input_wakeup_procfs_readers(); 1009} 1010EXPORT_SYMBOL(input_unregister_device); 1011 1012void input_register_handler(struct input_handler *handler) 1013{ 1014 struct input_dev *dev; 1015 struct input_handle *handle; 1016 struct input_device_id *id; 1017 1018 if (!handler) 1019 return; 1020 1021 INIT_LIST_HEAD(&handler->h_list); 1022 1023 if (handler->fops != NULL) 1024 input_table[handler->minor >> 5] = handler; 1025 1026 list_add_tail(&handler->node, &input_handler_list); 1027 1028 list_for_each_entry(dev, &input_dev_list, node) 1029 if (!handler->blacklist || !input_match_device(handler->blacklist, dev)) 1030 if ((id = input_match_device(handler->id_table, dev))) 1031 if ((handle = handler->connect(handler, dev, id))) 1032 input_link_handle(handle); 1033 1034 input_wakeup_procfs_readers(); 1035} 1036EXPORT_SYMBOL(input_register_handler); 1037 1038void input_unregister_handler(struct input_handler *handler) 1039{ 1040 struct list_head *node, *next; 1041 1042 list_for_each_safe(node, next, &handler->h_list) { 1043 struct input_handle * handle = to_handle_h(node); 1044 list_del_init(&handle->h_node); 1045 list_del_init(&handle->d_node); 1046 handler->disconnect(handle); 1047 } 1048 1049 list_del_init(&handler->node); 1050 1051 if (handler->fops != NULL) 1052 input_table[handler->minor >> 5] = NULL; 1053 1054 input_wakeup_procfs_readers(); 1055} 1056EXPORT_SYMBOL(input_unregister_handler); 1057 1058static int input_open_file(struct inode *inode, struct file *file) 1059{ 1060 struct input_handler *handler = input_table[iminor(inode) >> 5]; 1061 const struct file_operations *old_fops, *new_fops = NULL; 1062 int err; 1063 1064 /* No load-on-demand here? */ 1065 if (!handler || !(new_fops = fops_get(handler->fops))) 1066 return -ENODEV; 1067 1068 /* 1069 * That's _really_ odd. Usually NULL ->open means "nothing special", 1070 * not "no device". Oh, well... 1071 */ 1072 if (!new_fops->open) { 1073 fops_put(new_fops); 1074 return -ENODEV; 1075 } 1076 old_fops = file->f_op; 1077 file->f_op = new_fops; 1078 1079 err = new_fops->open(inode, file); 1080 1081 if (err) { 1082 fops_put(file->f_op); 1083 file->f_op = fops_get(old_fops); 1084 } 1085 fops_put(old_fops); 1086 return err; 1087} 1088 1089static struct file_operations input_fops = { 1090 .owner = THIS_MODULE, 1091 .open = input_open_file, 1092}; 1093 1094static int __init input_init(void) 1095{ 1096 int err; 1097 1098 err = class_register(&input_class); 1099 if (err) { 1100 printk(KERN_ERR "input: unable to register input_dev class\n"); 1101 return err; 1102 } 1103 1104 err = input_proc_init(); 1105 if (err) 1106 goto fail1; 1107 1108 err = register_chrdev(INPUT_MAJOR, "input", &input_fops); 1109 if (err) { 1110 printk(KERN_ERR "input: unable to register char major %d", INPUT_MAJOR); 1111 goto fail2; 1112 } 1113 1114 return 0; 1115 1116 fail2: input_proc_exit(); 1117 fail1: class_unregister(&input_class); 1118 return err; 1119} 1120 1121static void __exit input_exit(void) 1122{ 1123 input_proc_exit(); 1124 unregister_chrdev(INPUT_MAJOR, "input"); 1125 class_unregister(&input_class); 1126} 1127 1128subsys_initcall(input_init); 1129module_exit(input_exit);