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