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_MCIR2_KBD] = 0xffff, 750 [RC_TYPE_MCIR2_MSE] = 0x1fffff, 751 [RC_TYPE_RC6_0] = 0xffff, 752 [RC_TYPE_RC6_6A_20] = 0xfffff, 753 [RC_TYPE_RC6_6A_24] = 0xffffff, 754 [RC_TYPE_RC6_6A_32] = 0xffffffff, 755 [RC_TYPE_RC6_MCE] = 0xffff7fff, 756 [RC_TYPE_SHARP] = 0x1fff, 757 }; 758 u32 s = filter->data; 759 enum rc_type protocol = dev->wakeup_protocol; 760 761 switch (protocol) { 762 case RC_TYPE_NECX: 763 if ((((s >> 16) ^ ~(s >> 8)) & 0xff) == 0) 764 return -EINVAL; 765 break; 766 case RC_TYPE_NEC32: 767 if ((((s >> 24) ^ ~(s >> 16)) & 0xff) == 0) 768 return -EINVAL; 769 break; 770 case RC_TYPE_RC6_MCE: 771 if ((s & 0xffff0000) != 0x800f0000) 772 return -EINVAL; 773 break; 774 case RC_TYPE_RC6_6A_32: 775 if ((s & 0xffff0000) == 0x800f0000) 776 return -EINVAL; 777 break; 778 default: 779 break; 780 } 781 782 filter->data &= masks[protocol]; 783 filter->mask &= masks[protocol]; 784 785 /* 786 * If we have to raw encode the IR for wakeup, we cannot have a mask 787 */ 788 if (dev->encode_wakeup && 789 filter->mask != 0 && filter->mask != masks[protocol]) 790 return -EINVAL; 791 792 return 0; 793 } 794 795 int rc_open(struct rc_dev *rdev) 796 { 797 int rval = 0; 798 799 if (!rdev) 800 return -EINVAL; 801 802 mutex_lock(&rdev->lock); 803 804 if (!rdev->users++ && rdev->open != NULL) 805 rval = rdev->open(rdev); 806 807 if (rval) 808 rdev->users--; 809 810 mutex_unlock(&rdev->lock); 811 812 return rval; 813 } 814 EXPORT_SYMBOL_GPL(rc_open); 815 816 static int ir_open(struct input_dev *idev) 817 { 818 struct rc_dev *rdev = input_get_drvdata(idev); 819 820 return rc_open(rdev); 821 } 822 823 void rc_close(struct rc_dev *rdev) 824 { 825 if (rdev) { 826 mutex_lock(&rdev->lock); 827 828 if (!--rdev->users && rdev->close != NULL) 829 rdev->close(rdev); 830 831 mutex_unlock(&rdev->lock); 832 } 833 } 834 EXPORT_SYMBOL_GPL(rc_close); 835 836 static void ir_close(struct input_dev *idev) 837 { 838 struct rc_dev *rdev = input_get_drvdata(idev); 839 rc_close(rdev); 840 } 841 842 /* class for /sys/class/rc */ 843 static char *rc_devnode(struct device *dev, umode_t *mode) 844 { 845 return kasprintf(GFP_KERNEL, "rc/%s", dev_name(dev)); 846 } 847 848 static struct class rc_class = { 849 .name = "rc", 850 .devnode = rc_devnode, 851 }; 852 853 /* 854 * These are the protocol textual descriptions that are 855 * used by the sysfs protocols file. Note that the order 856 * of the entries is relevant. 857 */ 858 static const struct { 859 u64 type; 860 const char *name; 861 const char *module_name; 862 } proto_names[] = { 863 { RC_BIT_NONE, "none", NULL }, 864 { RC_BIT_OTHER, "other", NULL }, 865 { RC_BIT_UNKNOWN, "unknown", NULL }, 866 { RC_BIT_RC5 | 867 RC_BIT_RC5X_20, "rc-5", "ir-rc5-decoder" }, 868 { RC_BIT_NEC | 869 RC_BIT_NECX | 870 RC_BIT_NEC32, "nec", "ir-nec-decoder" }, 871 { RC_BIT_RC6_0 | 872 RC_BIT_RC6_6A_20 | 873 RC_BIT_RC6_6A_24 | 874 RC_BIT_RC6_6A_32 | 875 RC_BIT_RC6_MCE, "rc-6", "ir-rc6-decoder" }, 876 { RC_BIT_JVC, "jvc", "ir-jvc-decoder" }, 877 { RC_BIT_SONY12 | 878 RC_BIT_SONY15 | 879 RC_BIT_SONY20, "sony", "ir-sony-decoder" }, 880 { RC_BIT_RC5_SZ, "rc-5-sz", "ir-rc5-decoder" }, 881 { RC_BIT_SANYO, "sanyo", "ir-sanyo-decoder" }, 882 { RC_BIT_SHARP, "sharp", "ir-sharp-decoder" }, 883 { RC_BIT_MCIR2_KBD | 884 RC_BIT_MCIR2_MSE, "mce_kbd", "ir-mce_kbd-decoder" }, 885 { RC_BIT_XMP, "xmp", "ir-xmp-decoder" }, 886 { RC_BIT_CEC, "cec", NULL }, 887 }; 888 889 /** 890 * struct rc_filter_attribute - Device attribute relating to a filter type. 891 * @attr: Device attribute. 892 * @type: Filter type. 893 * @mask: false for filter value, true for filter mask. 894 */ 895 struct rc_filter_attribute { 896 struct device_attribute attr; 897 enum rc_filter_type type; 898 bool mask; 899 }; 900 #define to_rc_filter_attr(a) container_of(a, struct rc_filter_attribute, attr) 901 902 #define RC_FILTER_ATTR(_name, _mode, _show, _store, _type, _mask) \ 903 struct rc_filter_attribute dev_attr_##_name = { \ 904 .attr = __ATTR(_name, _mode, _show, _store), \ 905 .type = (_type), \ 906 .mask = (_mask), \ 907 } 908 909 static bool lirc_is_present(void) 910 { 911 #if defined(CONFIG_LIRC_MODULE) 912 struct module *lirc; 913 914 mutex_lock(&module_mutex); 915 lirc = find_module("lirc_dev"); 916 mutex_unlock(&module_mutex); 917 918 return lirc ? true : false; 919 #elif defined(CONFIG_LIRC) 920 return true; 921 #else 922 return false; 923 #endif 924 } 925 926 /** 927 * show_protocols() - shows the current IR protocol(s) 928 * @device: the device descriptor 929 * @mattr: the device attribute struct 930 * @buf: a pointer to the output buffer 931 * 932 * This routine is a callback routine for input read the IR protocol type(s). 933 * it is trigged by reading /sys/class/rc/rc?/protocols. 934 * It returns the protocol names of supported protocols. 935 * Enabled protocols are printed in brackets. 936 * 937 * dev->lock is taken to guard against races between device 938 * registration, store_protocols and show_protocols. 939 */ 940 static ssize_t show_protocols(struct device *device, 941 struct device_attribute *mattr, char *buf) 942 { 943 struct rc_dev *dev = to_rc_dev(device); 944 u64 allowed, enabled; 945 char *tmp = buf; 946 int i; 947 948 /* Device is being removed */ 949 if (!dev) 950 return -EINVAL; 951 952 if (!atomic_read(&dev->initialized)) 953 return -ERESTARTSYS; 954 955 mutex_lock(&dev->lock); 956 957 enabled = dev->enabled_protocols; 958 allowed = dev->allowed_protocols; 959 if (dev->raw && !allowed) 960 allowed = ir_raw_get_allowed_protocols(); 961 962 mutex_unlock(&dev->lock); 963 964 IR_dprintk(1, "%s: allowed - 0x%llx, enabled - 0x%llx\n", 965 __func__, (long long)allowed, (long long)enabled); 966 967 for (i = 0; i < ARRAY_SIZE(proto_names); i++) { 968 if (allowed & enabled & proto_names[i].type) 969 tmp += sprintf(tmp, "[%s] ", proto_names[i].name); 970 else if (allowed & proto_names[i].type) 971 tmp += sprintf(tmp, "%s ", proto_names[i].name); 972 973 if (allowed & proto_names[i].type) 974 allowed &= ~proto_names[i].type; 975 } 976 977 if (dev->driver_type == RC_DRIVER_IR_RAW && lirc_is_present()) 978 tmp += sprintf(tmp, "[lirc] "); 979 980 if (tmp != buf) 981 tmp--; 982 *tmp = '\n'; 983 984 return tmp + 1 - buf; 985 } 986 987 /** 988 * parse_protocol_change() - parses a protocol change request 989 * @protocols: pointer to the bitmask of current protocols 990 * @buf: pointer to the buffer with a list of changes 991 * 992 * Writing "+proto" will add a protocol to the protocol mask. 993 * Writing "-proto" will remove a protocol from protocol mask. 994 * Writing "proto" will enable only "proto". 995 * Writing "none" will disable all protocols. 996 * Returns the number of changes performed or a negative error code. 997 */ 998 static int parse_protocol_change(u64 *protocols, const char *buf) 999 { 1000 const char *tmp; 1001 unsigned count = 0; 1002 bool enable, disable; 1003 u64 mask; 1004 int i; 1005 1006 while ((tmp = strsep((char **)&buf, " \n")) != NULL) { 1007 if (!*tmp) 1008 break; 1009 1010 if (*tmp == '+') { 1011 enable = true; 1012 disable = false; 1013 tmp++; 1014 } else if (*tmp == '-') { 1015 enable = false; 1016 disable = true; 1017 tmp++; 1018 } else { 1019 enable = false; 1020 disable = false; 1021 } 1022 1023 for (i = 0; i < ARRAY_SIZE(proto_names); i++) { 1024 if (!strcasecmp(tmp, proto_names[i].name)) { 1025 mask = proto_names[i].type; 1026 break; 1027 } 1028 } 1029 1030 if (i == ARRAY_SIZE(proto_names)) { 1031 if (!strcasecmp(tmp, "lirc")) 1032 mask = 0; 1033 else { 1034 IR_dprintk(1, "Unknown protocol: '%s'\n", tmp); 1035 return -EINVAL; 1036 } 1037 } 1038 1039 count++; 1040 1041 if (enable) 1042 *protocols |= mask; 1043 else if (disable) 1044 *protocols &= ~mask; 1045 else 1046 *protocols = mask; 1047 } 1048 1049 if (!count) { 1050 IR_dprintk(1, "Protocol not specified\n"); 1051 return -EINVAL; 1052 } 1053 1054 return count; 1055 } 1056 1057 static void ir_raw_load_modules(u64 *protocols) 1058 { 1059 u64 available; 1060 int i, ret; 1061 1062 for (i = 0; i < ARRAY_SIZE(proto_names); i++) { 1063 if (proto_names[i].type == RC_BIT_NONE || 1064 proto_names[i].type & (RC_BIT_OTHER | RC_BIT_UNKNOWN)) 1065 continue; 1066 1067 available = ir_raw_get_allowed_protocols(); 1068 if (!(*protocols & proto_names[i].type & ~available)) 1069 continue; 1070 1071 if (!proto_names[i].module_name) { 1072 pr_err("Can't enable IR protocol %s\n", 1073 proto_names[i].name); 1074 *protocols &= ~proto_names[i].type; 1075 continue; 1076 } 1077 1078 ret = request_module("%s", proto_names[i].module_name); 1079 if (ret < 0) { 1080 pr_err("Couldn't load IR protocol module %s\n", 1081 proto_names[i].module_name); 1082 *protocols &= ~proto_names[i].type; 1083 continue; 1084 } 1085 msleep(20); 1086 available = ir_raw_get_allowed_protocols(); 1087 if (!(*protocols & proto_names[i].type & ~available)) 1088 continue; 1089 1090 pr_err("Loaded IR protocol module %s, but protocol %s still not available\n", 1091 proto_names[i].module_name, 1092 proto_names[i].name); 1093 *protocols &= ~proto_names[i].type; 1094 } 1095 } 1096 1097 /** 1098 * store_protocols() - changes the current/wakeup IR protocol(s) 1099 * @device: the device descriptor 1100 * @mattr: the device attribute struct 1101 * @buf: a pointer to the input buffer 1102 * @len: length of the input buffer 1103 * 1104 * This routine is for changing the IR protocol type. 1105 * It is trigged by writing to /sys/class/rc/rc?/[wakeup_]protocols. 1106 * See parse_protocol_change() for the valid commands. 1107 * Returns @len on success or a negative error code. 1108 * 1109 * dev->lock is taken to guard against races between device 1110 * registration, store_protocols and show_protocols. 1111 */ 1112 static ssize_t store_protocols(struct device *device, 1113 struct device_attribute *mattr, 1114 const char *buf, size_t len) 1115 { 1116 struct rc_dev *dev = to_rc_dev(device); 1117 u64 *current_protocols; 1118 struct rc_scancode_filter *filter; 1119 u64 old_protocols, new_protocols; 1120 ssize_t rc; 1121 1122 /* Device is being removed */ 1123 if (!dev) 1124 return -EINVAL; 1125 1126 if (!atomic_read(&dev->initialized)) 1127 return -ERESTARTSYS; 1128 1129 IR_dprintk(1, "Normal protocol change requested\n"); 1130 current_protocols = &dev->enabled_protocols; 1131 filter = &dev->scancode_filter; 1132 1133 if (!dev->change_protocol) { 1134 IR_dprintk(1, "Protocol switching not supported\n"); 1135 return -EINVAL; 1136 } 1137 1138 mutex_lock(&dev->lock); 1139 1140 old_protocols = *current_protocols; 1141 new_protocols = old_protocols; 1142 rc = parse_protocol_change(&new_protocols, buf); 1143 if (rc < 0) 1144 goto out; 1145 1146 rc = dev->change_protocol(dev, &new_protocols); 1147 if (rc < 0) { 1148 IR_dprintk(1, "Error setting protocols to 0x%llx\n", 1149 (long long)new_protocols); 1150 goto out; 1151 } 1152 1153 if (dev->driver_type == RC_DRIVER_IR_RAW) 1154 ir_raw_load_modules(&new_protocols); 1155 1156 if (new_protocols != old_protocols) { 1157 *current_protocols = new_protocols; 1158 IR_dprintk(1, "Protocols changed to 0x%llx\n", 1159 (long long)new_protocols); 1160 } 1161 1162 /* 1163 * If a protocol change was attempted the filter may need updating, even 1164 * if the actual protocol mask hasn't changed (since the driver may have 1165 * cleared the filter). 1166 * Try setting the same filter with the new protocol (if any). 1167 * Fall back to clearing the filter. 1168 */ 1169 if (dev->s_filter && filter->mask) { 1170 if (new_protocols) 1171 rc = dev->s_filter(dev, filter); 1172 else 1173 rc = -1; 1174 1175 if (rc < 0) { 1176 filter->data = 0; 1177 filter->mask = 0; 1178 dev->s_filter(dev, filter); 1179 } 1180 } 1181 1182 rc = len; 1183 1184 out: 1185 mutex_unlock(&dev->lock); 1186 return rc; 1187 } 1188 1189 /** 1190 * show_filter() - shows the current scancode filter value or mask 1191 * @device: the device descriptor 1192 * @attr: the device attribute struct 1193 * @buf: a pointer to the output buffer 1194 * 1195 * This routine is a callback routine to read a scancode filter value or mask. 1196 * It is trigged by reading /sys/class/rc/rc?/[wakeup_]filter[_mask]. 1197 * It prints the current scancode filter value or mask of the appropriate filter 1198 * type in hexadecimal into @buf and returns the size of the buffer. 1199 * 1200 * Bits of the filter value corresponding to set bits in the filter mask are 1201 * compared against input scancodes and non-matching scancodes are discarded. 1202 * 1203 * dev->lock is taken to guard against races between device registration, 1204 * store_filter and show_filter. 1205 */ 1206 static ssize_t show_filter(struct device *device, 1207 struct device_attribute *attr, 1208 char *buf) 1209 { 1210 struct rc_dev *dev = to_rc_dev(device); 1211 struct rc_filter_attribute *fattr = to_rc_filter_attr(attr); 1212 struct rc_scancode_filter *filter; 1213 u32 val; 1214 1215 /* Device is being removed */ 1216 if (!dev) 1217 return -EINVAL; 1218 1219 if (!atomic_read(&dev->initialized)) 1220 return -ERESTARTSYS; 1221 1222 mutex_lock(&dev->lock); 1223 1224 if (fattr->type == RC_FILTER_NORMAL) 1225 filter = &dev->scancode_filter; 1226 else 1227 filter = &dev->scancode_wakeup_filter; 1228 1229 if (fattr->mask) 1230 val = filter->mask; 1231 else 1232 val = filter->data; 1233 mutex_unlock(&dev->lock); 1234 1235 return sprintf(buf, "%#x\n", val); 1236 } 1237 1238 /** 1239 * store_filter() - changes the scancode filter value 1240 * @device: the device descriptor 1241 * @attr: the device attribute struct 1242 * @buf: a pointer to the input buffer 1243 * @len: length of the input buffer 1244 * 1245 * This routine is for changing a scancode filter value or mask. 1246 * It is trigged by writing to /sys/class/rc/rc?/[wakeup_]filter[_mask]. 1247 * Returns -EINVAL if an invalid filter value for the current protocol was 1248 * specified or if scancode filtering is not supported by the driver, otherwise 1249 * returns @len. 1250 * 1251 * Bits of the filter value corresponding to set bits in the filter mask are 1252 * compared against input scancodes and non-matching scancodes are discarded. 1253 * 1254 * dev->lock is taken to guard against races between device registration, 1255 * store_filter and show_filter. 1256 */ 1257 static ssize_t store_filter(struct device *device, 1258 struct device_attribute *attr, 1259 const char *buf, size_t len) 1260 { 1261 struct rc_dev *dev = to_rc_dev(device); 1262 struct rc_filter_attribute *fattr = to_rc_filter_attr(attr); 1263 struct rc_scancode_filter new_filter, *filter; 1264 int ret; 1265 unsigned long val; 1266 int (*set_filter)(struct rc_dev *dev, struct rc_scancode_filter *filter); 1267 1268 /* Device is being removed */ 1269 if (!dev) 1270 return -EINVAL; 1271 1272 if (!atomic_read(&dev->initialized)) 1273 return -ERESTARTSYS; 1274 1275 ret = kstrtoul(buf, 0, &val); 1276 if (ret < 0) 1277 return ret; 1278 1279 if (fattr->type == RC_FILTER_NORMAL) { 1280 set_filter = dev->s_filter; 1281 filter = &dev->scancode_filter; 1282 } else { 1283 set_filter = dev->s_wakeup_filter; 1284 filter = &dev->scancode_wakeup_filter; 1285 } 1286 1287 if (!set_filter) 1288 return -EINVAL; 1289 1290 mutex_lock(&dev->lock); 1291 1292 new_filter = *filter; 1293 if (fattr->mask) 1294 new_filter.mask = val; 1295 else 1296 new_filter.data = val; 1297 1298 if (fattr->type == RC_FILTER_WAKEUP) { 1299 /* 1300 * Refuse to set a filter unless a protocol is enabled 1301 * and the filter is valid for that protocol 1302 */ 1303 if (dev->wakeup_protocol != RC_TYPE_UNKNOWN) 1304 ret = rc_validate_filter(dev, &new_filter); 1305 else 1306 ret = -EINVAL; 1307 1308 if (ret != 0) 1309 goto unlock; 1310 } 1311 1312 if (fattr->type == RC_FILTER_NORMAL && !dev->enabled_protocols && 1313 val) { 1314 /* refuse to set a filter unless a protocol is enabled */ 1315 ret = -EINVAL; 1316 goto unlock; 1317 } 1318 1319 ret = set_filter(dev, &new_filter); 1320 if (ret < 0) 1321 goto unlock; 1322 1323 *filter = new_filter; 1324 1325 unlock: 1326 mutex_unlock(&dev->lock); 1327 return (ret < 0) ? ret : len; 1328 } 1329 1330 /* 1331 * This is the list of all variants of all protocols, which is used by 1332 * the wakeup_protocols sysfs entry. In the protocols sysfs entry some 1333 * some protocols are grouped together (e.g. nec = nec + necx + nec32). 1334 * 1335 * For wakeup we need to know the exact protocol variant so the hardware 1336 * can be programmed exactly what to expect. 1337 */ 1338 static const char * const proto_variant_names[] = { 1339 [RC_TYPE_UNKNOWN] = "unknown", 1340 [RC_TYPE_OTHER] = "other", 1341 [RC_TYPE_RC5] = "rc-5", 1342 [RC_TYPE_RC5X_20] = "rc-5x-20", 1343 [RC_TYPE_RC5_SZ] = "rc-5-sz", 1344 [RC_TYPE_JVC] = "jvc", 1345 [RC_TYPE_SONY12] = "sony-12", 1346 [RC_TYPE_SONY15] = "sony-15", 1347 [RC_TYPE_SONY20] = "sony-20", 1348 [RC_TYPE_NEC] = "nec", 1349 [RC_TYPE_NECX] = "nec-x", 1350 [RC_TYPE_NEC32] = "nec-32", 1351 [RC_TYPE_SANYO] = "sanyo", 1352 [RC_TYPE_MCIR2_KBD] = "mcir2-kbd", 1353 [RC_TYPE_MCIR2_MSE] = "mcir2-mse", 1354 [RC_TYPE_RC6_0] = "rc-6-0", 1355 [RC_TYPE_RC6_6A_20] = "rc-6-6a-20", 1356 [RC_TYPE_RC6_6A_24] = "rc-6-6a-24", 1357 [RC_TYPE_RC6_6A_32] = "rc-6-6a-32", 1358 [RC_TYPE_RC6_MCE] = "rc-6-mce", 1359 [RC_TYPE_SHARP] = "sharp", 1360 [RC_TYPE_XMP] = "xmp", 1361 [RC_TYPE_CEC] = "cec", 1362 }; 1363 1364 /** 1365 * show_wakeup_protocols() - shows the wakeup IR protocol 1366 * @device: the device descriptor 1367 * @mattr: the device attribute struct 1368 * @buf: a pointer to the output buffer 1369 * 1370 * This routine is a callback routine for input read the IR protocol type(s). 1371 * it is trigged by reading /sys/class/rc/rc?/wakeup_protocols. 1372 * It returns the protocol names of supported protocols. 1373 * The enabled protocols are printed in brackets. 1374 * 1375 * dev->lock is taken to guard against races between device 1376 * registration, store_protocols and show_protocols. 1377 */ 1378 static ssize_t show_wakeup_protocols(struct device *device, 1379 struct device_attribute *mattr, 1380 char *buf) 1381 { 1382 struct rc_dev *dev = to_rc_dev(device); 1383 u64 allowed; 1384 enum rc_type enabled; 1385 char *tmp = buf; 1386 int i; 1387 1388 /* Device is being removed */ 1389 if (!dev) 1390 return -EINVAL; 1391 1392 if (!atomic_read(&dev->initialized)) 1393 return -ERESTARTSYS; 1394 1395 mutex_lock(&dev->lock); 1396 1397 allowed = dev->allowed_wakeup_protocols; 1398 enabled = dev->wakeup_protocol; 1399 1400 mutex_unlock(&dev->lock); 1401 1402 IR_dprintk(1, "%s: allowed - 0x%llx, enabled - %d\n", 1403 __func__, (long long)allowed, enabled); 1404 1405 for (i = 0; i < ARRAY_SIZE(proto_variant_names); i++) { 1406 if (allowed & (1ULL << i)) { 1407 if (i == enabled) 1408 tmp += sprintf(tmp, "[%s] ", 1409 proto_variant_names[i]); 1410 else 1411 tmp += sprintf(tmp, "%s ", 1412 proto_variant_names[i]); 1413 } 1414 } 1415 1416 if (tmp != buf) 1417 tmp--; 1418 *tmp = '\n'; 1419 1420 return tmp + 1 - buf; 1421 } 1422 1423 /** 1424 * store_wakeup_protocols() - changes the wakeup IR protocol(s) 1425 * @device: the device descriptor 1426 * @mattr: the device attribute struct 1427 * @buf: a pointer to the input buffer 1428 * @len: length of the input buffer 1429 * 1430 * This routine is for changing the IR protocol type. 1431 * It is trigged by writing to /sys/class/rc/rc?/wakeup_protocols. 1432 * Returns @len on success or a negative error code. 1433 * 1434 * dev->lock is taken to guard against races between device 1435 * registration, store_protocols and show_protocols. 1436 */ 1437 static ssize_t store_wakeup_protocols(struct device *device, 1438 struct device_attribute *mattr, 1439 const char *buf, size_t len) 1440 { 1441 struct rc_dev *dev = to_rc_dev(device); 1442 enum rc_type protocol; 1443 ssize_t rc; 1444 u64 allowed; 1445 int i; 1446 1447 /* Device is being removed */ 1448 if (!dev) 1449 return -EINVAL; 1450 1451 if (!atomic_read(&dev->initialized)) 1452 return -ERESTARTSYS; 1453 1454 mutex_lock(&dev->lock); 1455 1456 allowed = dev->allowed_wakeup_protocols; 1457 1458 if (sysfs_streq(buf, "none")) { 1459 protocol = RC_TYPE_UNKNOWN; 1460 } else { 1461 for (i = 0; i < ARRAY_SIZE(proto_variant_names); i++) { 1462 if ((allowed & (1ULL << i)) && 1463 sysfs_streq(buf, proto_variant_names[i])) { 1464 protocol = i; 1465 break; 1466 } 1467 } 1468 1469 if (i == ARRAY_SIZE(proto_variant_names)) { 1470 rc = -EINVAL; 1471 goto out; 1472 } 1473 1474 if (dev->encode_wakeup) { 1475 u64 mask = 1ULL << protocol; 1476 1477 ir_raw_load_modules(&mask); 1478 if (!mask) { 1479 rc = -EINVAL; 1480 goto out; 1481 } 1482 } 1483 } 1484 1485 if (dev->wakeup_protocol != protocol) { 1486 dev->wakeup_protocol = protocol; 1487 IR_dprintk(1, "Wakeup protocol changed to %d\n", protocol); 1488 1489 if (protocol == RC_TYPE_RC6_MCE) 1490 dev->scancode_wakeup_filter.data = 0x800f0000; 1491 else 1492 dev->scancode_wakeup_filter.data = 0; 1493 dev->scancode_wakeup_filter.mask = 0; 1494 1495 rc = dev->s_wakeup_filter(dev, &dev->scancode_wakeup_filter); 1496 if (rc == 0) 1497 rc = len; 1498 } else { 1499 rc = len; 1500 } 1501 1502 out: 1503 mutex_unlock(&dev->lock); 1504 return rc; 1505 } 1506 1507 static void rc_dev_release(struct device *device) 1508 { 1509 struct rc_dev *dev = to_rc_dev(device); 1510 1511 kfree(dev); 1512 } 1513 1514 #define ADD_HOTPLUG_VAR(fmt, val...) \ 1515 do { \ 1516 int err = add_uevent_var(env, fmt, val); \ 1517 if (err) \ 1518 return err; \ 1519 } while (0) 1520 1521 static int rc_dev_uevent(struct device *device, struct kobj_uevent_env *env) 1522 { 1523 struct rc_dev *dev = to_rc_dev(device); 1524 1525 if (dev->rc_map.name) 1526 ADD_HOTPLUG_VAR("NAME=%s", dev->rc_map.name); 1527 if (dev->driver_name) 1528 ADD_HOTPLUG_VAR("DRV_NAME=%s", dev->driver_name); 1529 1530 return 0; 1531 } 1532 1533 /* 1534 * Static device attribute struct with the sysfs attributes for IR's 1535 */ 1536 static DEVICE_ATTR(protocols, 0644, show_protocols, store_protocols); 1537 static DEVICE_ATTR(wakeup_protocols, 0644, show_wakeup_protocols, 1538 store_wakeup_protocols); 1539 static RC_FILTER_ATTR(filter, S_IRUGO|S_IWUSR, 1540 show_filter, store_filter, RC_FILTER_NORMAL, false); 1541 static RC_FILTER_ATTR(filter_mask, S_IRUGO|S_IWUSR, 1542 show_filter, store_filter, RC_FILTER_NORMAL, true); 1543 static RC_FILTER_ATTR(wakeup_filter, S_IRUGO|S_IWUSR, 1544 show_filter, store_filter, RC_FILTER_WAKEUP, false); 1545 static RC_FILTER_ATTR(wakeup_filter_mask, S_IRUGO|S_IWUSR, 1546 show_filter, store_filter, RC_FILTER_WAKEUP, true); 1547 1548 static struct attribute *rc_dev_protocol_attrs[] = { 1549 &dev_attr_protocols.attr, 1550 NULL, 1551 }; 1552 1553 static struct attribute_group rc_dev_protocol_attr_grp = { 1554 .attrs = rc_dev_protocol_attrs, 1555 }; 1556 1557 static struct attribute *rc_dev_filter_attrs[] = { 1558 &dev_attr_filter.attr.attr, 1559 &dev_attr_filter_mask.attr.attr, 1560 NULL, 1561 }; 1562 1563 static struct attribute_group rc_dev_filter_attr_grp = { 1564 .attrs = rc_dev_filter_attrs, 1565 }; 1566 1567 static struct attribute *rc_dev_wakeup_filter_attrs[] = { 1568 &dev_attr_wakeup_filter.attr.attr, 1569 &dev_attr_wakeup_filter_mask.attr.attr, 1570 &dev_attr_wakeup_protocols.attr, 1571 NULL, 1572 }; 1573 1574 static struct attribute_group rc_dev_wakeup_filter_attr_grp = { 1575 .attrs = rc_dev_wakeup_filter_attrs, 1576 }; 1577 1578 static struct device_type rc_dev_type = { 1579 .release = rc_dev_release, 1580 .uevent = rc_dev_uevent, 1581 }; 1582 1583 struct rc_dev *rc_allocate_device(enum rc_driver_type type) 1584 { 1585 struct rc_dev *dev; 1586 1587 dev = kzalloc(sizeof(*dev), GFP_KERNEL); 1588 if (!dev) 1589 return NULL; 1590 1591 if (type != RC_DRIVER_IR_RAW_TX) { 1592 dev->input_dev = input_allocate_device(); 1593 if (!dev->input_dev) { 1594 kfree(dev); 1595 return NULL; 1596 } 1597 1598 dev->input_dev->getkeycode = ir_getkeycode; 1599 dev->input_dev->setkeycode = ir_setkeycode; 1600 input_set_drvdata(dev->input_dev, dev); 1601 1602 setup_timer(&dev->timer_keyup, ir_timer_keyup, 1603 (unsigned long)dev); 1604 1605 spin_lock_init(&dev->rc_map.lock); 1606 spin_lock_init(&dev->keylock); 1607 } 1608 mutex_init(&dev->lock); 1609 1610 dev->dev.type = &rc_dev_type; 1611 dev->dev.class = &rc_class; 1612 device_initialize(&dev->dev); 1613 1614 dev->driver_type = type; 1615 1616 __module_get(THIS_MODULE); 1617 return dev; 1618 } 1619 EXPORT_SYMBOL_GPL(rc_allocate_device); 1620 1621 void rc_free_device(struct rc_dev *dev) 1622 { 1623 if (!dev) 1624 return; 1625 1626 input_free_device(dev->input_dev); 1627 1628 put_device(&dev->dev); 1629 1630 /* kfree(dev) will be called by the callback function 1631 rc_dev_release() */ 1632 1633 module_put(THIS_MODULE); 1634 } 1635 EXPORT_SYMBOL_GPL(rc_free_device); 1636 1637 static void devm_rc_alloc_release(struct device *dev, void *res) 1638 { 1639 rc_free_device(*(struct rc_dev **)res); 1640 } 1641 1642 struct rc_dev *devm_rc_allocate_device(struct device *dev, 1643 enum rc_driver_type type) 1644 { 1645 struct rc_dev **dr, *rc; 1646 1647 dr = devres_alloc(devm_rc_alloc_release, sizeof(*dr), GFP_KERNEL); 1648 if (!dr) 1649 return NULL; 1650 1651 rc = rc_allocate_device(type); 1652 if (!rc) { 1653 devres_free(dr); 1654 return NULL; 1655 } 1656 1657 rc->dev.parent = dev; 1658 rc->managed_alloc = true; 1659 *dr = rc; 1660 devres_add(dev, dr); 1661 1662 return rc; 1663 } 1664 EXPORT_SYMBOL_GPL(devm_rc_allocate_device); 1665 1666 static int rc_setup_rx_device(struct rc_dev *dev) 1667 { 1668 int rc; 1669 struct rc_map *rc_map; 1670 u64 rc_type; 1671 1672 if (!dev->map_name) 1673 return -EINVAL; 1674 1675 rc_map = rc_map_get(dev->map_name); 1676 if (!rc_map) 1677 rc_map = rc_map_get(RC_MAP_EMPTY); 1678 if (!rc_map || !rc_map->scan || rc_map->size == 0) 1679 return -EINVAL; 1680 1681 rc = ir_setkeytable(dev, rc_map); 1682 if (rc) 1683 return rc; 1684 1685 rc_type = BIT_ULL(rc_map->rc_type); 1686 1687 if (dev->change_protocol) { 1688 rc = dev->change_protocol(dev, &rc_type); 1689 if (rc < 0) 1690 goto out_table; 1691 dev->enabled_protocols = rc_type; 1692 } 1693 1694 if (dev->driver_type == RC_DRIVER_IR_RAW) 1695 ir_raw_load_modules(&rc_type); 1696 1697 set_bit(EV_KEY, dev->input_dev->evbit); 1698 set_bit(EV_REP, dev->input_dev->evbit); 1699 set_bit(EV_MSC, dev->input_dev->evbit); 1700 set_bit(MSC_SCAN, dev->input_dev->mscbit); 1701 if (dev->open) 1702 dev->input_dev->open = ir_open; 1703 if (dev->close) 1704 dev->input_dev->close = ir_close; 1705 1706 /* 1707 * Default delay of 250ms is too short for some protocols, especially 1708 * since the timeout is currently set to 250ms. Increase it to 500ms, 1709 * to avoid wrong repetition of the keycodes. Note that this must be 1710 * set after the call to input_register_device(). 1711 */ 1712 dev->input_dev->rep[REP_DELAY] = 500; 1713 1714 /* 1715 * As a repeat event on protocols like RC-5 and NEC take as long as 1716 * 110/114ms, using 33ms as a repeat period is not the right thing 1717 * to do. 1718 */ 1719 dev->input_dev->rep[REP_PERIOD] = 125; 1720 1721 dev->input_dev->dev.parent = &dev->dev; 1722 memcpy(&dev->input_dev->id, &dev->input_id, sizeof(dev->input_id)); 1723 dev->input_dev->phys = dev->input_phys; 1724 dev->input_dev->name = dev->input_name; 1725 1726 /* rc_open will be called here */ 1727 rc = input_register_device(dev->input_dev); 1728 if (rc) 1729 goto out_table; 1730 1731 return 0; 1732 1733 out_table: 1734 ir_free_table(&dev->rc_map); 1735 1736 return rc; 1737 } 1738 1739 static void rc_free_rx_device(struct rc_dev *dev) 1740 { 1741 if (!dev || dev->driver_type == RC_DRIVER_IR_RAW_TX) 1742 return; 1743 1744 ir_free_table(&dev->rc_map); 1745 1746 input_unregister_device(dev->input_dev); 1747 dev->input_dev = NULL; 1748 } 1749 1750 int rc_register_device(struct rc_dev *dev) 1751 { 1752 static bool raw_init; /* 'false' default value, raw decoders loaded? */ 1753 const char *path; 1754 int attr = 0; 1755 int minor; 1756 int rc; 1757 1758 if (!dev) 1759 return -EINVAL; 1760 1761 minor = ida_simple_get(&rc_ida, 0, RC_DEV_MAX, GFP_KERNEL); 1762 if (minor < 0) 1763 return minor; 1764 1765 dev->minor = minor; 1766 dev_set_name(&dev->dev, "rc%u", dev->minor); 1767 dev_set_drvdata(&dev->dev, dev); 1768 atomic_set(&dev->initialized, 0); 1769 1770 dev->dev.groups = dev->sysfs_groups; 1771 if (dev->driver_type != RC_DRIVER_IR_RAW_TX) 1772 dev->sysfs_groups[attr++] = &rc_dev_protocol_attr_grp; 1773 if (dev->s_filter) 1774 dev->sysfs_groups[attr++] = &rc_dev_filter_attr_grp; 1775 if (dev->s_wakeup_filter) 1776 dev->sysfs_groups[attr++] = &rc_dev_wakeup_filter_attr_grp; 1777 dev->sysfs_groups[attr++] = NULL; 1778 1779 rc = device_add(&dev->dev); 1780 if (rc) 1781 goto out_unlock; 1782 1783 path = kobject_get_path(&dev->dev.kobj, GFP_KERNEL); 1784 dev_info(&dev->dev, "%s as %s\n", 1785 dev->input_name ?: "Unspecified device", path ?: "N/A"); 1786 kfree(path); 1787 1788 if (dev->driver_type == RC_DRIVER_IR_RAW || 1789 dev->driver_type == RC_DRIVER_IR_RAW_TX) { 1790 if (!raw_init) { 1791 request_module_nowait("ir-lirc-codec"); 1792 raw_init = true; 1793 } 1794 rc = ir_raw_event_register(dev); 1795 if (rc < 0) 1796 goto out_dev; 1797 } 1798 1799 if (dev->driver_type != RC_DRIVER_IR_RAW_TX) { 1800 rc = rc_setup_rx_device(dev); 1801 if (rc) 1802 goto out_raw; 1803 } 1804 1805 /* Allow the RC sysfs nodes to be accessible */ 1806 atomic_set(&dev->initialized, 1); 1807 1808 IR_dprintk(1, "Registered rc%u (driver: %s)\n", 1809 dev->minor, 1810 dev->driver_name ? dev->driver_name : "unknown"); 1811 1812 return 0; 1813 1814 out_raw: 1815 ir_raw_event_unregister(dev); 1816 out_dev: 1817 device_del(&dev->dev); 1818 out_unlock: 1819 ida_simple_remove(&rc_ida, minor); 1820 return rc; 1821 } 1822 EXPORT_SYMBOL_GPL(rc_register_device); 1823 1824 static void devm_rc_release(struct device *dev, void *res) 1825 { 1826 rc_unregister_device(*(struct rc_dev **)res); 1827 } 1828 1829 int devm_rc_register_device(struct device *parent, struct rc_dev *dev) 1830 { 1831 struct rc_dev **dr; 1832 int ret; 1833 1834 dr = devres_alloc(devm_rc_release, sizeof(*dr), GFP_KERNEL); 1835 if (!dr) 1836 return -ENOMEM; 1837 1838 ret = rc_register_device(dev); 1839 if (ret) { 1840 devres_free(dr); 1841 return ret; 1842 } 1843 1844 *dr = dev; 1845 devres_add(parent, dr); 1846 1847 return 0; 1848 } 1849 EXPORT_SYMBOL_GPL(devm_rc_register_device); 1850 1851 void rc_unregister_device(struct rc_dev *dev) 1852 { 1853 if (!dev) 1854 return; 1855 1856 del_timer_sync(&dev->timer_keyup); 1857 1858 if (dev->driver_type == RC_DRIVER_IR_RAW) 1859 ir_raw_event_unregister(dev); 1860 1861 rc_free_rx_device(dev); 1862 1863 device_del(&dev->dev); 1864 1865 ida_simple_remove(&rc_ida, dev->minor); 1866 1867 if (!dev->managed_alloc) 1868 rc_free_device(dev); 1869 } 1870 1871 EXPORT_SYMBOL_GPL(rc_unregister_device); 1872 1873 /* 1874 * Init/exit code for the module. Basically, creates/removes /sys/class/rc 1875 */ 1876 1877 static int __init rc_core_init(void) 1878 { 1879 int rc = class_register(&rc_class); 1880 if (rc) { 1881 pr_err("rc_core: unable to register rc class\n"); 1882 return rc; 1883 } 1884 1885 led_trigger_register_simple("rc-feedback", &led_feedback); 1886 rc_map_register(&empty_map); 1887 1888 return 0; 1889 } 1890 1891 static void __exit rc_core_exit(void) 1892 { 1893 class_unregister(&rc_class); 1894 led_trigger_unregister_simple(led_feedback); 1895 rc_map_unregister(&empty_map); 1896 } 1897 1898 subsys_initcall(rc_core_init); 1899 module_exit(rc_core_exit); 1900 1901 int rc_core_debug; /* ir_debug level (0,1,2) */ 1902 EXPORT_SYMBOL_GPL(rc_core_debug); 1903 module_param_named(debug, rc_core_debug, int, 0644); 1904 1905 MODULE_AUTHOR("Mauro Carvalho Chehab"); 1906 MODULE_LICENSE("GPL"); 1907