1 /* rc-main.c - Remote Controller core module 2 * 3 * Copyright (C) 2009-2010 by Mauro Carvalho Chehab 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation version 2 of the License. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 */ 14 15 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 16 17 #include <media/rc-core.h> 18 #include <linux/atomic.h> 19 #include <linux/spinlock.h> 20 #include <linux/delay.h> 21 #include <linux/input.h> 22 #include <linux/leds.h> 23 #include <linux/slab.h> 24 #include <linux/idr.h> 25 #include <linux/device.h> 26 #include <linux/module.h> 27 #include "rc-core-priv.h" 28 29 /* Sizes are in bytes, 256 bytes allows for 32 entries on x64 */ 30 #define IR_TAB_MIN_SIZE 256 31 #define IR_TAB_MAX_SIZE 8192 32 #define RC_DEV_MAX 256 33 34 /* FIXME: IR_KEYPRESS_TIMEOUT should be protocol specific */ 35 #define IR_KEYPRESS_TIMEOUT 250 36 37 /* Used to keep track of known keymaps */ 38 static LIST_HEAD(rc_map_list); 39 static DEFINE_SPINLOCK(rc_map_lock); 40 static struct led_trigger *led_feedback; 41 42 /* Used to keep track of rc devices */ 43 static DEFINE_IDA(rc_ida); 44 45 static struct rc_map_list *seek_rc_map(const char *name) 46 { 47 struct rc_map_list *map = NULL; 48 49 spin_lock(&rc_map_lock); 50 list_for_each_entry(map, &rc_map_list, list) { 51 if (!strcmp(name, map->map.name)) { 52 spin_unlock(&rc_map_lock); 53 return map; 54 } 55 } 56 spin_unlock(&rc_map_lock); 57 58 return NULL; 59 } 60 61 struct rc_map *rc_map_get(const char *name) 62 { 63 64 struct rc_map_list *map; 65 66 map = seek_rc_map(name); 67 #ifdef CONFIG_MODULES 68 if (!map) { 69 int rc = request_module("%s", name); 70 if (rc < 0) { 71 pr_err("Couldn't load IR keymap %s\n", name); 72 return NULL; 73 } 74 msleep(20); /* Give some time for IR to register */ 75 76 map = seek_rc_map(name); 77 } 78 #endif 79 if (!map) { 80 pr_err("IR keymap %s not found\n", name); 81 return NULL; 82 } 83 84 printk(KERN_INFO "Registered IR keymap %s\n", map->map.name); 85 86 return &map->map; 87 } 88 EXPORT_SYMBOL_GPL(rc_map_get); 89 90 int rc_map_register(struct rc_map_list *map) 91 { 92 spin_lock(&rc_map_lock); 93 list_add_tail(&map->list, &rc_map_list); 94 spin_unlock(&rc_map_lock); 95 return 0; 96 } 97 EXPORT_SYMBOL_GPL(rc_map_register); 98 99 void rc_map_unregister(struct rc_map_list *map) 100 { 101 spin_lock(&rc_map_lock); 102 list_del(&map->list); 103 spin_unlock(&rc_map_lock); 104 } 105 EXPORT_SYMBOL_GPL(rc_map_unregister); 106 107 108 static struct rc_map_table empty[] = { 109 { 0x2a, KEY_COFFEE }, 110 }; 111 112 static struct rc_map_list empty_map = { 113 .map = { 114 .scan = empty, 115 .size = ARRAY_SIZE(empty), 116 .rc_type = RC_TYPE_UNKNOWN, /* Legacy IR type */ 117 .name = RC_MAP_EMPTY, 118 } 119 }; 120 121 /** 122 * ir_create_table() - initializes a scancode table 123 * @rc_map: the rc_map to initialize 124 * @name: name to assign to the table 125 * @rc_type: ir type to assign to the new table 126 * @size: initial size of the table 127 * @return: zero on success or a negative error code 128 * 129 * This routine will initialize the rc_map and will allocate 130 * memory to hold at least the specified number of elements. 131 */ 132 static int ir_create_table(struct rc_map *rc_map, 133 const char *name, u64 rc_type, size_t size) 134 { 135 rc_map->name = kstrdup(name, GFP_KERNEL); 136 if (!rc_map->name) 137 return -ENOMEM; 138 rc_map->rc_type = rc_type; 139 rc_map->alloc = roundup_pow_of_two(size * sizeof(struct rc_map_table)); 140 rc_map->size = rc_map->alloc / sizeof(struct rc_map_table); 141 rc_map->scan = kmalloc(rc_map->alloc, GFP_KERNEL); 142 if (!rc_map->scan) { 143 kfree(rc_map->name); 144 rc_map->name = NULL; 145 return -ENOMEM; 146 } 147 148 IR_dprintk(1, "Allocated space for %u keycode entries (%u bytes)\n", 149 rc_map->size, rc_map->alloc); 150 return 0; 151 } 152 153 /** 154 * ir_free_table() - frees memory allocated by a scancode table 155 * @rc_map: the table whose mappings need to be freed 156 * 157 * This routine will free memory alloctaed for key mappings used by given 158 * scancode table. 159 */ 160 static void ir_free_table(struct rc_map *rc_map) 161 { 162 rc_map->size = 0; 163 kfree(rc_map->name); 164 rc_map->name = NULL; 165 kfree(rc_map->scan); 166 rc_map->scan = NULL; 167 } 168 169 /** 170 * ir_resize_table() - resizes a scancode table if necessary 171 * @rc_map: the rc_map to resize 172 * @gfp_flags: gfp flags to use when allocating memory 173 * @return: zero on success or a negative error code 174 * 175 * This routine will shrink the rc_map if it has lots of 176 * unused entries and grow it if it is full. 177 */ 178 static int ir_resize_table(struct rc_map *rc_map, gfp_t gfp_flags) 179 { 180 unsigned int oldalloc = rc_map->alloc; 181 unsigned int newalloc = oldalloc; 182 struct rc_map_table *oldscan = rc_map->scan; 183 struct rc_map_table *newscan; 184 185 if (rc_map->size == rc_map->len) { 186 /* All entries in use -> grow keytable */ 187 if (rc_map->alloc >= IR_TAB_MAX_SIZE) 188 return -ENOMEM; 189 190 newalloc *= 2; 191 IR_dprintk(1, "Growing table to %u bytes\n", newalloc); 192 } 193 194 if ((rc_map->len * 3 < rc_map->size) && (oldalloc > IR_TAB_MIN_SIZE)) { 195 /* Less than 1/3 of entries in use -> shrink keytable */ 196 newalloc /= 2; 197 IR_dprintk(1, "Shrinking table to %u bytes\n", newalloc); 198 } 199 200 if (newalloc == oldalloc) 201 return 0; 202 203 newscan = kmalloc(newalloc, gfp_flags); 204 if (!newscan) { 205 IR_dprintk(1, "Failed to kmalloc %u bytes\n", newalloc); 206 return -ENOMEM; 207 } 208 209 memcpy(newscan, rc_map->scan, rc_map->len * sizeof(struct rc_map_table)); 210 rc_map->scan = newscan; 211 rc_map->alloc = newalloc; 212 rc_map->size = rc_map->alloc / sizeof(struct rc_map_table); 213 kfree(oldscan); 214 return 0; 215 } 216 217 /** 218 * ir_update_mapping() - set a keycode in the scancode->keycode table 219 * @dev: the struct rc_dev device descriptor 220 * @rc_map: scancode table to be adjusted 221 * @index: index of the mapping that needs to be updated 222 * @keycode: the desired keycode 223 * @return: previous keycode assigned to the mapping 224 * 225 * This routine is used to update scancode->keycode mapping at given 226 * position. 227 */ 228 static unsigned int ir_update_mapping(struct rc_dev *dev, 229 struct rc_map *rc_map, 230 unsigned int index, 231 unsigned int new_keycode) 232 { 233 int old_keycode = rc_map->scan[index].keycode; 234 int i; 235 236 /* Did the user wish to remove the mapping? */ 237 if (new_keycode == KEY_RESERVED || new_keycode == KEY_UNKNOWN) { 238 IR_dprintk(1, "#%d: Deleting scan 0x%04x\n", 239 index, rc_map->scan[index].scancode); 240 rc_map->len--; 241 memmove(&rc_map->scan[index], &rc_map->scan[index+ 1], 242 (rc_map->len - index) * sizeof(struct rc_map_table)); 243 } else { 244 IR_dprintk(1, "#%d: %s scan 0x%04x with key 0x%04x\n", 245 index, 246 old_keycode == KEY_RESERVED ? "New" : "Replacing", 247 rc_map->scan[index].scancode, new_keycode); 248 rc_map->scan[index].keycode = new_keycode; 249 __set_bit(new_keycode, dev->input_dev->keybit); 250 } 251 252 if (old_keycode != KEY_RESERVED) { 253 /* A previous mapping was updated... */ 254 __clear_bit(old_keycode, dev->input_dev->keybit); 255 /* ... but another scancode might use the same keycode */ 256 for (i = 0; i < rc_map->len; i++) { 257 if (rc_map->scan[i].keycode == old_keycode) { 258 __set_bit(old_keycode, dev->input_dev->keybit); 259 break; 260 } 261 } 262 263 /* Possibly shrink the keytable, failure is not a problem */ 264 ir_resize_table(rc_map, GFP_ATOMIC); 265 } 266 267 return old_keycode; 268 } 269 270 /** 271 * ir_establish_scancode() - set a keycode in the scancode->keycode table 272 * @dev: the struct rc_dev device descriptor 273 * @rc_map: scancode table to be searched 274 * @scancode: the desired scancode 275 * @resize: controls whether we allowed to resize the table to 276 * accommodate not yet present scancodes 277 * @return: index of the mapping containing scancode in question 278 * or -1U in case of failure. 279 * 280 * This routine is used to locate given scancode in rc_map. 281 * If scancode is not yet present the routine will allocate a new slot 282 * for it. 283 */ 284 static unsigned int ir_establish_scancode(struct rc_dev *dev, 285 struct rc_map *rc_map, 286 unsigned int scancode, 287 bool resize) 288 { 289 unsigned int i; 290 291 /* 292 * Unfortunately, some hardware-based IR decoders don't provide 293 * all bits for the complete IR code. In general, they provide only 294 * the command part of the IR code. Yet, as it is possible to replace 295 * the provided IR with another one, it is needed to allow loading 296 * IR tables from other remotes. So, we support specifying a mask to 297 * indicate the valid bits of the scancodes. 298 */ 299 if (dev->scancode_mask) 300 scancode &= dev->scancode_mask; 301 302 /* First check if we already have a mapping for this ir command */ 303 for (i = 0; i < rc_map->len; i++) { 304 if (rc_map->scan[i].scancode == scancode) 305 return i; 306 307 /* Keytable is sorted from lowest to highest scancode */ 308 if (rc_map->scan[i].scancode >= scancode) 309 break; 310 } 311 312 /* No previous mapping found, we might need to grow the table */ 313 if (rc_map->size == rc_map->len) { 314 if (!resize || ir_resize_table(rc_map, GFP_ATOMIC)) 315 return -1U; 316 } 317 318 /* i is the proper index to insert our new keycode */ 319 if (i < rc_map->len) 320 memmove(&rc_map->scan[i + 1], &rc_map->scan[i], 321 (rc_map->len - i) * sizeof(struct rc_map_table)); 322 rc_map->scan[i].scancode = scancode; 323 rc_map->scan[i].keycode = KEY_RESERVED; 324 rc_map->len++; 325 326 return i; 327 } 328 329 /** 330 * ir_setkeycode() - set a keycode in the scancode->keycode table 331 * @idev: the struct input_dev device descriptor 332 * @scancode: the desired scancode 333 * @keycode: result 334 * @return: -EINVAL if the keycode could not be inserted, otherwise zero. 335 * 336 * This routine is used to handle evdev EVIOCSKEY ioctl. 337 */ 338 static int ir_setkeycode(struct input_dev *idev, 339 const struct input_keymap_entry *ke, 340 unsigned int *old_keycode) 341 { 342 struct rc_dev *rdev = input_get_drvdata(idev); 343 struct rc_map *rc_map = &rdev->rc_map; 344 unsigned int index; 345 unsigned int scancode; 346 int retval = 0; 347 unsigned long flags; 348 349 spin_lock_irqsave(&rc_map->lock, flags); 350 351 if (ke->flags & INPUT_KEYMAP_BY_INDEX) { 352 index = ke->index; 353 if (index >= rc_map->len) { 354 retval = -EINVAL; 355 goto out; 356 } 357 } else { 358 retval = input_scancode_to_scalar(ke, &scancode); 359 if (retval) 360 goto out; 361 362 index = ir_establish_scancode(rdev, rc_map, scancode, true); 363 if (index >= rc_map->len) { 364 retval = -ENOMEM; 365 goto out; 366 } 367 } 368 369 *old_keycode = ir_update_mapping(rdev, rc_map, index, ke->keycode); 370 371 out: 372 spin_unlock_irqrestore(&rc_map->lock, flags); 373 return retval; 374 } 375 376 /** 377 * ir_setkeytable() - sets several entries in the scancode->keycode table 378 * @dev: the struct rc_dev device descriptor 379 * @to: the struct rc_map to copy entries to 380 * @from: the struct rc_map to copy entries from 381 * @return: -ENOMEM if all keycodes could not be inserted, otherwise zero. 382 * 383 * This routine is used to handle table initialization. 384 */ 385 static int ir_setkeytable(struct rc_dev *dev, 386 const struct rc_map *from) 387 { 388 struct rc_map *rc_map = &dev->rc_map; 389 unsigned int i, index; 390 int rc; 391 392 rc = ir_create_table(rc_map, from->name, 393 from->rc_type, from->size); 394 if (rc) 395 return rc; 396 397 IR_dprintk(1, "Allocated space for %u keycode entries (%u bytes)\n", 398 rc_map->size, rc_map->alloc); 399 400 for (i = 0; i < from->size; i++) { 401 index = ir_establish_scancode(dev, rc_map, 402 from->scan[i].scancode, false); 403 if (index >= rc_map->len) { 404 rc = -ENOMEM; 405 break; 406 } 407 408 ir_update_mapping(dev, rc_map, index, 409 from->scan[i].keycode); 410 } 411 412 if (rc) 413 ir_free_table(rc_map); 414 415 return rc; 416 } 417 418 /** 419 * ir_lookup_by_scancode() - locate mapping by scancode 420 * @rc_map: the struct rc_map to search 421 * @scancode: scancode to look for in the table 422 * @return: index in the table, -1U if not found 423 * 424 * This routine performs binary search in RC keykeymap table for 425 * given scancode. 426 */ 427 static unsigned int ir_lookup_by_scancode(const struct rc_map *rc_map, 428 unsigned int scancode) 429 { 430 int start = 0; 431 int end = rc_map->len - 1; 432 int mid; 433 434 while (start <= end) { 435 mid = (start + end) / 2; 436 if (rc_map->scan[mid].scancode < scancode) 437 start = mid + 1; 438 else if (rc_map->scan[mid].scancode > scancode) 439 end = mid - 1; 440 else 441 return mid; 442 } 443 444 return -1U; 445 } 446 447 /** 448 * ir_getkeycode() - get a keycode from the scancode->keycode table 449 * @idev: the struct input_dev device descriptor 450 * @scancode: the desired scancode 451 * @keycode: used to return the keycode, if found, or KEY_RESERVED 452 * @return: always returns zero. 453 * 454 * This routine is used to handle evdev EVIOCGKEY ioctl. 455 */ 456 static int ir_getkeycode(struct input_dev *idev, 457 struct input_keymap_entry *ke) 458 { 459 struct rc_dev *rdev = input_get_drvdata(idev); 460 struct rc_map *rc_map = &rdev->rc_map; 461 struct rc_map_table *entry; 462 unsigned long flags; 463 unsigned int index; 464 unsigned int scancode; 465 int retval; 466 467 spin_lock_irqsave(&rc_map->lock, flags); 468 469 if (ke->flags & INPUT_KEYMAP_BY_INDEX) { 470 index = ke->index; 471 } else { 472 retval = input_scancode_to_scalar(ke, &scancode); 473 if (retval) 474 goto out; 475 476 index = ir_lookup_by_scancode(rc_map, scancode); 477 } 478 479 if (index < rc_map->len) { 480 entry = &rc_map->scan[index]; 481 482 ke->index = index; 483 ke->keycode = entry->keycode; 484 ke->len = sizeof(entry->scancode); 485 memcpy(ke->scancode, &entry->scancode, sizeof(entry->scancode)); 486 487 } else if (!(ke->flags & INPUT_KEYMAP_BY_INDEX)) { 488 /* 489 * We do not really know the valid range of scancodes 490 * so let's respond with KEY_RESERVED to anything we 491 * do not have mapping for [yet]. 492 */ 493 ke->index = index; 494 ke->keycode = KEY_RESERVED; 495 } else { 496 retval = -EINVAL; 497 goto out; 498 } 499 500 retval = 0; 501 502 out: 503 spin_unlock_irqrestore(&rc_map->lock, flags); 504 return retval; 505 } 506 507 /** 508 * rc_g_keycode_from_table() - gets the keycode that corresponds to a scancode 509 * @dev: the struct rc_dev descriptor of the device 510 * @scancode: the scancode to look for 511 * @return: the corresponding keycode, or KEY_RESERVED 512 * 513 * This routine is used by drivers which need to convert a scancode to a 514 * keycode. Normally it should not be used since drivers should have no 515 * interest in keycodes. 516 */ 517 u32 rc_g_keycode_from_table(struct rc_dev *dev, u32 scancode) 518 { 519 struct rc_map *rc_map = &dev->rc_map; 520 unsigned int keycode; 521 unsigned int index; 522 unsigned long flags; 523 524 spin_lock_irqsave(&rc_map->lock, flags); 525 526 index = ir_lookup_by_scancode(rc_map, scancode); 527 keycode = index < rc_map->len ? 528 rc_map->scan[index].keycode : KEY_RESERVED; 529 530 spin_unlock_irqrestore(&rc_map->lock, flags); 531 532 if (keycode != KEY_RESERVED) 533 IR_dprintk(1, "%s: scancode 0x%04x keycode 0x%02x\n", 534 dev->input_name, scancode, keycode); 535 536 return keycode; 537 } 538 EXPORT_SYMBOL_GPL(rc_g_keycode_from_table); 539 540 /** 541 * ir_do_keyup() - internal function to signal the release of a keypress 542 * @dev: the struct rc_dev descriptor of the device 543 * @sync: whether or not to call input_sync 544 * 545 * This function is used internally to release a keypress, it must be 546 * called with keylock held. 547 */ 548 static void ir_do_keyup(struct rc_dev *dev, bool sync) 549 { 550 if (!dev->keypressed) 551 return; 552 553 IR_dprintk(1, "keyup key 0x%04x\n", dev->last_keycode); 554 input_report_key(dev->input_dev, dev->last_keycode, 0); 555 led_trigger_event(led_feedback, LED_OFF); 556 if (sync) 557 input_sync(dev->input_dev); 558 dev->keypressed = false; 559 } 560 561 /** 562 * rc_keyup() - signals the release of a keypress 563 * @dev: the struct rc_dev descriptor of the device 564 * 565 * This routine is used to signal that a key has been released on the 566 * remote control. 567 */ 568 void rc_keyup(struct rc_dev *dev) 569 { 570 unsigned long flags; 571 572 spin_lock_irqsave(&dev->keylock, flags); 573 ir_do_keyup(dev, true); 574 spin_unlock_irqrestore(&dev->keylock, flags); 575 } 576 EXPORT_SYMBOL_GPL(rc_keyup); 577 578 /** 579 * ir_timer_keyup() - generates a keyup event after a timeout 580 * @cookie: a pointer to the struct rc_dev for the device 581 * 582 * This routine will generate a keyup event some time after a keydown event 583 * is generated when no further activity has been detected. 584 */ 585 static void ir_timer_keyup(unsigned long cookie) 586 { 587 struct rc_dev *dev = (struct rc_dev *)cookie; 588 unsigned long flags; 589 590 /* 591 * ir->keyup_jiffies is used to prevent a race condition if a 592 * hardware interrupt occurs at this point and the keyup timer 593 * event is moved further into the future as a result. 594 * 595 * The timer will then be reactivated and this function called 596 * again in the future. We need to exit gracefully in that case 597 * to allow the input subsystem to do its auto-repeat magic or 598 * a keyup event might follow immediately after the keydown. 599 */ 600 spin_lock_irqsave(&dev->keylock, flags); 601 if (time_is_before_eq_jiffies(dev->keyup_jiffies)) 602 ir_do_keyup(dev, true); 603 spin_unlock_irqrestore(&dev->keylock, flags); 604 } 605 606 /** 607 * rc_repeat() - signals that a key is still pressed 608 * @dev: the struct rc_dev descriptor of the device 609 * 610 * This routine is used by IR decoders when a repeat message which does 611 * not include the necessary bits to reproduce the scancode has been 612 * received. 613 */ 614 void rc_repeat(struct rc_dev *dev) 615 { 616 unsigned long flags; 617 618 spin_lock_irqsave(&dev->keylock, flags); 619 620 input_event(dev->input_dev, EV_MSC, MSC_SCAN, dev->last_scancode); 621 input_sync(dev->input_dev); 622 623 if (!dev->keypressed) 624 goto out; 625 626 dev->keyup_jiffies = jiffies + msecs_to_jiffies(IR_KEYPRESS_TIMEOUT); 627 mod_timer(&dev->timer_keyup, dev->keyup_jiffies); 628 629 out: 630 spin_unlock_irqrestore(&dev->keylock, flags); 631 } 632 EXPORT_SYMBOL_GPL(rc_repeat); 633 634 /** 635 * ir_do_keydown() - internal function to process a keypress 636 * @dev: the struct rc_dev descriptor of the device 637 * @protocol: the protocol of the keypress 638 * @scancode: the scancode of the keypress 639 * @keycode: the keycode of the keypress 640 * @toggle: the toggle value of the keypress 641 * 642 * This function is used internally to register a keypress, it must be 643 * called with keylock held. 644 */ 645 static void ir_do_keydown(struct rc_dev *dev, enum rc_type protocol, 646 u32 scancode, u32 keycode, u8 toggle) 647 { 648 bool new_event = (!dev->keypressed || 649 dev->last_protocol != protocol || 650 dev->last_scancode != scancode || 651 dev->last_toggle != toggle); 652 653 if (new_event && dev->keypressed) 654 ir_do_keyup(dev, false); 655 656 input_event(dev->input_dev, EV_MSC, MSC_SCAN, scancode); 657 658 if (new_event && keycode != KEY_RESERVED) { 659 /* Register a keypress */ 660 dev->keypressed = true; 661 dev->last_protocol = protocol; 662 dev->last_scancode = scancode; 663 dev->last_toggle = toggle; 664 dev->last_keycode = keycode; 665 666 IR_dprintk(1, "%s: key down event, key 0x%04x, protocol 0x%04x, scancode 0x%08x\n", 667 dev->input_name, keycode, protocol, scancode); 668 input_report_key(dev->input_dev, keycode, 1); 669 670 led_trigger_event(led_feedback, LED_FULL); 671 } 672 673 input_sync(dev->input_dev); 674 } 675 676 /** 677 * rc_keydown() - generates input event for a key press 678 * @dev: the struct rc_dev descriptor of the device 679 * @protocol: the protocol for the keypress 680 * @scancode: the scancode for the keypress 681 * @toggle: the toggle value (protocol dependent, if the protocol doesn't 682 * support toggle values, this should be set to zero) 683 * 684 * This routine is used to signal that a key has been pressed on the 685 * remote control. 686 */ 687 void rc_keydown(struct rc_dev *dev, enum rc_type protocol, u32 scancode, u8 toggle) 688 { 689 unsigned long flags; 690 u32 keycode = rc_g_keycode_from_table(dev, scancode); 691 692 spin_lock_irqsave(&dev->keylock, flags); 693 ir_do_keydown(dev, protocol, scancode, keycode, toggle); 694 695 if (dev->keypressed) { 696 dev->keyup_jiffies = jiffies + msecs_to_jiffies(IR_KEYPRESS_TIMEOUT); 697 mod_timer(&dev->timer_keyup, dev->keyup_jiffies); 698 } 699 spin_unlock_irqrestore(&dev->keylock, flags); 700 } 701 EXPORT_SYMBOL_GPL(rc_keydown); 702 703 /** 704 * rc_keydown_notimeout() - generates input event for a key press without 705 * an automatic keyup event at a later time 706 * @dev: the struct rc_dev descriptor of the device 707 * @protocol: the protocol for the keypress 708 * @scancode: the scancode for the keypress 709 * @toggle: the toggle value (protocol dependent, if the protocol doesn't 710 * support toggle values, this should be set to zero) 711 * 712 * This routine is used to signal that a key has been pressed on the 713 * remote control. The driver must manually call rc_keyup() at a later stage. 714 */ 715 void rc_keydown_notimeout(struct rc_dev *dev, enum rc_type protocol, 716 u32 scancode, u8 toggle) 717 { 718 unsigned long flags; 719 u32 keycode = rc_g_keycode_from_table(dev, scancode); 720 721 spin_lock_irqsave(&dev->keylock, flags); 722 ir_do_keydown(dev, protocol, scancode, keycode, toggle); 723 spin_unlock_irqrestore(&dev->keylock, flags); 724 } 725 EXPORT_SYMBOL_GPL(rc_keydown_notimeout); 726 727 /** 728 * rc_validate_filter() - checks that the scancode and mask are valid and 729 * provides sensible defaults 730 * @dev: the struct rc_dev descriptor of the device 731 * @filter: the scancode and mask 732 * @return: 0 or -EINVAL if the filter is not valid 733 */ 734 static int rc_validate_filter(struct rc_dev *dev, 735 struct rc_scancode_filter *filter) 736 { 737 static u32 masks[] = { 738 [RC_TYPE_RC5] = 0x1f7f, 739 [RC_TYPE_RC5X_20] = 0x1f7f3f, 740 [RC_TYPE_RC5_SZ] = 0x2fff, 741 [RC_TYPE_SONY12] = 0x1f007f, 742 [RC_TYPE_SONY15] = 0xff007f, 743 [RC_TYPE_SONY20] = 0x1fff7f, 744 [RC_TYPE_JVC] = 0xffff, 745 [RC_TYPE_NEC] = 0xffff, 746 [RC_TYPE_NECX] = 0xffffff, 747 [RC_TYPE_NEC32] = 0xffffffff, 748 [RC_TYPE_SANYO] = 0x1fffff, 749 [RC_TYPE_RC6_0] = 0xffff, 750 [RC_TYPE_RC6_6A_20] = 0xfffff, 751 [RC_TYPE_RC6_6A_24] = 0xffffff, 752 [RC_TYPE_RC6_6A_32] = 0xffffffff, 753 [RC_TYPE_RC6_MCE] = 0xffff7fff, 754 [RC_TYPE_SHARP] = 0x1fff, 755 }; 756 u32 s = filter->data; 757 enum rc_type protocol = dev->wakeup_protocol; 758 759 switch (protocol) { 760 case RC_TYPE_NECX: 761 if ((((s >> 16) ^ ~(s >> 8)) & 0xff) == 0) 762 return -EINVAL; 763 break; 764 case RC_TYPE_NEC32: 765 if ((((s >> 24) ^ ~(s >> 16)) & 0xff) == 0) 766 return -EINVAL; 767 break; 768 case RC_TYPE_RC6_MCE: 769 if ((s & 0xffff0000) != 0x800f0000) 770 return -EINVAL; 771 break; 772 case RC_TYPE_RC6_6A_32: 773 if ((s & 0xffff0000) == 0x800f0000) 774 return -EINVAL; 775 break; 776 default: 777 break; 778 } 779 780 filter->data &= masks[protocol]; 781 filter->mask &= masks[protocol]; 782 783 /* 784 * If we have to raw encode the IR for wakeup, we cannot have a mask 785 */ 786 if (dev->encode_wakeup && 787 filter->mask != 0 && filter->mask != masks[protocol]) 788 return -EINVAL; 789 790 return 0; 791 } 792 793 int rc_open(struct rc_dev *rdev) 794 { 795 int rval = 0; 796 797 if (!rdev) 798 return -EINVAL; 799 800 mutex_lock(&rdev->lock); 801 802 if (!rdev->users++ && rdev->open != NULL) 803 rval = rdev->open(rdev); 804 805 if (rval) 806 rdev->users--; 807 808 mutex_unlock(&rdev->lock); 809 810 return rval; 811 } 812 EXPORT_SYMBOL_GPL(rc_open); 813 814 static int ir_open(struct input_dev *idev) 815 { 816 struct rc_dev *rdev = input_get_drvdata(idev); 817 818 return rc_open(rdev); 819 } 820 821 void rc_close(struct rc_dev *rdev) 822 { 823 if (rdev) { 824 mutex_lock(&rdev->lock); 825 826 if (!--rdev->users && rdev->close != NULL) 827 rdev->close(rdev); 828 829 mutex_unlock(&rdev->lock); 830 } 831 } 832 EXPORT_SYMBOL_GPL(rc_close); 833 834 static void ir_close(struct input_dev *idev) 835 { 836 struct rc_dev *rdev = input_get_drvdata(idev); 837 rc_close(rdev); 838 } 839 840 /* class for /sys/class/rc */ 841 static char *rc_devnode(struct device *dev, umode_t *mode) 842 { 843 return kasprintf(GFP_KERNEL, "rc/%s", dev_name(dev)); 844 } 845 846 static struct class rc_class = { 847 .name = "rc", 848 .devnode = rc_devnode, 849 }; 850 851 /* 852 * These are the protocol textual descriptions that are 853 * used by the sysfs protocols file. Note that the order 854 * of the entries is relevant. 855 */ 856 static const struct { 857 u64 type; 858 const char *name; 859 const char *module_name; 860 } proto_names[] = { 861 { RC_BIT_NONE, "none", NULL }, 862 { RC_BIT_OTHER, "other", NULL }, 863 { RC_BIT_UNKNOWN, "unknown", NULL }, 864 { RC_BIT_RC5 | 865 RC_BIT_RC5X_20, "rc-5", "ir-rc5-decoder" }, 866 { RC_BIT_NEC | 867 RC_BIT_NECX | 868 RC_BIT_NEC32, "nec", "ir-nec-decoder" }, 869 { RC_BIT_RC6_0 | 870 RC_BIT_RC6_6A_20 | 871 RC_BIT_RC6_6A_24 | 872 RC_BIT_RC6_6A_32 | 873 RC_BIT_RC6_MCE, "rc-6", "ir-rc6-decoder" }, 874 { RC_BIT_JVC, "jvc", "ir-jvc-decoder" }, 875 { RC_BIT_SONY12 | 876 RC_BIT_SONY15 | 877 RC_BIT_SONY20, "sony", "ir-sony-decoder" }, 878 { RC_BIT_RC5_SZ, "rc-5-sz", "ir-rc5-decoder" }, 879 { RC_BIT_SANYO, "sanyo", "ir-sanyo-decoder" }, 880 { RC_BIT_SHARP, "sharp", "ir-sharp-decoder" }, 881 { RC_BIT_MCE_KBD, "mce_kbd", "ir-mce_kbd-decoder" }, 882 { RC_BIT_XMP, "xmp", "ir-xmp-decoder" }, 883 { RC_BIT_CEC, "cec", NULL }, 884 }; 885 886 /** 887 * struct rc_filter_attribute - Device attribute relating to a filter type. 888 * @attr: Device attribute. 889 * @type: Filter type. 890 * @mask: false for filter value, true for filter mask. 891 */ 892 struct rc_filter_attribute { 893 struct device_attribute attr; 894 enum rc_filter_type type; 895 bool mask; 896 }; 897 #define to_rc_filter_attr(a) container_of(a, struct rc_filter_attribute, attr) 898 899 #define RC_FILTER_ATTR(_name, _mode, _show, _store, _type, _mask) \ 900 struct rc_filter_attribute dev_attr_##_name = { \ 901 .attr = __ATTR(_name, _mode, _show, _store), \ 902 .type = (_type), \ 903 .mask = (_mask), \ 904 } 905 906 static bool lirc_is_present(void) 907 { 908 #if defined(CONFIG_LIRC_MODULE) 909 struct module *lirc; 910 911 mutex_lock(&module_mutex); 912 lirc = find_module("lirc_dev"); 913 mutex_unlock(&module_mutex); 914 915 return lirc ? true : false; 916 #elif defined(CONFIG_LIRC) 917 return true; 918 #else 919 return false; 920 #endif 921 } 922 923 /** 924 * show_protocols() - shows the current IR protocol(s) 925 * @device: the device descriptor 926 * @mattr: the device attribute struct 927 * @buf: a pointer to the output buffer 928 * 929 * This routine is a callback routine for input read the IR protocol type(s). 930 * it is trigged by reading /sys/class/rc/rc?/protocols. 931 * It returns the protocol names of supported protocols. 932 * Enabled protocols are printed in brackets. 933 * 934 * dev->lock is taken to guard against races between device 935 * registration, store_protocols and show_protocols. 936 */ 937 static ssize_t show_protocols(struct device *device, 938 struct device_attribute *mattr, char *buf) 939 { 940 struct rc_dev *dev = to_rc_dev(device); 941 u64 allowed, enabled; 942 char *tmp = buf; 943 int i; 944 945 /* Device is being removed */ 946 if (!dev) 947 return -EINVAL; 948 949 if (!atomic_read(&dev->initialized)) 950 return -ERESTARTSYS; 951 952 mutex_lock(&dev->lock); 953 954 enabled = dev->enabled_protocols; 955 allowed = dev->allowed_protocols; 956 if (dev->raw && !allowed) 957 allowed = ir_raw_get_allowed_protocols(); 958 959 mutex_unlock(&dev->lock); 960 961 IR_dprintk(1, "%s: allowed - 0x%llx, enabled - 0x%llx\n", 962 __func__, (long long)allowed, (long long)enabled); 963 964 for (i = 0; i < ARRAY_SIZE(proto_names); i++) { 965 if (allowed & enabled & proto_names[i].type) 966 tmp += sprintf(tmp, "[%s] ", proto_names[i].name); 967 else if (allowed & proto_names[i].type) 968 tmp += sprintf(tmp, "%s ", proto_names[i].name); 969 970 if (allowed & proto_names[i].type) 971 allowed &= ~proto_names[i].type; 972 } 973 974 if (dev->driver_type == RC_DRIVER_IR_RAW && lirc_is_present()) 975 tmp += sprintf(tmp, "[lirc] "); 976 977 if (tmp != buf) 978 tmp--; 979 *tmp = '\n'; 980 981 return tmp + 1 - buf; 982 } 983 984 /** 985 * parse_protocol_change() - parses a protocol change request 986 * @protocols: pointer to the bitmask of current protocols 987 * @buf: pointer to the buffer with a list of changes 988 * 989 * Writing "+proto" will add a protocol to the protocol mask. 990 * Writing "-proto" will remove a protocol from protocol mask. 991 * Writing "proto" will enable only "proto". 992 * Writing "none" will disable all protocols. 993 * Returns the number of changes performed or a negative error code. 994 */ 995 static int parse_protocol_change(u64 *protocols, const char *buf) 996 { 997 const char *tmp; 998 unsigned count = 0; 999 bool enable, disable; 1000 u64 mask; 1001 int i; 1002 1003 while ((tmp = strsep((char **)&buf, " \n")) != NULL) { 1004 if (!*tmp) 1005 break; 1006 1007 if (*tmp == '+') { 1008 enable = true; 1009 disable = false; 1010 tmp++; 1011 } else if (*tmp == '-') { 1012 enable = false; 1013 disable = true; 1014 tmp++; 1015 } else { 1016 enable = false; 1017 disable = false; 1018 } 1019 1020 for (i = 0; i < ARRAY_SIZE(proto_names); i++) { 1021 if (!strcasecmp(tmp, proto_names[i].name)) { 1022 mask = proto_names[i].type; 1023 break; 1024 } 1025 } 1026 1027 if (i == ARRAY_SIZE(proto_names)) { 1028 if (!strcasecmp(tmp, "lirc")) 1029 mask = 0; 1030 else { 1031 IR_dprintk(1, "Unknown protocol: '%s'\n", tmp); 1032 return -EINVAL; 1033 } 1034 } 1035 1036 count++; 1037 1038 if (enable) 1039 *protocols |= mask; 1040 else if (disable) 1041 *protocols &= ~mask; 1042 else 1043 *protocols = mask; 1044 } 1045 1046 if (!count) { 1047 IR_dprintk(1, "Protocol not specified\n"); 1048 return -EINVAL; 1049 } 1050 1051 return count; 1052 } 1053 1054 static void ir_raw_load_modules(u64 *protocols) 1055 { 1056 u64 available; 1057 int i, ret; 1058 1059 for (i = 0; i < ARRAY_SIZE(proto_names); i++) { 1060 if (proto_names[i].type == RC_BIT_NONE || 1061 proto_names[i].type & (RC_BIT_OTHER | RC_BIT_UNKNOWN)) 1062 continue; 1063 1064 available = ir_raw_get_allowed_protocols(); 1065 if (!(*protocols & proto_names[i].type & ~available)) 1066 continue; 1067 1068 if (!proto_names[i].module_name) { 1069 pr_err("Can't enable IR protocol %s\n", 1070 proto_names[i].name); 1071 *protocols &= ~proto_names[i].type; 1072 continue; 1073 } 1074 1075 ret = request_module("%s", proto_names[i].module_name); 1076 if (ret < 0) { 1077 pr_err("Couldn't load IR protocol module %s\n", 1078 proto_names[i].module_name); 1079 *protocols &= ~proto_names[i].type; 1080 continue; 1081 } 1082 msleep(20); 1083 available = ir_raw_get_allowed_protocols(); 1084 if (!(*protocols & proto_names[i].type & ~available)) 1085 continue; 1086 1087 pr_err("Loaded IR protocol module %s, but protocol %s still not available\n", 1088 proto_names[i].module_name, 1089 proto_names[i].name); 1090 *protocols &= ~proto_names[i].type; 1091 } 1092 } 1093 1094 /** 1095 * store_protocols() - changes the current/wakeup IR protocol(s) 1096 * @device: the device descriptor 1097 * @mattr: the device attribute struct 1098 * @buf: a pointer to the input buffer 1099 * @len: length of the input buffer 1100 * 1101 * This routine is for changing the IR protocol type. 1102 * It is trigged by writing to /sys/class/rc/rc?/[wakeup_]protocols. 1103 * See parse_protocol_change() for the valid commands. 1104 * Returns @len on success or a negative error code. 1105 * 1106 * dev->lock is taken to guard against races between device 1107 * registration, store_protocols and show_protocols. 1108 */ 1109 static ssize_t store_protocols(struct device *device, 1110 struct device_attribute *mattr, 1111 const char *buf, size_t len) 1112 { 1113 struct rc_dev *dev = to_rc_dev(device); 1114 u64 *current_protocols; 1115 struct rc_scancode_filter *filter; 1116 u64 old_protocols, new_protocols; 1117 ssize_t rc; 1118 1119 /* Device is being removed */ 1120 if (!dev) 1121 return -EINVAL; 1122 1123 if (!atomic_read(&dev->initialized)) 1124 return -ERESTARTSYS; 1125 1126 IR_dprintk(1, "Normal protocol change requested\n"); 1127 current_protocols = &dev->enabled_protocols; 1128 filter = &dev->scancode_filter; 1129 1130 if (!dev->change_protocol) { 1131 IR_dprintk(1, "Protocol switching not supported\n"); 1132 return -EINVAL; 1133 } 1134 1135 mutex_lock(&dev->lock); 1136 1137 old_protocols = *current_protocols; 1138 new_protocols = old_protocols; 1139 rc = parse_protocol_change(&new_protocols, buf); 1140 if (rc < 0) 1141 goto out; 1142 1143 rc = dev->change_protocol(dev, &new_protocols); 1144 if (rc < 0) { 1145 IR_dprintk(1, "Error setting protocols to 0x%llx\n", 1146 (long long)new_protocols); 1147 goto out; 1148 } 1149 1150 if (dev->driver_type == RC_DRIVER_IR_RAW) 1151 ir_raw_load_modules(&new_protocols); 1152 1153 if (new_protocols != old_protocols) { 1154 *current_protocols = new_protocols; 1155 IR_dprintk(1, "Protocols changed to 0x%llx\n", 1156 (long long)new_protocols); 1157 } 1158 1159 /* 1160 * If a protocol change was attempted the filter may need updating, even 1161 * if the actual protocol mask hasn't changed (since the driver may have 1162 * cleared the filter). 1163 * Try setting the same filter with the new protocol (if any). 1164 * Fall back to clearing the filter. 1165 */ 1166 if (dev->s_filter && filter->mask) { 1167 if (new_protocols) 1168 rc = dev->s_filter(dev, filter); 1169 else 1170 rc = -1; 1171 1172 if (rc < 0) { 1173 filter->data = 0; 1174 filter->mask = 0; 1175 dev->s_filter(dev, filter); 1176 } 1177 } 1178 1179 rc = len; 1180 1181 out: 1182 mutex_unlock(&dev->lock); 1183 return rc; 1184 } 1185 1186 /** 1187 * show_filter() - shows the current scancode filter value or mask 1188 * @device: the device descriptor 1189 * @attr: the device attribute struct 1190 * @buf: a pointer to the output buffer 1191 * 1192 * This routine is a callback routine to read a scancode filter value or mask. 1193 * It is trigged by reading /sys/class/rc/rc?/[wakeup_]filter[_mask]. 1194 * It prints the current scancode filter value or mask of the appropriate filter 1195 * type in hexadecimal into @buf and returns the size of the buffer. 1196 * 1197 * Bits of the filter value corresponding to set bits in the filter mask are 1198 * compared against input scancodes and non-matching scancodes are discarded. 1199 * 1200 * dev->lock is taken to guard against races between device registration, 1201 * store_filter and show_filter. 1202 */ 1203 static ssize_t show_filter(struct device *device, 1204 struct device_attribute *attr, 1205 char *buf) 1206 { 1207 struct rc_dev *dev = to_rc_dev(device); 1208 struct rc_filter_attribute *fattr = to_rc_filter_attr(attr); 1209 struct rc_scancode_filter *filter; 1210 u32 val; 1211 1212 /* Device is being removed */ 1213 if (!dev) 1214 return -EINVAL; 1215 1216 if (!atomic_read(&dev->initialized)) 1217 return -ERESTARTSYS; 1218 1219 mutex_lock(&dev->lock); 1220 1221 if (fattr->type == RC_FILTER_NORMAL) 1222 filter = &dev->scancode_filter; 1223 else 1224 filter = &dev->scancode_wakeup_filter; 1225 1226 if (fattr->mask) 1227 val = filter->mask; 1228 else 1229 val = filter->data; 1230 mutex_unlock(&dev->lock); 1231 1232 return sprintf(buf, "%#x\n", val); 1233 } 1234 1235 /** 1236 * store_filter() - changes the scancode filter value 1237 * @device: the device descriptor 1238 * @attr: the device attribute struct 1239 * @buf: a pointer to the input buffer 1240 * @len: length of the input buffer 1241 * 1242 * This routine is for changing a scancode filter value or mask. 1243 * It is trigged by writing to /sys/class/rc/rc?/[wakeup_]filter[_mask]. 1244 * Returns -EINVAL if an invalid filter value for the current protocol was 1245 * specified or if scancode filtering is not supported by the driver, otherwise 1246 * returns @len. 1247 * 1248 * Bits of the filter value corresponding to set bits in the filter mask are 1249 * compared against input scancodes and non-matching scancodes are discarded. 1250 * 1251 * dev->lock is taken to guard against races between device registration, 1252 * store_filter and show_filter. 1253 */ 1254 static ssize_t store_filter(struct device *device, 1255 struct device_attribute *attr, 1256 const char *buf, size_t len) 1257 { 1258 struct rc_dev *dev = to_rc_dev(device); 1259 struct rc_filter_attribute *fattr = to_rc_filter_attr(attr); 1260 struct rc_scancode_filter new_filter, *filter; 1261 int ret; 1262 unsigned long val; 1263 int (*set_filter)(struct rc_dev *dev, struct rc_scancode_filter *filter); 1264 1265 /* Device is being removed */ 1266 if (!dev) 1267 return -EINVAL; 1268 1269 if (!atomic_read(&dev->initialized)) 1270 return -ERESTARTSYS; 1271 1272 ret = kstrtoul(buf, 0, &val); 1273 if (ret < 0) 1274 return ret; 1275 1276 if (fattr->type == RC_FILTER_NORMAL) { 1277 set_filter = dev->s_filter; 1278 filter = &dev->scancode_filter; 1279 } else { 1280 set_filter = dev->s_wakeup_filter; 1281 filter = &dev->scancode_wakeup_filter; 1282 } 1283 1284 if (!set_filter) 1285 return -EINVAL; 1286 1287 mutex_lock(&dev->lock); 1288 1289 new_filter = *filter; 1290 if (fattr->mask) 1291 new_filter.mask = val; 1292 else 1293 new_filter.data = val; 1294 1295 if (fattr->type == RC_FILTER_WAKEUP) { 1296 /* 1297 * Refuse to set a filter unless a protocol is enabled 1298 * and the filter is valid for that protocol 1299 */ 1300 if (dev->wakeup_protocol != RC_TYPE_UNKNOWN) 1301 ret = rc_validate_filter(dev, &new_filter); 1302 else 1303 ret = -EINVAL; 1304 1305 if (ret != 0) 1306 goto unlock; 1307 } 1308 1309 if (fattr->type == RC_FILTER_NORMAL && !dev->enabled_protocols && 1310 val) { 1311 /* refuse to set a filter unless a protocol is enabled */ 1312 ret = -EINVAL; 1313 goto unlock; 1314 } 1315 1316 ret = set_filter(dev, &new_filter); 1317 if (ret < 0) 1318 goto unlock; 1319 1320 *filter = new_filter; 1321 1322 unlock: 1323 mutex_unlock(&dev->lock); 1324 return (ret < 0) ? ret : len; 1325 } 1326 1327 /* 1328 * This is the list of all variants of all protocols, which is used by 1329 * the wakeup_protocols sysfs entry. In the protocols sysfs entry some 1330 * some protocols are grouped together (e.g. nec = nec + necx + nec32). 1331 * 1332 * For wakeup we need to know the exact protocol variant so the hardware 1333 * can be programmed exactly what to expect. 1334 */ 1335 static const char * const proto_variant_names[] = { 1336 [RC_TYPE_UNKNOWN] = "unknown", 1337 [RC_TYPE_OTHER] = "other", 1338 [RC_TYPE_RC5] = "rc-5", 1339 [RC_TYPE_RC5X_20] = "rc-5x-20", 1340 [RC_TYPE_RC5_SZ] = "rc-5-sz", 1341 [RC_TYPE_JVC] = "jvc", 1342 [RC_TYPE_SONY12] = "sony-12", 1343 [RC_TYPE_SONY15] = "sony-15", 1344 [RC_TYPE_SONY20] = "sony-20", 1345 [RC_TYPE_NEC] = "nec", 1346 [RC_TYPE_NECX] = "nec-x", 1347 [RC_TYPE_NEC32] = "nec-32", 1348 [RC_TYPE_SANYO] = "sanyo", 1349 [RC_TYPE_MCE_KBD] = "mce_kbd", 1350 [RC_TYPE_RC6_0] = "rc-6-0", 1351 [RC_TYPE_RC6_6A_20] = "rc-6-6a-20", 1352 [RC_TYPE_RC6_6A_24] = "rc-6-6a-24", 1353 [RC_TYPE_RC6_6A_32] = "rc-6-6a-32", 1354 [RC_TYPE_RC6_MCE] = "rc-6-mce", 1355 [RC_TYPE_SHARP] = "sharp", 1356 [RC_TYPE_XMP] = "xmp", 1357 [RC_TYPE_CEC] = "cec", 1358 }; 1359 1360 /** 1361 * show_wakeup_protocols() - shows the wakeup IR protocol 1362 * @device: the device descriptor 1363 * @mattr: the device attribute struct 1364 * @buf: a pointer to the output buffer 1365 * 1366 * This routine is a callback routine for input read the IR protocol type(s). 1367 * it is trigged by reading /sys/class/rc/rc?/wakeup_protocols. 1368 * It returns the protocol names of supported protocols. 1369 * The enabled protocols are printed in brackets. 1370 * 1371 * dev->lock is taken to guard against races between device 1372 * registration, store_protocols and show_protocols. 1373 */ 1374 static ssize_t show_wakeup_protocols(struct device *device, 1375 struct device_attribute *mattr, 1376 char *buf) 1377 { 1378 struct rc_dev *dev = to_rc_dev(device); 1379 u64 allowed; 1380 enum rc_type enabled; 1381 char *tmp = buf; 1382 int i; 1383 1384 /* Device is being removed */ 1385 if (!dev) 1386 return -EINVAL; 1387 1388 if (!atomic_read(&dev->initialized)) 1389 return -ERESTARTSYS; 1390 1391 mutex_lock(&dev->lock); 1392 1393 allowed = dev->allowed_wakeup_protocols; 1394 enabled = dev->wakeup_protocol; 1395 1396 mutex_unlock(&dev->lock); 1397 1398 IR_dprintk(1, "%s: allowed - 0x%llx, enabled - %d\n", 1399 __func__, (long long)allowed, enabled); 1400 1401 for (i = 0; i < ARRAY_SIZE(proto_variant_names); i++) { 1402 if (allowed & (1ULL << i)) { 1403 if (i == enabled) 1404 tmp += sprintf(tmp, "[%s] ", 1405 proto_variant_names[i]); 1406 else 1407 tmp += sprintf(tmp, "%s ", 1408 proto_variant_names[i]); 1409 } 1410 } 1411 1412 if (tmp != buf) 1413 tmp--; 1414 *tmp = '\n'; 1415 1416 return tmp + 1 - buf; 1417 } 1418 1419 /** 1420 * store_wakeup_protocols() - changes the wakeup IR protocol(s) 1421 * @device: the device descriptor 1422 * @mattr: the device attribute struct 1423 * @buf: a pointer to the input buffer 1424 * @len: length of the input buffer 1425 * 1426 * This routine is for changing the IR protocol type. 1427 * It is trigged by writing to /sys/class/rc/rc?/wakeup_protocols. 1428 * Returns @len on success or a negative error code. 1429 * 1430 * dev->lock is taken to guard against races between device 1431 * registration, store_protocols and show_protocols. 1432 */ 1433 static ssize_t store_wakeup_protocols(struct device *device, 1434 struct device_attribute *mattr, 1435 const char *buf, size_t len) 1436 { 1437 struct rc_dev *dev = to_rc_dev(device); 1438 enum rc_type protocol; 1439 ssize_t rc; 1440 u64 allowed; 1441 int i; 1442 1443 /* Device is being removed */ 1444 if (!dev) 1445 return -EINVAL; 1446 1447 if (!atomic_read(&dev->initialized)) 1448 return -ERESTARTSYS; 1449 1450 mutex_lock(&dev->lock); 1451 1452 allowed = dev->allowed_wakeup_protocols; 1453 1454 if (sysfs_streq(buf, "none")) { 1455 protocol = RC_TYPE_UNKNOWN; 1456 } else { 1457 for (i = 0; i < ARRAY_SIZE(proto_variant_names); i++) { 1458 if ((allowed & (1ULL << i)) && 1459 sysfs_streq(buf, proto_variant_names[i])) { 1460 protocol = i; 1461 break; 1462 } 1463 } 1464 1465 if (i == ARRAY_SIZE(proto_variant_names)) { 1466 rc = -EINVAL; 1467 goto out; 1468 } 1469 1470 if (dev->encode_wakeup) { 1471 u64 mask = 1ULL << protocol; 1472 1473 ir_raw_load_modules(&mask); 1474 if (!mask) { 1475 rc = -EINVAL; 1476 goto out; 1477 } 1478 } 1479 } 1480 1481 if (dev->wakeup_protocol != protocol) { 1482 dev->wakeup_protocol = protocol; 1483 IR_dprintk(1, "Wakeup protocol changed to %d\n", protocol); 1484 1485 if (protocol == RC_TYPE_RC6_MCE) 1486 dev->scancode_wakeup_filter.data = 0x800f0000; 1487 else 1488 dev->scancode_wakeup_filter.data = 0; 1489 dev->scancode_wakeup_filter.mask = 0; 1490 1491 rc = dev->s_wakeup_filter(dev, &dev->scancode_wakeup_filter); 1492 if (rc == 0) 1493 rc = len; 1494 } else { 1495 rc = len; 1496 } 1497 1498 out: 1499 mutex_unlock(&dev->lock); 1500 return rc; 1501 } 1502 1503 static void rc_dev_release(struct device *device) 1504 { 1505 struct rc_dev *dev = to_rc_dev(device); 1506 1507 kfree(dev); 1508 } 1509 1510 #define ADD_HOTPLUG_VAR(fmt, val...) \ 1511 do { \ 1512 int err = add_uevent_var(env, fmt, val); \ 1513 if (err) \ 1514 return err; \ 1515 } while (0) 1516 1517 static int rc_dev_uevent(struct device *device, struct kobj_uevent_env *env) 1518 { 1519 struct rc_dev *dev = to_rc_dev(device); 1520 1521 if (dev->rc_map.name) 1522 ADD_HOTPLUG_VAR("NAME=%s", dev->rc_map.name); 1523 if (dev->driver_name) 1524 ADD_HOTPLUG_VAR("DRV_NAME=%s", dev->driver_name); 1525 1526 return 0; 1527 } 1528 1529 /* 1530 * Static device attribute struct with the sysfs attributes for IR's 1531 */ 1532 static DEVICE_ATTR(protocols, 0644, show_protocols, store_protocols); 1533 static DEVICE_ATTR(wakeup_protocols, 0644, show_wakeup_protocols, 1534 store_wakeup_protocols); 1535 static RC_FILTER_ATTR(filter, S_IRUGO|S_IWUSR, 1536 show_filter, store_filter, RC_FILTER_NORMAL, false); 1537 static RC_FILTER_ATTR(filter_mask, S_IRUGO|S_IWUSR, 1538 show_filter, store_filter, RC_FILTER_NORMAL, true); 1539 static RC_FILTER_ATTR(wakeup_filter, S_IRUGO|S_IWUSR, 1540 show_filter, store_filter, RC_FILTER_WAKEUP, false); 1541 static RC_FILTER_ATTR(wakeup_filter_mask, S_IRUGO|S_IWUSR, 1542 show_filter, store_filter, RC_FILTER_WAKEUP, true); 1543 1544 static struct attribute *rc_dev_protocol_attrs[] = { 1545 &dev_attr_protocols.attr, 1546 NULL, 1547 }; 1548 1549 static struct attribute_group rc_dev_protocol_attr_grp = { 1550 .attrs = rc_dev_protocol_attrs, 1551 }; 1552 1553 static struct attribute *rc_dev_filter_attrs[] = { 1554 &dev_attr_filter.attr.attr, 1555 &dev_attr_filter_mask.attr.attr, 1556 NULL, 1557 }; 1558 1559 static struct attribute_group rc_dev_filter_attr_grp = { 1560 .attrs = rc_dev_filter_attrs, 1561 }; 1562 1563 static struct attribute *rc_dev_wakeup_filter_attrs[] = { 1564 &dev_attr_wakeup_filter.attr.attr, 1565 &dev_attr_wakeup_filter_mask.attr.attr, 1566 &dev_attr_wakeup_protocols.attr, 1567 NULL, 1568 }; 1569 1570 static struct attribute_group rc_dev_wakeup_filter_attr_grp = { 1571 .attrs = rc_dev_wakeup_filter_attrs, 1572 }; 1573 1574 static struct device_type rc_dev_type = { 1575 .release = rc_dev_release, 1576 .uevent = rc_dev_uevent, 1577 }; 1578 1579 struct rc_dev *rc_allocate_device(enum rc_driver_type type) 1580 { 1581 struct rc_dev *dev; 1582 1583 dev = kzalloc(sizeof(*dev), GFP_KERNEL); 1584 if (!dev) 1585 return NULL; 1586 1587 if (type != RC_DRIVER_IR_RAW_TX) { 1588 dev->input_dev = input_allocate_device(); 1589 if (!dev->input_dev) { 1590 kfree(dev); 1591 return NULL; 1592 } 1593 1594 dev->input_dev->getkeycode = ir_getkeycode; 1595 dev->input_dev->setkeycode = ir_setkeycode; 1596 input_set_drvdata(dev->input_dev, dev); 1597 1598 setup_timer(&dev->timer_keyup, ir_timer_keyup, 1599 (unsigned long)dev); 1600 1601 spin_lock_init(&dev->rc_map.lock); 1602 spin_lock_init(&dev->keylock); 1603 } 1604 mutex_init(&dev->lock); 1605 1606 dev->dev.type = &rc_dev_type; 1607 dev->dev.class = &rc_class; 1608 device_initialize(&dev->dev); 1609 1610 dev->driver_type = type; 1611 1612 __module_get(THIS_MODULE); 1613 return dev; 1614 } 1615 EXPORT_SYMBOL_GPL(rc_allocate_device); 1616 1617 void rc_free_device(struct rc_dev *dev) 1618 { 1619 if (!dev) 1620 return; 1621 1622 input_free_device(dev->input_dev); 1623 1624 put_device(&dev->dev); 1625 1626 /* kfree(dev) will be called by the callback function 1627 rc_dev_release() */ 1628 1629 module_put(THIS_MODULE); 1630 } 1631 EXPORT_SYMBOL_GPL(rc_free_device); 1632 1633 static void devm_rc_alloc_release(struct device *dev, void *res) 1634 { 1635 rc_free_device(*(struct rc_dev **)res); 1636 } 1637 1638 struct rc_dev *devm_rc_allocate_device(struct device *dev, 1639 enum rc_driver_type type) 1640 { 1641 struct rc_dev **dr, *rc; 1642 1643 dr = devres_alloc(devm_rc_alloc_release, sizeof(*dr), GFP_KERNEL); 1644 if (!dr) 1645 return NULL; 1646 1647 rc = rc_allocate_device(type); 1648 if (!rc) { 1649 devres_free(dr); 1650 return NULL; 1651 } 1652 1653 rc->dev.parent = dev; 1654 rc->managed_alloc = true; 1655 *dr = rc; 1656 devres_add(dev, dr); 1657 1658 return rc; 1659 } 1660 EXPORT_SYMBOL_GPL(devm_rc_allocate_device); 1661 1662 static int rc_setup_rx_device(struct rc_dev *dev) 1663 { 1664 int rc; 1665 struct rc_map *rc_map; 1666 1667 if (!dev->map_name) 1668 return -EINVAL; 1669 1670 rc_map = rc_map_get(dev->map_name); 1671 if (!rc_map) 1672 rc_map = rc_map_get(RC_MAP_EMPTY); 1673 if (!rc_map || !rc_map->scan || rc_map->size == 0) 1674 return -EINVAL; 1675 1676 rc = ir_setkeytable(dev, rc_map); 1677 if (rc) 1678 return rc; 1679 1680 if (dev->change_protocol) { 1681 u64 rc_type = (1ll << rc_map->rc_type); 1682 1683 rc = dev->change_protocol(dev, &rc_type); 1684 if (rc < 0) 1685 goto out_table; 1686 dev->enabled_protocols = rc_type; 1687 } 1688 1689 set_bit(EV_KEY, dev->input_dev->evbit); 1690 set_bit(EV_REP, dev->input_dev->evbit); 1691 set_bit(EV_MSC, dev->input_dev->evbit); 1692 set_bit(MSC_SCAN, dev->input_dev->mscbit); 1693 if (dev->open) 1694 dev->input_dev->open = ir_open; 1695 if (dev->close) 1696 dev->input_dev->close = ir_close; 1697 1698 /* 1699 * Default delay of 250ms is too short for some protocols, especially 1700 * since the timeout is currently set to 250ms. Increase it to 500ms, 1701 * to avoid wrong repetition of the keycodes. Note that this must be 1702 * set after the call to input_register_device(). 1703 */ 1704 dev->input_dev->rep[REP_DELAY] = 500; 1705 1706 /* 1707 * As a repeat event on protocols like RC-5 and NEC take as long as 1708 * 110/114ms, using 33ms as a repeat period is not the right thing 1709 * to do. 1710 */ 1711 dev->input_dev->rep[REP_PERIOD] = 125; 1712 1713 dev->input_dev->dev.parent = &dev->dev; 1714 memcpy(&dev->input_dev->id, &dev->input_id, sizeof(dev->input_id)); 1715 dev->input_dev->phys = dev->input_phys; 1716 dev->input_dev->name = dev->input_name; 1717 1718 /* rc_open will be called here */ 1719 rc = input_register_device(dev->input_dev); 1720 if (rc) 1721 goto out_table; 1722 1723 return 0; 1724 1725 out_table: 1726 ir_free_table(&dev->rc_map); 1727 1728 return rc; 1729 } 1730 1731 static void rc_free_rx_device(struct rc_dev *dev) 1732 { 1733 if (!dev || dev->driver_type == RC_DRIVER_IR_RAW_TX) 1734 return; 1735 1736 ir_free_table(&dev->rc_map); 1737 1738 input_unregister_device(dev->input_dev); 1739 dev->input_dev = NULL; 1740 } 1741 1742 int rc_register_device(struct rc_dev *dev) 1743 { 1744 static bool raw_init; /* 'false' default value, raw decoders loaded? */ 1745 const char *path; 1746 int attr = 0; 1747 int minor; 1748 int rc; 1749 1750 if (!dev) 1751 return -EINVAL; 1752 1753 minor = ida_simple_get(&rc_ida, 0, RC_DEV_MAX, GFP_KERNEL); 1754 if (minor < 0) 1755 return minor; 1756 1757 dev->minor = minor; 1758 dev_set_name(&dev->dev, "rc%u", dev->minor); 1759 dev_set_drvdata(&dev->dev, dev); 1760 atomic_set(&dev->initialized, 0); 1761 1762 dev->dev.groups = dev->sysfs_groups; 1763 if (dev->driver_type != RC_DRIVER_IR_RAW_TX) 1764 dev->sysfs_groups[attr++] = &rc_dev_protocol_attr_grp; 1765 if (dev->s_filter) 1766 dev->sysfs_groups[attr++] = &rc_dev_filter_attr_grp; 1767 if (dev->s_wakeup_filter) 1768 dev->sysfs_groups[attr++] = &rc_dev_wakeup_filter_attr_grp; 1769 dev->sysfs_groups[attr++] = NULL; 1770 1771 rc = device_add(&dev->dev); 1772 if (rc) 1773 goto out_unlock; 1774 1775 path = kobject_get_path(&dev->dev.kobj, GFP_KERNEL); 1776 dev_info(&dev->dev, "%s as %s\n", 1777 dev->input_name ?: "Unspecified device", path ?: "N/A"); 1778 kfree(path); 1779 1780 if (dev->driver_type != RC_DRIVER_IR_RAW_TX) { 1781 rc = rc_setup_rx_device(dev); 1782 if (rc) 1783 goto out_dev; 1784 } 1785 1786 if (dev->driver_type == RC_DRIVER_IR_RAW || 1787 dev->driver_type == RC_DRIVER_IR_RAW_TX) { 1788 if (!raw_init) { 1789 request_module_nowait("ir-lirc-codec"); 1790 raw_init = true; 1791 } 1792 rc = ir_raw_event_register(dev); 1793 if (rc < 0) 1794 goto out_rx; 1795 } 1796 1797 /* Allow the RC sysfs nodes to be accessible */ 1798 atomic_set(&dev->initialized, 1); 1799 1800 IR_dprintk(1, "Registered rc%u (driver: %s)\n", 1801 dev->minor, 1802 dev->driver_name ? dev->driver_name : "unknown"); 1803 1804 return 0; 1805 1806 out_rx: 1807 rc_free_rx_device(dev); 1808 out_dev: 1809 device_del(&dev->dev); 1810 out_unlock: 1811 ida_simple_remove(&rc_ida, minor); 1812 return rc; 1813 } 1814 EXPORT_SYMBOL_GPL(rc_register_device); 1815 1816 static void devm_rc_release(struct device *dev, void *res) 1817 { 1818 rc_unregister_device(*(struct rc_dev **)res); 1819 } 1820 1821 int devm_rc_register_device(struct device *parent, struct rc_dev *dev) 1822 { 1823 struct rc_dev **dr; 1824 int ret; 1825 1826 dr = devres_alloc(devm_rc_release, sizeof(*dr), GFP_KERNEL); 1827 if (!dr) 1828 return -ENOMEM; 1829 1830 ret = rc_register_device(dev); 1831 if (ret) { 1832 devres_free(dr); 1833 return ret; 1834 } 1835 1836 *dr = dev; 1837 devres_add(parent, dr); 1838 1839 return 0; 1840 } 1841 EXPORT_SYMBOL_GPL(devm_rc_register_device); 1842 1843 void rc_unregister_device(struct rc_dev *dev) 1844 { 1845 if (!dev) 1846 return; 1847 1848 del_timer_sync(&dev->timer_keyup); 1849 1850 if (dev->driver_type == RC_DRIVER_IR_RAW) 1851 ir_raw_event_unregister(dev); 1852 1853 rc_free_rx_device(dev); 1854 1855 device_del(&dev->dev); 1856 1857 ida_simple_remove(&rc_ida, dev->minor); 1858 1859 if (!dev->managed_alloc) 1860 rc_free_device(dev); 1861 } 1862 1863 EXPORT_SYMBOL_GPL(rc_unregister_device); 1864 1865 /* 1866 * Init/exit code for the module. Basically, creates/removes /sys/class/rc 1867 */ 1868 1869 static int __init rc_core_init(void) 1870 { 1871 int rc = class_register(&rc_class); 1872 if (rc) { 1873 pr_err("rc_core: unable to register rc class\n"); 1874 return rc; 1875 } 1876 1877 led_trigger_register_simple("rc-feedback", &led_feedback); 1878 rc_map_register(&empty_map); 1879 1880 return 0; 1881 } 1882 1883 static void __exit rc_core_exit(void) 1884 { 1885 class_unregister(&rc_class); 1886 led_trigger_unregister_simple(led_feedback); 1887 rc_map_unregister(&empty_map); 1888 } 1889 1890 subsys_initcall(rc_core_init); 1891 module_exit(rc_core_exit); 1892 1893 int rc_core_debug; /* ir_debug level (0,1,2) */ 1894 EXPORT_SYMBOL_GPL(rc_core_debug); 1895 module_param_named(debug, rc_core_debug, int, 0644); 1896 1897 MODULE_AUTHOR("Mauro Carvalho Chehab"); 1898 MODULE_LICENSE("GPL"); 1899