linux/drivers/media/rc/rc-main.c
<<
>>
Prefs
   1/* rc-main.c - Remote Controller core module
   2 *
   3 * Copyright (C) 2009-2010 by Mauro Carvalho Chehab <mchehab@redhat.com>
   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#include <media/rc-core.h>
  16#include <linux/spinlock.h>
  17#include <linux/delay.h>
  18#include <linux/input.h>
  19#include <linux/slab.h>
  20#include <linux/device.h>
  21#include <linux/module.h>
  22#include "rc-core-priv.h"
  23
  24/* Sizes are in bytes, 256 bytes allows for 32 entries on x64 */
  25#define IR_TAB_MIN_SIZE 256
  26#define IR_TAB_MAX_SIZE 8192
  27
  28/* FIXME: IR_KEYPRESS_TIMEOUT should be protocol specific */
  29#define IR_KEYPRESS_TIMEOUT 250
  30
  31/* Used to keep track of known keymaps */
  32static LIST_HEAD(rc_map_list);
  33static DEFINE_SPINLOCK(rc_map_lock);
  34
  35static struct rc_map_list *seek_rc_map(const char *name)
  36{
  37        struct rc_map_list *map = NULL;
  38
  39        spin_lock(&rc_map_lock);
  40        list_for_each_entry(map, &rc_map_list, list) {
  41                if (!strcmp(name, map->map.name)) {
  42                        spin_unlock(&rc_map_lock);
  43                        return map;
  44                }
  45        }
  46        spin_unlock(&rc_map_lock);
  47
  48        return NULL;
  49}
  50
  51struct rc_map *rc_map_get(const char *name)
  52{
  53
  54        struct rc_map_list *map;
  55
  56        map = seek_rc_map(name);
  57#ifdef MODULE
  58        if (!map) {
  59                int rc = request_module(name);
  60                if (rc < 0) {
  61                        printk(KERN_ERR "Couldn't load IR keymap %s\n", name);
  62                        return NULL;
  63                }
  64                msleep(20);     /* Give some time for IR to register */
  65
  66                map = seek_rc_map(name);
  67        }
  68#endif
  69        if (!map) {
  70                printk(KERN_ERR "IR keymap %s not found\n", name);
  71                return NULL;
  72        }
  73
  74        printk(KERN_INFO "Registered IR keymap %s\n", map->map.name);
  75
  76        return &map->map;
  77}
  78EXPORT_SYMBOL_GPL(rc_map_get);
  79
  80int rc_map_register(struct rc_map_list *map)
  81{
  82        spin_lock(&rc_map_lock);
  83        list_add_tail(&map->list, &rc_map_list);
  84        spin_unlock(&rc_map_lock);
  85        return 0;
  86}
  87EXPORT_SYMBOL_GPL(rc_map_register);
  88
  89void rc_map_unregister(struct rc_map_list *map)
  90{
  91        spin_lock(&rc_map_lock);
  92        list_del(&map->list);
  93        spin_unlock(&rc_map_lock);
  94}
  95EXPORT_SYMBOL_GPL(rc_map_unregister);
  96
  97
  98static struct rc_map_table empty[] = {
  99        { 0x2a, KEY_COFFEE },
 100};
 101
 102static struct rc_map_list empty_map = {
 103        .map = {
 104                .scan    = empty,
 105                .size    = ARRAY_SIZE(empty),
 106                .rc_type = RC_TYPE_UNKNOWN,     /* Legacy IR type */
 107                .name    = RC_MAP_EMPTY,
 108        }
 109};
 110
 111/**
 112 * ir_create_table() - initializes a scancode table
 113 * @rc_map:     the rc_map to initialize
 114 * @name:       name to assign to the table
 115 * @rc_type:    ir type to assign to the new table
 116 * @size:       initial size of the table
 117 * @return:     zero on success or a negative error code
 118 *
 119 * This routine will initialize the rc_map and will allocate
 120 * memory to hold at least the specified number of elements.
 121 */
 122static int ir_create_table(struct rc_map *rc_map,
 123                           const char *name, u64 rc_type, size_t size)
 124{
 125        rc_map->name = name;
 126        rc_map->rc_type = rc_type;
 127        rc_map->alloc = roundup_pow_of_two(size * sizeof(struct rc_map_table));
 128        rc_map->size = rc_map->alloc / sizeof(struct rc_map_table);
 129        rc_map->scan = kmalloc(rc_map->alloc, GFP_KERNEL);
 130        if (!rc_map->scan)
 131                return -ENOMEM;
 132
 133        IR_dprintk(1, "Allocated space for %u keycode entries (%u bytes)\n",
 134                   rc_map->size, rc_map->alloc);
 135        return 0;
 136}
 137
 138/**
 139 * ir_free_table() - frees memory allocated by a scancode table
 140 * @rc_map:     the table whose mappings need to be freed
 141 *
 142 * This routine will free memory alloctaed for key mappings used by given
 143 * scancode table.
 144 */
 145static void ir_free_table(struct rc_map *rc_map)
 146{
 147        rc_map->size = 0;
 148        kfree(rc_map->scan);
 149        rc_map->scan = NULL;
 150}
 151
 152/**
 153 * ir_resize_table() - resizes a scancode table if necessary
 154 * @rc_map:     the rc_map to resize
 155 * @gfp_flags:  gfp flags to use when allocating memory
 156 * @return:     zero on success or a negative error code
 157 *
 158 * This routine will shrink the rc_map if it has lots of
 159 * unused entries and grow it if it is full.
 160 */
 161static int ir_resize_table(struct rc_map *rc_map, gfp_t gfp_flags)
 162{
 163        unsigned int oldalloc = rc_map->alloc;
 164        unsigned int newalloc = oldalloc;
 165        struct rc_map_table *oldscan = rc_map->scan;
 166        struct rc_map_table *newscan;
 167
 168        if (rc_map->size == rc_map->len) {
 169                /* All entries in use -> grow keytable */
 170                if (rc_map->alloc >= IR_TAB_MAX_SIZE)
 171                        return -ENOMEM;
 172
 173                newalloc *= 2;
 174                IR_dprintk(1, "Growing table to %u bytes\n", newalloc);
 175        }
 176
 177        if ((rc_map->len * 3 < rc_map->size) && (oldalloc > IR_TAB_MIN_SIZE)) {
 178                /* Less than 1/3 of entries in use -> shrink keytable */
 179                newalloc /= 2;
 180                IR_dprintk(1, "Shrinking table to %u bytes\n", newalloc);
 181        }
 182
 183        if (newalloc == oldalloc)
 184                return 0;
 185
 186        newscan = kmalloc(newalloc, gfp_flags);
 187        if (!newscan) {
 188                IR_dprintk(1, "Failed to kmalloc %u bytes\n", newalloc);
 189                return -ENOMEM;
 190        }
 191
 192        memcpy(newscan, rc_map->scan, rc_map->len * sizeof(struct rc_map_table));
 193        rc_map->scan = newscan;
 194        rc_map->alloc = newalloc;
 195        rc_map->size = rc_map->alloc / sizeof(struct rc_map_table);
 196        kfree(oldscan);
 197        return 0;
 198}
 199
 200/**
 201 * ir_update_mapping() - set a keycode in the scancode->keycode table
 202 * @dev:        the struct rc_dev device descriptor
 203 * @rc_map:     scancode table to be adjusted
 204 * @index:      index of the mapping that needs to be updated
 205 * @keycode:    the desired keycode
 206 * @return:     previous keycode assigned to the mapping
 207 *
 208 * This routine is used to update scancode->keycode mapping at given
 209 * position.
 210 */
 211static unsigned int ir_update_mapping(struct rc_dev *dev,
 212                                      struct rc_map *rc_map,
 213                                      unsigned int index,
 214                                      unsigned int new_keycode)
 215{
 216        int old_keycode = rc_map->scan[index].keycode;
 217        int i;
 218
 219        /* Did the user wish to remove the mapping? */
 220        if (new_keycode == KEY_RESERVED || new_keycode == KEY_UNKNOWN) {
 221                IR_dprintk(1, "#%d: Deleting scan 0x%04x\n",
 222                           index, rc_map->scan[index].scancode);
 223                rc_map->len--;
 224                memmove(&rc_map->scan[index], &rc_map->scan[index+ 1],
 225                        (rc_map->len - index) * sizeof(struct rc_map_table));
 226        } else {
 227                IR_dprintk(1, "#%d: %s scan 0x%04x with key 0x%04x\n",
 228                           index,
 229                           old_keycode == KEY_RESERVED ? "New" : "Replacing",
 230                           rc_map->scan[index].scancode, new_keycode);
 231                rc_map->scan[index].keycode = new_keycode;
 232                __set_bit(new_keycode, dev->input_dev->keybit);
 233        }
 234
 235        if (old_keycode != KEY_RESERVED) {
 236                /* A previous mapping was updated... */
 237                __clear_bit(old_keycode, dev->input_dev->keybit);
 238                /* ... but another scancode might use the same keycode */
 239                for (i = 0; i < rc_map->len; i++) {
 240                        if (rc_map->scan[i].keycode == old_keycode) {
 241                                __set_bit(old_keycode, dev->input_dev->keybit);
 242                                break;
 243                        }
 244                }
 245
 246                /* Possibly shrink the keytable, failure is not a problem */
 247                ir_resize_table(rc_map, GFP_ATOMIC);
 248        }
 249
 250        return old_keycode;
 251}
 252
 253/**
 254 * ir_establish_scancode() - set a keycode in the scancode->keycode table
 255 * @dev:        the struct rc_dev device descriptor
 256 * @rc_map:     scancode table to be searched
 257 * @scancode:   the desired scancode
 258 * @resize:     controls whether we allowed to resize the table to
 259 *              accommodate not yet present scancodes
 260 * @return:     index of the mapping containing scancode in question
 261 *              or -1U in case of failure.
 262 *
 263 * This routine is used to locate given scancode in rc_map.
 264 * If scancode is not yet present the routine will allocate a new slot
 265 * for it.
 266 */
 267static unsigned int ir_establish_scancode(struct rc_dev *dev,
 268                                          struct rc_map *rc_map,
 269                                          unsigned int scancode,
 270                                          bool resize)
 271{
 272        unsigned int i;
 273
 274        /*
 275         * Unfortunately, some hardware-based IR decoders don't provide
 276         * all bits for the complete IR code. In general, they provide only
 277         * the command part of the IR code. Yet, as it is possible to replace
 278         * the provided IR with another one, it is needed to allow loading
 279         * IR tables from other remotes. So, we support specifying a mask to
 280         * indicate the valid bits of the scancodes.
 281         */
 282        if (dev->scanmask)
 283                scancode &= dev->scanmask;
 284
 285        /* First check if we already have a mapping for this ir command */
 286        for (i = 0; i < rc_map->len; i++) {
 287                if (rc_map->scan[i].scancode == scancode)
 288                        return i;
 289
 290                /* Keytable is sorted from lowest to highest scancode */
 291                if (rc_map->scan[i].scancode >= scancode)
 292                        break;
 293        }
 294
 295        /* No previous mapping found, we might need to grow the table */
 296        if (rc_map->size == rc_map->len) {
 297                if (!resize || ir_resize_table(rc_map, GFP_ATOMIC))
 298                        return -1U;
 299        }
 300
 301        /* i is the proper index to insert our new keycode */
 302        if (i < rc_map->len)
 303                memmove(&rc_map->scan[i + 1], &rc_map->scan[i],
 304                        (rc_map->len - i) * sizeof(struct rc_map_table));
 305        rc_map->scan[i].scancode = scancode;
 306        rc_map->scan[i].keycode = KEY_RESERVED;
 307        rc_map->len++;
 308
 309        return i;
 310}
 311
 312/**
 313 * ir_setkeycode() - set a keycode in the scancode->keycode table
 314 * @idev:       the struct input_dev device descriptor
 315 * @scancode:   the desired scancode
 316 * @keycode:    result
 317 * @return:     -EINVAL if the keycode could not be inserted, otherwise zero.
 318 *
 319 * This routine is used to handle evdev EVIOCSKEY ioctl.
 320 */
 321static int ir_setkeycode(struct input_dev *idev,
 322                         const struct input_keymap_entry *ke,
 323                         unsigned int *old_keycode)
 324{
 325        struct rc_dev *rdev = input_get_drvdata(idev);
 326        struct rc_map *rc_map = &rdev->rc_map;
 327        unsigned int index;
 328        unsigned int scancode;
 329        int retval = 0;
 330        unsigned long flags;
 331
 332        spin_lock_irqsave(&rc_map->lock, flags);
 333
 334        if (ke->flags & INPUT_KEYMAP_BY_INDEX) {
 335                index = ke->index;
 336                if (index >= rc_map->len) {
 337                        retval = -EINVAL;
 338                        goto out;
 339                }
 340        } else {
 341                retval = input_scancode_to_scalar(ke, &scancode);
 342                if (retval)
 343                        goto out;
 344
 345                index = ir_establish_scancode(rdev, rc_map, scancode, true);
 346                if (index >= rc_map->len) {
 347                        retval = -ENOMEM;
 348                        goto out;
 349                }
 350        }
 351
 352        *old_keycode = ir_update_mapping(rdev, rc_map, index, ke->keycode);
 353
 354out:
 355        spin_unlock_irqrestore(&rc_map->lock, flags);
 356        return retval;
 357}
 358
 359/**
 360 * ir_setkeytable() - sets several entries in the scancode->keycode table
 361 * @dev:        the struct rc_dev device descriptor
 362 * @to:         the struct rc_map to copy entries to
 363 * @from:       the struct rc_map to copy entries from
 364 * @return:     -ENOMEM if all keycodes could not be inserted, otherwise zero.
 365 *
 366 * This routine is used to handle table initialization.
 367 */
 368static int ir_setkeytable(struct rc_dev *dev,
 369                          const struct rc_map *from)
 370{
 371        struct rc_map *rc_map = &dev->rc_map;
 372        unsigned int i, index;
 373        int rc;
 374
 375        rc = ir_create_table(rc_map, from->name,
 376                             from->rc_type, from->size);
 377        if (rc)
 378                return rc;
 379
 380        IR_dprintk(1, "Allocated space for %u keycode entries (%u bytes)\n",
 381                   rc_map->size, rc_map->alloc);
 382
 383        for (i = 0; i < from->size; i++) {
 384                index = ir_establish_scancode(dev, rc_map,
 385                                              from->scan[i].scancode, false);
 386                if (index >= rc_map->len) {
 387                        rc = -ENOMEM;
 388                        break;
 389                }
 390
 391                ir_update_mapping(dev, rc_map, index,
 392                                  from->scan[i].keycode);
 393        }
 394
 395        if (rc)
 396                ir_free_table(rc_map);
 397
 398        return rc;
 399}
 400
 401/**
 402 * ir_lookup_by_scancode() - locate mapping by scancode
 403 * @rc_map:     the struct rc_map to search
 404 * @scancode:   scancode to look for in the table
 405 * @return:     index in the table, -1U if not found
 406 *
 407 * This routine performs binary search in RC keykeymap table for
 408 * given scancode.
 409 */
 410static unsigned int ir_lookup_by_scancode(const struct rc_map *rc_map,
 411                                          unsigned int scancode)
 412{
 413        int start = 0;
 414        int end = rc_map->len - 1;
 415        int mid;
 416
 417        while (start <= end) {
 418                mid = (start + end) / 2;
 419                if (rc_map->scan[mid].scancode < scancode)
 420                        start = mid + 1;
 421                else if (rc_map->scan[mid].scancode > scancode)
 422                        end = mid - 1;
 423                else
 424                        return mid;
 425        }
 426
 427        return -1U;
 428}
 429
 430/**
 431 * ir_getkeycode() - get a keycode from the scancode->keycode table
 432 * @idev:       the struct input_dev device descriptor
 433 * @scancode:   the desired scancode
 434 * @keycode:    used to return the keycode, if found, or KEY_RESERVED
 435 * @return:     always returns zero.
 436 *
 437 * This routine is used to handle evdev EVIOCGKEY ioctl.
 438 */
 439static int ir_getkeycode(struct input_dev *idev,
 440                         struct input_keymap_entry *ke)
 441{
 442        struct rc_dev *rdev = input_get_drvdata(idev);
 443        struct rc_map *rc_map = &rdev->rc_map;
 444        struct rc_map_table *entry;
 445        unsigned long flags;
 446        unsigned int index;
 447        unsigned int scancode;
 448        int retval;
 449
 450        spin_lock_irqsave(&rc_map->lock, flags);
 451
 452        if (ke->flags & INPUT_KEYMAP_BY_INDEX) {
 453                index = ke->index;
 454        } else {
 455                retval = input_scancode_to_scalar(ke, &scancode);
 456                if (retval)
 457                        goto out;
 458
 459                index = ir_lookup_by_scancode(rc_map, scancode);
 460        }
 461
 462        if (index < rc_map->len) {
 463                entry = &rc_map->scan[index];
 464
 465                ke->index = index;
 466                ke->keycode = entry->keycode;
 467                ke->len = sizeof(entry->scancode);
 468                memcpy(ke->scancode, &entry->scancode, sizeof(entry->scancode));
 469
 470        } else if (!(ke->flags & INPUT_KEYMAP_BY_INDEX)) {
 471                /*
 472                 * We do not really know the valid range of scancodes
 473                 * so let's respond with KEY_RESERVED to anything we
 474                 * do not have mapping for [yet].
 475                 */
 476                ke->index = index;
 477                ke->keycode = KEY_RESERVED;
 478        } else {
 479                retval = -EINVAL;
 480                goto out;
 481        }
 482
 483        retval = 0;
 484
 485out:
 486        spin_unlock_irqrestore(&rc_map->lock, flags);
 487        return retval;
 488}
 489
 490/**
 491 * rc_g_keycode_from_table() - gets the keycode that corresponds to a scancode
 492 * @dev:        the struct rc_dev descriptor of the device
 493 * @scancode:   the scancode to look for
 494 * @return:     the corresponding keycode, or KEY_RESERVED
 495 *
 496 * This routine is used by drivers which need to convert a scancode to a
 497 * keycode. Normally it should not be used since drivers should have no
 498 * interest in keycodes.
 499 */
 500u32 rc_g_keycode_from_table(struct rc_dev *dev, u32 scancode)
 501{
 502        struct rc_map *rc_map = &dev->rc_map;
 503        unsigned int keycode;
 504        unsigned int index;
 505        unsigned long flags;
 506
 507        spin_lock_irqsave(&rc_map->lock, flags);
 508
 509        index = ir_lookup_by_scancode(rc_map, scancode);
 510        keycode = index < rc_map->len ?
 511                        rc_map->scan[index].keycode : KEY_RESERVED;
 512
 513        spin_unlock_irqrestore(&rc_map->lock, flags);
 514
 515        if (keycode != KEY_RESERVED)
 516                IR_dprintk(1, "%s: scancode 0x%04x keycode 0x%02x\n",
 517                           dev->input_name, scancode, keycode);
 518
 519        return keycode;
 520}
 521EXPORT_SYMBOL_GPL(rc_g_keycode_from_table);
 522
 523/**
 524 * ir_do_keyup() - internal function to signal the release of a keypress
 525 * @dev:        the struct rc_dev descriptor of the device
 526 * @sync:       whether or not to call input_sync
 527 *
 528 * This function is used internally to release a keypress, it must be
 529 * called with keylock held.
 530 */
 531static void ir_do_keyup(struct rc_dev *dev, bool sync)
 532{
 533        if (!dev->keypressed)
 534                return;
 535
 536        IR_dprintk(1, "keyup key 0x%04x\n", dev->last_keycode);
 537        input_report_key(dev->input_dev, dev->last_keycode, 0);
 538        if (sync)
 539                input_sync(dev->input_dev);
 540        dev->keypressed = false;
 541}
 542
 543/**
 544 * rc_keyup() - signals the release of a keypress
 545 * @dev:        the struct rc_dev descriptor of the device
 546 *
 547 * This routine is used to signal that a key has been released on the
 548 * remote control.
 549 */
 550void rc_keyup(struct rc_dev *dev)
 551{
 552        unsigned long flags;
 553
 554        spin_lock_irqsave(&dev->keylock, flags);
 555        ir_do_keyup(dev, true);
 556        spin_unlock_irqrestore(&dev->keylock, flags);
 557}
 558EXPORT_SYMBOL_GPL(rc_keyup);
 559
 560/**
 561 * ir_timer_keyup() - generates a keyup event after a timeout
 562 * @cookie:     a pointer to the struct rc_dev for the device
 563 *
 564 * This routine will generate a keyup event some time after a keydown event
 565 * is generated when no further activity has been detected.
 566 */
 567static void ir_timer_keyup(unsigned long cookie)
 568{
 569        struct rc_dev *dev = (struct rc_dev *)cookie;
 570        unsigned long flags;
 571
 572        /*
 573         * ir->keyup_jiffies is used to prevent a race condition if a
 574         * hardware interrupt occurs at this point and the keyup timer
 575         * event is moved further into the future as a result.
 576         *
 577         * The timer will then be reactivated and this function called
 578         * again in the future. We need to exit gracefully in that case
 579         * to allow the input subsystem to do its auto-repeat magic or
 580         * a keyup event might follow immediately after the keydown.
 581         */
 582        spin_lock_irqsave(&dev->keylock, flags);
 583        if (time_is_before_eq_jiffies(dev->keyup_jiffies))
 584                ir_do_keyup(dev, true);
 585        spin_unlock_irqrestore(&dev->keylock, flags);
 586}
 587
 588/**
 589 * rc_repeat() - signals that a key is still pressed
 590 * @dev:        the struct rc_dev descriptor of the device
 591 *
 592 * This routine is used by IR decoders when a repeat message which does
 593 * not include the necessary bits to reproduce the scancode has been
 594 * received.
 595 */
 596void rc_repeat(struct rc_dev *dev)
 597{
 598        unsigned long flags;
 599
 600        spin_lock_irqsave(&dev->keylock, flags);
 601
 602        input_event(dev->input_dev, EV_MSC, MSC_SCAN, dev->last_scancode);
 603        input_sync(dev->input_dev);
 604
 605        if (!dev->keypressed)
 606                goto out;
 607
 608        dev->keyup_jiffies = jiffies + msecs_to_jiffies(IR_KEYPRESS_TIMEOUT);
 609        mod_timer(&dev->timer_keyup, dev->keyup_jiffies);
 610
 611out:
 612        spin_unlock_irqrestore(&dev->keylock, flags);
 613}
 614EXPORT_SYMBOL_GPL(rc_repeat);
 615
 616/**
 617 * ir_do_keydown() - internal function to process a keypress
 618 * @dev:        the struct rc_dev descriptor of the device
 619 * @scancode:   the scancode of the keypress
 620 * @keycode:    the keycode of the keypress
 621 * @toggle:     the toggle value of the keypress
 622 *
 623 * This function is used internally to register a keypress, it must be
 624 * called with keylock held.
 625 */
 626static void ir_do_keydown(struct rc_dev *dev, int scancode,
 627                          u32 keycode, u8 toggle)
 628{
 629        bool new_event = !dev->keypressed ||
 630                         dev->last_scancode != scancode ||
 631                         dev->last_toggle != toggle;
 632
 633        if (new_event && dev->keypressed)
 634                ir_do_keyup(dev, false);
 635
 636        input_event(dev->input_dev, EV_MSC, MSC_SCAN, scancode);
 637
 638        if (new_event && keycode != KEY_RESERVED) {
 639                /* Register a keypress */
 640                dev->keypressed = true;
 641                dev->last_scancode = scancode;
 642                dev->last_toggle = toggle;
 643                dev->last_keycode = keycode;
 644
 645                IR_dprintk(1, "%s: key down event, "
 646                           "key 0x%04x, scancode 0x%04x\n",
 647                           dev->input_name, keycode, scancode);
 648                input_report_key(dev->input_dev, keycode, 1);
 649        }
 650
 651        input_sync(dev->input_dev);
 652}
 653
 654/**
 655 * rc_keydown() - generates input event for a key press
 656 * @dev:        the struct rc_dev descriptor of the device
 657 * @scancode:   the scancode that we're seeking
 658 * @toggle:     the toggle value (protocol dependent, if the protocol doesn't
 659 *              support toggle values, this should be set to zero)
 660 *
 661 * This routine is used to signal that a key has been pressed on the
 662 * remote control.
 663 */
 664void rc_keydown(struct rc_dev *dev, int scancode, u8 toggle)
 665{
 666        unsigned long flags;
 667        u32 keycode = rc_g_keycode_from_table(dev, scancode);
 668
 669        spin_lock_irqsave(&dev->keylock, flags);
 670        ir_do_keydown(dev, scancode, keycode, toggle);
 671
 672        if (dev->keypressed) {
 673                dev->keyup_jiffies = jiffies + msecs_to_jiffies(IR_KEYPRESS_TIMEOUT);
 674                mod_timer(&dev->timer_keyup, dev->keyup_jiffies);
 675        }
 676        spin_unlock_irqrestore(&dev->keylock, flags);
 677}
 678EXPORT_SYMBOL_GPL(rc_keydown);
 679
 680/**
 681 * rc_keydown_notimeout() - generates input event for a key press without
 682 *                          an automatic keyup event at a later time
 683 * @dev:        the struct rc_dev descriptor of the device
 684 * @scancode:   the scancode that we're seeking
 685 * @toggle:     the toggle value (protocol dependent, if the protocol doesn't
 686 *              support toggle values, this should be set to zero)
 687 *
 688 * This routine is used to signal that a key has been pressed on the
 689 * remote control. The driver must manually call rc_keyup() at a later stage.
 690 */
 691void rc_keydown_notimeout(struct rc_dev *dev, int scancode, u8 toggle)
 692{
 693        unsigned long flags;
 694        u32 keycode = rc_g_keycode_from_table(dev, scancode);
 695
 696        spin_lock_irqsave(&dev->keylock, flags);
 697        ir_do_keydown(dev, scancode, keycode, toggle);
 698        spin_unlock_irqrestore(&dev->keylock, flags);
 699}
 700EXPORT_SYMBOL_GPL(rc_keydown_notimeout);
 701
 702static int ir_open(struct input_dev *idev)
 703{
 704        struct rc_dev *rdev = input_get_drvdata(idev);
 705
 706        return rdev->open(rdev);
 707}
 708
 709static void ir_close(struct input_dev *idev)
 710{
 711        struct rc_dev *rdev = input_get_drvdata(idev);
 712
 713         if (rdev)
 714                rdev->close(rdev);
 715}
 716
 717/* class for /sys/class/rc */
 718static char *rc_devnode(struct device *dev, umode_t *mode)
 719{
 720        return kasprintf(GFP_KERNEL, "rc/%s", dev_name(dev));
 721}
 722
 723static struct class rc_class = {
 724        .name           = "rc",
 725        .devnode        = rc_devnode,
 726};
 727
 728/*
 729 * These are the protocol textual descriptions that are
 730 * used by the sysfs protocols file. Note that the order
 731 * of the entries is relevant.
 732 */
 733static struct {
 734        u64     type;
 735        char    *name;
 736} proto_names[] = {
 737        { RC_BIT_NONE,          "none"          },
 738        { RC_BIT_OTHER,         "other"         },
 739        { RC_BIT_UNKNOWN,       "unknown"       },
 740        { RC_BIT_RC5 |
 741          RC_BIT_RC5X,          "rc-5"          },
 742        { RC_BIT_NEC,           "nec"           },
 743        { RC_BIT_RC6_0 |
 744          RC_BIT_RC6_6A_20 |
 745          RC_BIT_RC6_6A_24 |
 746          RC_BIT_RC6_6A_32 |
 747          RC_BIT_RC6_MCE,       "rc-6"          },
 748        { RC_BIT_JVC,           "jvc"           },
 749        { RC_BIT_SONY12 |
 750          RC_BIT_SONY15 |
 751          RC_BIT_SONY20,        "sony"          },
 752        { RC_BIT_RC5_SZ,        "rc-5-sz"       },
 753        { RC_BIT_SANYO,         "sanyo"         },
 754        { RC_BIT_MCE_KBD,       "mce_kbd"       },
 755        { RC_BIT_LIRC,          "lirc"          },
 756};
 757
 758/**
 759 * show_protocols() - shows the current IR protocol(s)
 760 * @device:     the device descriptor
 761 * @mattr:      the device attribute struct (unused)
 762 * @buf:        a pointer to the output buffer
 763 *
 764 * This routine is a callback routine for input read the IR protocol type(s).
 765 * it is trigged by reading /sys/class/rc/rc?/protocols.
 766 * It returns the protocol names of supported protocols.
 767 * Enabled protocols are printed in brackets.
 768 *
 769 * dev->lock is taken to guard against races between device
 770 * registration, store_protocols and show_protocols.
 771 */
 772static ssize_t show_protocols(struct device *device,
 773                              struct device_attribute *mattr, char *buf)
 774{
 775        struct rc_dev *dev = to_rc_dev(device);
 776        u64 allowed, enabled;
 777        char *tmp = buf;
 778        int i;
 779
 780        /* Device is being removed */
 781        if (!dev)
 782                return -EINVAL;
 783
 784        mutex_lock(&dev->lock);
 785
 786        enabled = dev->enabled_protocols;
 787        if (dev->driver_type == RC_DRIVER_SCANCODE)
 788                allowed = dev->allowed_protos;
 789        else if (dev->raw)
 790                allowed = ir_raw_get_allowed_protocols();
 791        else {
 792                mutex_unlock(&dev->lock);
 793                return -ENODEV;
 794        }
 795
 796        IR_dprintk(1, "allowed - 0x%llx, enabled - 0x%llx\n",
 797                   (long long)allowed,
 798                   (long long)enabled);
 799
 800        for (i = 0; i < ARRAY_SIZE(proto_names); i++) {
 801                if (allowed & enabled & proto_names[i].type)
 802                        tmp += sprintf(tmp, "[%s] ", proto_names[i].name);
 803                else if (allowed & proto_names[i].type)
 804                        tmp += sprintf(tmp, "%s ", proto_names[i].name);
 805
 806                if (allowed & proto_names[i].type)
 807                        allowed &= ~proto_names[i].type;
 808        }
 809
 810        if (tmp != buf)
 811                tmp--;
 812        *tmp = '\n';
 813
 814        mutex_unlock(&dev->lock);
 815
 816        return tmp + 1 - buf;
 817}
 818
 819/**
 820 * store_protocols() - changes the current IR protocol(s)
 821 * @device:     the device descriptor
 822 * @mattr:      the device attribute struct (unused)
 823 * @buf:        a pointer to the input buffer
 824 * @len:        length of the input buffer
 825 *
 826 * This routine is for changing the IR protocol type.
 827 * It is trigged by writing to /sys/class/rc/rc?/protocols.
 828 * Writing "+proto" will add a protocol to the list of enabled protocols.
 829 * Writing "-proto" will remove a protocol from the list of enabled protocols.
 830 * Writing "proto" will enable only "proto".
 831 * Writing "none" will disable all protocols.
 832 * Returns -EINVAL if an invalid protocol combination or unknown protocol name
 833 * is used, otherwise @len.
 834 *
 835 * dev->lock is taken to guard against races between device
 836 * registration, store_protocols and show_protocols.
 837 */
 838static ssize_t store_protocols(struct device *device,
 839                               struct device_attribute *mattr,
 840                               const char *data,
 841                               size_t len)
 842{
 843        struct rc_dev *dev = to_rc_dev(device);
 844        bool enable, disable;
 845        const char *tmp;
 846        u64 type;
 847        u64 mask;
 848        int rc, i, count = 0;
 849        ssize_t ret;
 850
 851        /* Device is being removed */
 852        if (!dev)
 853                return -EINVAL;
 854
 855        mutex_lock(&dev->lock);
 856
 857        if (dev->driver_type != RC_DRIVER_SCANCODE && !dev->raw) {
 858                IR_dprintk(1, "Protocol switching not supported\n");
 859                ret = -EINVAL;
 860                goto out;
 861        }
 862        type = dev->enabled_protocols;
 863
 864        while ((tmp = strsep((char **) &data, " \n")) != NULL) {
 865                if (!*tmp)
 866                        break;
 867
 868                if (*tmp == '+') {
 869                        enable = true;
 870                        disable = false;
 871                        tmp++;
 872                } else if (*tmp == '-') {
 873                        enable = false;
 874                        disable = true;
 875                        tmp++;
 876                } else {
 877                        enable = false;
 878                        disable = false;
 879                }
 880
 881                for (i = 0; i < ARRAY_SIZE(proto_names); i++) {
 882                        if (!strcasecmp(tmp, proto_names[i].name)) {
 883                                mask = proto_names[i].type;
 884                                break;
 885                        }
 886                }
 887
 888                if (i == ARRAY_SIZE(proto_names)) {
 889                        IR_dprintk(1, "Unknown protocol: '%s'\n", tmp);
 890                        ret = -EINVAL;
 891                        goto out;
 892                }
 893
 894                count++;
 895
 896                if (enable)
 897                        type |= mask;
 898                else if (disable)
 899                        type &= ~mask;
 900                else
 901                        type = mask;
 902        }
 903
 904        if (!count) {
 905                IR_dprintk(1, "Protocol not specified\n");
 906                ret = -EINVAL;
 907                goto out;
 908        }
 909
 910        if (dev->change_protocol) {
 911                rc = dev->change_protocol(dev, &type);
 912                if (rc < 0) {
 913                        IR_dprintk(1, "Error setting protocols to 0x%llx\n",
 914                                   (long long)type);
 915                        ret = -EINVAL;
 916                        goto out;
 917                }
 918        }
 919
 920        dev->enabled_protocols = type;
 921        IR_dprintk(1, "Current protocol(s): 0x%llx\n",
 922                   (long long)type);
 923
 924        ret = len;
 925
 926out:
 927        mutex_unlock(&dev->lock);
 928        return ret;
 929}
 930
 931static void rc_dev_release(struct device *device)
 932{
 933}
 934
 935#define ADD_HOTPLUG_VAR(fmt, val...)                                    \
 936        do {                                                            \
 937                int err = add_uevent_var(env, fmt, val);                \
 938                if (err)                                                \
 939                        return err;                                     \
 940        } while (0)
 941
 942static int rc_dev_uevent(struct device *device, struct kobj_uevent_env *env)
 943{
 944        struct rc_dev *dev = to_rc_dev(device);
 945
 946        if (!dev || !dev->input_dev)
 947                return -ENODEV;
 948
 949        if (dev->rc_map.name)
 950                ADD_HOTPLUG_VAR("NAME=%s", dev->rc_map.name);
 951        if (dev->driver_name)
 952                ADD_HOTPLUG_VAR("DRV_NAME=%s", dev->driver_name);
 953
 954        return 0;
 955}
 956
 957/*
 958 * Static device attribute struct with the sysfs attributes for IR's
 959 */
 960static DEVICE_ATTR(protocols, S_IRUGO | S_IWUSR,
 961                   show_protocols, store_protocols);
 962
 963static struct attribute *rc_dev_attrs[] = {
 964        &dev_attr_protocols.attr,
 965        NULL,
 966};
 967
 968static struct attribute_group rc_dev_attr_grp = {
 969        .attrs  = rc_dev_attrs,
 970};
 971
 972static const struct attribute_group *rc_dev_attr_groups[] = {
 973        &rc_dev_attr_grp,
 974        NULL
 975};
 976
 977static struct device_type rc_dev_type = {
 978        .groups         = rc_dev_attr_groups,
 979        .release        = rc_dev_release,
 980        .uevent         = rc_dev_uevent,
 981};
 982
 983struct rc_dev *rc_allocate_device(void)
 984{
 985        struct rc_dev *dev;
 986
 987        dev = kzalloc(sizeof(*dev), GFP_KERNEL);
 988        if (!dev)
 989                return NULL;
 990
 991        dev->input_dev = input_allocate_device();
 992        if (!dev->input_dev) {
 993                kfree(dev);
 994                return NULL;
 995        }
 996
 997        dev->input_dev->getkeycode = ir_getkeycode;
 998        dev->input_dev->setkeycode = ir_setkeycode;
 999        input_set_drvdata(dev->input_dev, dev);
1000
1001        spin_lock_init(&dev->rc_map.lock);
1002        spin_lock_init(&dev->keylock);
1003        mutex_init(&dev->lock);
1004        setup_timer(&dev->timer_keyup, ir_timer_keyup, (unsigned long)dev);
1005
1006        dev->dev.type = &rc_dev_type;
1007        dev->dev.class = &rc_class;
1008        device_initialize(&dev->dev);
1009
1010        __module_get(THIS_MODULE);
1011        return dev;
1012}
1013EXPORT_SYMBOL_GPL(rc_allocate_device);
1014
1015void rc_free_device(struct rc_dev *dev)
1016{
1017        if (!dev)
1018                return;
1019
1020        if (dev->input_dev)
1021                input_free_device(dev->input_dev);
1022
1023        put_device(&dev->dev);
1024
1025        kfree(dev);
1026        module_put(THIS_MODULE);
1027}
1028EXPORT_SYMBOL_GPL(rc_free_device);
1029
1030int rc_register_device(struct rc_dev *dev)
1031{
1032        static bool raw_init = false; /* raw decoders loaded? */
1033        static atomic_t devno = ATOMIC_INIT(0);
1034        struct rc_map *rc_map;
1035        const char *path;
1036        int rc;
1037
1038        if (!dev || !dev->map_name)
1039                return -EINVAL;
1040
1041        rc_map = rc_map_get(dev->map_name);
1042        if (!rc_map)
1043                rc_map = rc_map_get(RC_MAP_EMPTY);
1044        if (!rc_map || !rc_map->scan || rc_map->size == 0)
1045                return -EINVAL;
1046
1047        set_bit(EV_KEY, dev->input_dev->evbit);
1048        set_bit(EV_REP, dev->input_dev->evbit);
1049        set_bit(EV_MSC, dev->input_dev->evbit);
1050        set_bit(MSC_SCAN, dev->input_dev->mscbit);
1051        if (dev->open)
1052                dev->input_dev->open = ir_open;
1053        if (dev->close)
1054                dev->input_dev->close = ir_close;
1055
1056        /*
1057         * Take the lock here, as the device sysfs node will appear
1058         * when device_add() is called, which may trigger an ir-keytable udev
1059         * rule, which will in turn call show_protocols and access
1060         * dev->enabled_protocols before it has been initialized.
1061         */
1062        mutex_lock(&dev->lock);
1063
1064        dev->devno = (unsigned long)(atomic_inc_return(&devno) - 1);
1065        dev_set_name(&dev->dev, "rc%ld", dev->devno);
1066        dev_set_drvdata(&dev->dev, dev);
1067        rc = device_add(&dev->dev);
1068        if (rc)
1069                goto out_unlock;
1070
1071        rc = ir_setkeytable(dev, rc_map);
1072        if (rc)
1073                goto out_dev;
1074
1075        dev->input_dev->dev.parent = &dev->dev;
1076        memcpy(&dev->input_dev->id, &dev->input_id, sizeof(dev->input_id));
1077        dev->input_dev->phys = dev->input_phys;
1078        dev->input_dev->name = dev->input_name;
1079        rc = input_register_device(dev->input_dev);
1080        if (rc)
1081                goto out_table;
1082
1083        /*
1084         * Default delay of 250ms is too short for some protocols, especially
1085         * since the timeout is currently set to 250ms. Increase it to 500ms,
1086         * to avoid wrong repetition of the keycodes. Note that this must be
1087         * set after the call to input_register_device().
1088         */
1089        dev->input_dev->rep[REP_DELAY] = 500;
1090
1091        /*
1092         * As a repeat event on protocols like RC-5 and NEC take as long as
1093         * 110/114ms, using 33ms as a repeat period is not the right thing
1094         * to do.
1095         */
1096        dev->input_dev->rep[REP_PERIOD] = 125;
1097
1098        path = kobject_get_path(&dev->dev.kobj, GFP_KERNEL);
1099        printk(KERN_INFO "%s: %s as %s\n",
1100                dev_name(&dev->dev),
1101                dev->input_name ? dev->input_name : "Unspecified device",
1102                path ? path : "N/A");
1103        kfree(path);
1104
1105        if (dev->driver_type == RC_DRIVER_IR_RAW) {
1106                /* Load raw decoders, if they aren't already */
1107                if (!raw_init) {
1108                        IR_dprintk(1, "Loading raw decoders\n");
1109                        ir_raw_init();
1110                        raw_init = true;
1111                }
1112                rc = ir_raw_event_register(dev);
1113                if (rc < 0)
1114                        goto out_input;
1115        }
1116
1117        if (dev->change_protocol) {
1118                u64 rc_type = (1 << rc_map->rc_type);
1119                rc = dev->change_protocol(dev, &rc_type);
1120                if (rc < 0)
1121                        goto out_raw;
1122                dev->enabled_protocols = rc_type;
1123        }
1124
1125        mutex_unlock(&dev->lock);
1126
1127        IR_dprintk(1, "Registered rc%ld (driver: %s, remote: %s, mode %s)\n",
1128                   dev->devno,
1129                   dev->driver_name ? dev->driver_name : "unknown",
1130                   rc_map->name ? rc_map->name : "unknown",
1131                   dev->driver_type == RC_DRIVER_IR_RAW ? "raw" : "cooked");
1132
1133        return 0;
1134
1135out_raw:
1136        if (dev->driver_type == RC_DRIVER_IR_RAW)
1137                ir_raw_event_unregister(dev);
1138out_input:
1139        input_unregister_device(dev->input_dev);
1140        dev->input_dev = NULL;
1141out_table:
1142        ir_free_table(&dev->rc_map);
1143out_dev:
1144        device_del(&dev->dev);
1145out_unlock:
1146        mutex_unlock(&dev->lock);
1147        return rc;
1148}
1149EXPORT_SYMBOL_GPL(rc_register_device);
1150
1151void rc_unregister_device(struct rc_dev *dev)
1152{
1153        if (!dev)
1154                return;
1155
1156        del_timer_sync(&dev->timer_keyup);
1157
1158        if (dev->driver_type == RC_DRIVER_IR_RAW)
1159                ir_raw_event_unregister(dev);
1160
1161        /* Freeing the table should also call the stop callback */
1162        ir_free_table(&dev->rc_map);
1163        IR_dprintk(1, "Freed keycode table\n");
1164
1165        input_unregister_device(dev->input_dev);
1166        dev->input_dev = NULL;
1167
1168        device_del(&dev->dev);
1169
1170        rc_free_device(dev);
1171}
1172
1173EXPORT_SYMBOL_GPL(rc_unregister_device);
1174
1175/*
1176 * Init/exit code for the module. Basically, creates/removes /sys/class/rc
1177 */
1178
1179static int __init rc_core_init(void)
1180{
1181        int rc = class_register(&rc_class);
1182        if (rc) {
1183                printk(KERN_ERR "rc_core: unable to register rc class\n");
1184                return rc;
1185        }
1186
1187        rc_map_register(&empty_map);
1188
1189        return 0;
1190}
1191
1192static void __exit rc_core_exit(void)
1193{
1194        class_unregister(&rc_class);
1195        rc_map_unregister(&empty_map);
1196}
1197
1198subsys_initcall(rc_core_init);
1199module_exit(rc_core_exit);
1200
1201int rc_core_debug;    /* ir_debug level (0,1,2) */
1202EXPORT_SYMBOL_GPL(rc_core_debug);
1203module_param_named(debug, rc_core_debug, int, 0644);
1204
1205MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@redhat.com>");
1206MODULE_LICENSE("GPL");
1207