]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/media/rc/rc-main.c
toshiba_acpi: Add sysfs entries for the Cooling Method feature
[karo-tx-linux.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 CONFIG_MODULES
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 const struct {
781         u64     type;
782         const char      *name;
783         const char      *module_name;
784 } proto_names[] = {
785         { RC_BIT_NONE,          "none",         NULL                    },
786         { RC_BIT_OTHER,         "other",        NULL                    },
787         { RC_BIT_UNKNOWN,       "unknown",      NULL                    },
788         { RC_BIT_RC5 |
789           RC_BIT_RC5X,          "rc-5",         "ir-rc5-decoder"        },
790         { RC_BIT_NEC,           "nec",          "ir-nec-decoder"        },
791         { RC_BIT_RC6_0 |
792           RC_BIT_RC6_6A_20 |
793           RC_BIT_RC6_6A_24 |
794           RC_BIT_RC6_6A_32 |
795           RC_BIT_RC6_MCE,       "rc-6",         "ir-rc6-decoder"        },
796         { RC_BIT_JVC,           "jvc",          "ir-jvc-decoder"        },
797         { RC_BIT_SONY12 |
798           RC_BIT_SONY15 |
799           RC_BIT_SONY20,        "sony",         "ir-sony-decoder"       },
800         { RC_BIT_RC5_SZ,        "rc-5-sz",      "ir-rc5-decoder"        },
801         { RC_BIT_SANYO,         "sanyo",        "ir-sanyo-decoder"      },
802         { RC_BIT_SHARP,         "sharp",        "ir-sharp-decoder"      },
803         { RC_BIT_MCE_KBD,       "mce_kbd",      "ir-mce_kbd-decoder"    },
804         { RC_BIT_XMP,           "xmp",          "ir-xmp-decoder"        },
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 static bool lirc_is_present(void)
833 {
834 #if defined(CONFIG_LIRC_MODULE)
835         struct module *lirc;
836
837         mutex_lock(&module_mutex);
838         lirc = find_module("lirc_dev");
839         mutex_unlock(&module_mutex);
840
841         return lirc ? true : false;
842 #elif defined(CONFIG_LIRC)
843         return true;
844 #else
845         return false;
846 #endif
847 }
848
849 /**
850  * show_protocols() - shows the current/wakeup IR protocol(s)
851  * @device:     the device descriptor
852  * @mattr:      the device attribute struct
853  * @buf:        a pointer to the output buffer
854  *
855  * This routine is a callback routine for input read the IR protocol type(s).
856  * it is trigged by reading /sys/class/rc/rc?/[wakeup_]protocols.
857  * It returns the protocol names of supported protocols.
858  * Enabled protocols are printed in brackets.
859  *
860  * dev->lock is taken to guard against races between device
861  * registration, store_protocols and show_protocols.
862  */
863 static ssize_t show_protocols(struct device *device,
864                               struct device_attribute *mattr, char *buf)
865 {
866         struct rc_dev *dev = to_rc_dev(device);
867         struct rc_filter_attribute *fattr = to_rc_filter_attr(mattr);
868         u64 allowed, enabled;
869         char *tmp = buf;
870         int i;
871
872         /* Device is being removed */
873         if (!dev)
874                 return -EINVAL;
875
876         mutex_lock(&dev->lock);
877
878         if (fattr->type == RC_FILTER_NORMAL) {
879                 enabled = dev->enabled_protocols;
880                 allowed = dev->allowed_protocols;
881                 if (dev->raw && !allowed)
882                         allowed = ir_raw_get_allowed_protocols();
883         } else {
884                 enabled = dev->enabled_wakeup_protocols;
885                 allowed = dev->allowed_wakeup_protocols;
886         }
887
888         mutex_unlock(&dev->lock);
889
890         IR_dprintk(1, "%s: allowed - 0x%llx, enabled - 0x%llx\n",
891                    __func__, (long long)allowed, (long long)enabled);
892
893         for (i = 0; i < ARRAY_SIZE(proto_names); i++) {
894                 if (allowed & enabled & proto_names[i].type)
895                         tmp += sprintf(tmp, "[%s] ", proto_names[i].name);
896                 else if (allowed & proto_names[i].type)
897                         tmp += sprintf(tmp, "%s ", proto_names[i].name);
898
899                 if (allowed & proto_names[i].type)
900                         allowed &= ~proto_names[i].type;
901         }
902
903         if (dev->driver_type == RC_DRIVER_IR_RAW && lirc_is_present())
904                 tmp += sprintf(tmp, "[lirc] ");
905
906         if (tmp != buf)
907                 tmp--;
908         *tmp = '\n';
909
910         return tmp + 1 - buf;
911 }
912
913 /**
914  * parse_protocol_change() - parses a protocol change request
915  * @protocols:  pointer to the bitmask of current protocols
916  * @buf:        pointer to the buffer with a list of changes
917  *
918  * Writing "+proto" will add a protocol to the protocol mask.
919  * Writing "-proto" will remove a protocol from protocol mask.
920  * Writing "proto" will enable only "proto".
921  * Writing "none" will disable all protocols.
922  * Returns the number of changes performed or a negative error code.
923  */
924 static int parse_protocol_change(u64 *protocols, const char *buf)
925 {
926         const char *tmp;
927         unsigned count = 0;
928         bool enable, disable;
929         u64 mask;
930         int i;
931
932         while ((tmp = strsep((char **)&buf, " \n")) != NULL) {
933                 if (!*tmp)
934                         break;
935
936                 if (*tmp == '+') {
937                         enable = true;
938                         disable = false;
939                         tmp++;
940                 } else if (*tmp == '-') {
941                         enable = false;
942                         disable = true;
943                         tmp++;
944                 } else {
945                         enable = false;
946                         disable = false;
947                 }
948
949                 for (i = 0; i < ARRAY_SIZE(proto_names); i++) {
950                         if (!strcasecmp(tmp, proto_names[i].name)) {
951                                 mask = proto_names[i].type;
952                                 break;
953                         }
954                 }
955
956                 if (i == ARRAY_SIZE(proto_names)) {
957                         if (!strcasecmp(tmp, "lirc"))
958                                 mask = 0;
959                         else {
960                                 IR_dprintk(1, "Unknown protocol: '%s'\n", tmp);
961                                 return -EINVAL;
962                         }
963                 }
964
965                 count++;
966
967                 if (enable)
968                         *protocols |= mask;
969                 else if (disable)
970                         *protocols &= ~mask;
971                 else
972                         *protocols = mask;
973         }
974
975         if (!count) {
976                 IR_dprintk(1, "Protocol not specified\n");
977                 return -EINVAL;
978         }
979
980         return count;
981 }
982
983 static void ir_raw_load_modules(u64 *protocols)
984
985 {
986         u64 available;
987         int i, ret;
988
989         for (i = 0; i < ARRAY_SIZE(proto_names); i++) {
990                 if (proto_names[i].type == RC_BIT_NONE ||
991                     proto_names[i].type & (RC_BIT_OTHER | RC_BIT_UNKNOWN))
992                         continue;
993
994                 available = ir_raw_get_allowed_protocols();
995                 if (!(*protocols & proto_names[i].type & ~available))
996                         continue;
997
998                 if (!proto_names[i].module_name) {
999                         pr_err("Can't enable IR protocol %s\n",
1000                                proto_names[i].name);
1001                         *protocols &= ~proto_names[i].type;
1002                         continue;
1003                 }
1004
1005                 ret = request_module("%s", proto_names[i].module_name);
1006                 if (ret < 0) {
1007                         pr_err("Couldn't load IR protocol module %s\n",
1008                                proto_names[i].module_name);
1009                         *protocols &= ~proto_names[i].type;
1010                         continue;
1011                 }
1012                 msleep(20);
1013                 available = ir_raw_get_allowed_protocols();
1014                 if (!(*protocols & proto_names[i].type & ~available))
1015                         continue;
1016
1017                 pr_err("Loaded IR protocol module %s, \
1018                        but protocol %s still not available\n",
1019                        proto_names[i].module_name,
1020                        proto_names[i].name);
1021                 *protocols &= ~proto_names[i].type;
1022         }
1023 }
1024
1025 /**
1026  * store_protocols() - changes the current/wakeup IR protocol(s)
1027  * @device:     the device descriptor
1028  * @mattr:      the device attribute struct
1029  * @buf:        a pointer to the input buffer
1030  * @len:        length of the input buffer
1031  *
1032  * This routine is for changing the IR protocol type.
1033  * It is trigged by writing to /sys/class/rc/rc?/[wakeup_]protocols.
1034  * See parse_protocol_change() for the valid commands.
1035  * Returns @len on success or a negative error code.
1036  *
1037  * dev->lock is taken to guard against races between device
1038  * registration, store_protocols and show_protocols.
1039  */
1040 static ssize_t store_protocols(struct device *device,
1041                                struct device_attribute *mattr,
1042                                const char *buf, size_t len)
1043 {
1044         struct rc_dev *dev = to_rc_dev(device);
1045         struct rc_filter_attribute *fattr = to_rc_filter_attr(mattr);
1046         u64 *current_protocols;
1047         int (*change_protocol)(struct rc_dev *dev, u64 *rc_type);
1048         struct rc_scancode_filter *filter;
1049         int (*set_filter)(struct rc_dev *dev, struct rc_scancode_filter *filter);
1050         u64 old_protocols, new_protocols;
1051         ssize_t rc;
1052
1053         /* Device is being removed */
1054         if (!dev)
1055                 return -EINVAL;
1056
1057         if (fattr->type == RC_FILTER_NORMAL) {
1058                 IR_dprintk(1, "Normal protocol change requested\n");
1059                 current_protocols = &dev->enabled_protocols;
1060                 change_protocol = dev->change_protocol;
1061                 filter = &dev->scancode_filter;
1062                 set_filter = dev->s_filter;
1063         } else {
1064                 IR_dprintk(1, "Wakeup protocol change requested\n");
1065                 current_protocols = &dev->enabled_wakeup_protocols;
1066                 change_protocol = dev->change_wakeup_protocol;
1067                 filter = &dev->scancode_wakeup_filter;
1068                 set_filter = dev->s_wakeup_filter;
1069         }
1070
1071         if (!change_protocol) {
1072                 IR_dprintk(1, "Protocol switching not supported\n");
1073                 return -EINVAL;
1074         }
1075
1076         mutex_lock(&dev->lock);
1077
1078         old_protocols = *current_protocols;
1079         new_protocols = old_protocols;
1080         rc = parse_protocol_change(&new_protocols, buf);
1081         if (rc < 0)
1082                 goto out;
1083
1084         rc = change_protocol(dev, &new_protocols);
1085         if (rc < 0) {
1086                 IR_dprintk(1, "Error setting protocols to 0x%llx\n",
1087                            (long long)new_protocols);
1088                 goto out;
1089         }
1090
1091         if (dev->driver_type == RC_DRIVER_IR_RAW)
1092                 ir_raw_load_modules(&new_protocols);
1093
1094         if (new_protocols != old_protocols) {
1095                 *current_protocols = new_protocols;
1096                 IR_dprintk(1, "Protocols changed to 0x%llx\n",
1097                            (long long)new_protocols);
1098         }
1099
1100         /*
1101          * If a protocol change was attempted the filter may need updating, even
1102          * if the actual protocol mask hasn't changed (since the driver may have
1103          * cleared the filter).
1104          * Try setting the same filter with the new protocol (if any).
1105          * Fall back to clearing the filter.
1106          */
1107         if (set_filter && filter->mask) {
1108                 if (new_protocols)
1109                         rc = set_filter(dev, filter);
1110                 else
1111                         rc = -1;
1112
1113                 if (rc < 0) {
1114                         filter->data = 0;
1115                         filter->mask = 0;
1116                         set_filter(dev, filter);
1117                 }
1118         }
1119
1120         rc = len;
1121
1122 out:
1123         mutex_unlock(&dev->lock);
1124         return rc;
1125 }
1126
1127 /**
1128  * show_filter() - shows the current scancode filter value or mask
1129  * @device:     the device descriptor
1130  * @attr:       the device attribute struct
1131  * @buf:        a pointer to the output buffer
1132  *
1133  * This routine is a callback routine to read a scancode filter value or mask.
1134  * It is trigged by reading /sys/class/rc/rc?/[wakeup_]filter[_mask].
1135  * It prints the current scancode filter value or mask of the appropriate filter
1136  * type in hexadecimal into @buf and returns the size of the buffer.
1137  *
1138  * Bits of the filter value corresponding to set bits in the filter mask are
1139  * compared against input scancodes and non-matching scancodes are discarded.
1140  *
1141  * dev->lock is taken to guard against races between device registration,
1142  * store_filter and show_filter.
1143  */
1144 static ssize_t show_filter(struct device *device,
1145                            struct device_attribute *attr,
1146                            char *buf)
1147 {
1148         struct rc_dev *dev = to_rc_dev(device);
1149         struct rc_filter_attribute *fattr = to_rc_filter_attr(attr);
1150         struct rc_scancode_filter *filter;
1151         u32 val;
1152
1153         /* Device is being removed */
1154         if (!dev)
1155                 return -EINVAL;
1156
1157         if (fattr->type == RC_FILTER_NORMAL)
1158                 filter = &dev->scancode_filter;
1159         else
1160                 filter = &dev->scancode_wakeup_filter;
1161
1162         mutex_lock(&dev->lock);
1163         if (fattr->mask)
1164                 val = filter->mask;
1165         else
1166                 val = filter->data;
1167         mutex_unlock(&dev->lock);
1168
1169         return sprintf(buf, "%#x\n", val);
1170 }
1171
1172 /**
1173  * store_filter() - changes the scancode filter value
1174  * @device:     the device descriptor
1175  * @attr:       the device attribute struct
1176  * @buf:        a pointer to the input buffer
1177  * @len:        length of the input buffer
1178  *
1179  * This routine is for changing a scancode filter value or mask.
1180  * It is trigged by writing to /sys/class/rc/rc?/[wakeup_]filter[_mask].
1181  * Returns -EINVAL if an invalid filter value for the current protocol was
1182  * specified or if scancode filtering is not supported by the driver, otherwise
1183  * returns @len.
1184  *
1185  * Bits of the filter value corresponding to set bits in the filter mask are
1186  * compared against input scancodes and non-matching scancodes are discarded.
1187  *
1188  * dev->lock is taken to guard against races between device registration,
1189  * store_filter and show_filter.
1190  */
1191 static ssize_t store_filter(struct device *device,
1192                             struct device_attribute *attr,
1193                             const char *buf, size_t len)
1194 {
1195         struct rc_dev *dev = to_rc_dev(device);
1196         struct rc_filter_attribute *fattr = to_rc_filter_attr(attr);
1197         struct rc_scancode_filter new_filter, *filter;
1198         int ret;
1199         unsigned long val;
1200         int (*set_filter)(struct rc_dev *dev, struct rc_scancode_filter *filter);
1201         u64 *enabled_protocols;
1202
1203         /* Device is being removed */
1204         if (!dev)
1205                 return -EINVAL;
1206
1207         ret = kstrtoul(buf, 0, &val);
1208         if (ret < 0)
1209                 return ret;
1210
1211         if (fattr->type == RC_FILTER_NORMAL) {
1212                 set_filter = dev->s_filter;
1213                 enabled_protocols = &dev->enabled_protocols;
1214                 filter = &dev->scancode_filter;
1215         } else {
1216                 set_filter = dev->s_wakeup_filter;
1217                 enabled_protocols = &dev->enabled_wakeup_protocols;
1218                 filter = &dev->scancode_wakeup_filter;
1219         }
1220
1221         if (!set_filter)
1222                 return -EINVAL;
1223
1224         mutex_lock(&dev->lock);
1225
1226         new_filter = *filter;
1227         if (fattr->mask)
1228                 new_filter.mask = val;
1229         else
1230                 new_filter.data = val;
1231
1232         if (!*enabled_protocols && val) {
1233                 /* refuse to set a filter unless a protocol is enabled */
1234                 ret = -EINVAL;
1235                 goto unlock;
1236         }
1237
1238         ret = set_filter(dev, &new_filter);
1239         if (ret < 0)
1240                 goto unlock;
1241
1242         *filter = new_filter;
1243
1244 unlock:
1245         mutex_unlock(&dev->lock);
1246         return (ret < 0) ? ret : len;
1247 }
1248
1249 static void rc_dev_release(struct device *device)
1250 {
1251 }
1252
1253 #define ADD_HOTPLUG_VAR(fmt, val...)                                    \
1254         do {                                                            \
1255                 int err = add_uevent_var(env, fmt, val);                \
1256                 if (err)                                                \
1257                         return err;                                     \
1258         } while (0)
1259
1260 static int rc_dev_uevent(struct device *device, struct kobj_uevent_env *env)
1261 {
1262         struct rc_dev *dev = to_rc_dev(device);
1263
1264         if (dev->rc_map.name)
1265                 ADD_HOTPLUG_VAR("NAME=%s", dev->rc_map.name);
1266         if (dev->driver_name)
1267                 ADD_HOTPLUG_VAR("DRV_NAME=%s", dev->driver_name);
1268
1269         return 0;
1270 }
1271
1272 /*
1273  * Static device attribute struct with the sysfs attributes for IR's
1274  */
1275 static RC_PROTO_ATTR(protocols, S_IRUGO | S_IWUSR,
1276                      show_protocols, store_protocols, RC_FILTER_NORMAL);
1277 static RC_PROTO_ATTR(wakeup_protocols, S_IRUGO | S_IWUSR,
1278                      show_protocols, store_protocols, RC_FILTER_WAKEUP);
1279 static RC_FILTER_ATTR(filter, S_IRUGO|S_IWUSR,
1280                       show_filter, store_filter, RC_FILTER_NORMAL, false);
1281 static RC_FILTER_ATTR(filter_mask, S_IRUGO|S_IWUSR,
1282                       show_filter, store_filter, RC_FILTER_NORMAL, true);
1283 static RC_FILTER_ATTR(wakeup_filter, S_IRUGO|S_IWUSR,
1284                       show_filter, store_filter, RC_FILTER_WAKEUP, false);
1285 static RC_FILTER_ATTR(wakeup_filter_mask, S_IRUGO|S_IWUSR,
1286                       show_filter, store_filter, RC_FILTER_WAKEUP, true);
1287
1288 static struct attribute *rc_dev_protocol_attrs[] = {
1289         &dev_attr_protocols.attr.attr,
1290         NULL,
1291 };
1292
1293 static struct attribute_group rc_dev_protocol_attr_grp = {
1294         .attrs  = rc_dev_protocol_attrs,
1295 };
1296
1297 static struct attribute *rc_dev_wakeup_protocol_attrs[] = {
1298         &dev_attr_wakeup_protocols.attr.attr,
1299         NULL,
1300 };
1301
1302 static struct attribute_group rc_dev_wakeup_protocol_attr_grp = {
1303         .attrs  = rc_dev_wakeup_protocol_attrs,
1304 };
1305
1306 static struct attribute *rc_dev_filter_attrs[] = {
1307         &dev_attr_filter.attr.attr,
1308         &dev_attr_filter_mask.attr.attr,
1309         NULL,
1310 };
1311
1312 static struct attribute_group rc_dev_filter_attr_grp = {
1313         .attrs  = rc_dev_filter_attrs,
1314 };
1315
1316 static struct attribute *rc_dev_wakeup_filter_attrs[] = {
1317         &dev_attr_wakeup_filter.attr.attr,
1318         &dev_attr_wakeup_filter_mask.attr.attr,
1319         NULL,
1320 };
1321
1322 static struct attribute_group rc_dev_wakeup_filter_attr_grp = {
1323         .attrs  = rc_dev_wakeup_filter_attrs,
1324 };
1325
1326 static struct device_type rc_dev_type = {
1327         .release        = rc_dev_release,
1328         .uevent         = rc_dev_uevent,
1329 };
1330
1331 struct rc_dev *rc_allocate_device(void)
1332 {
1333         struct rc_dev *dev;
1334
1335         dev = kzalloc(sizeof(*dev), GFP_KERNEL);
1336         if (!dev)
1337                 return NULL;
1338
1339         dev->input_dev = input_allocate_device();
1340         if (!dev->input_dev) {
1341                 kfree(dev);
1342                 return NULL;
1343         }
1344
1345         dev->input_dev->getkeycode = ir_getkeycode;
1346         dev->input_dev->setkeycode = ir_setkeycode;
1347         input_set_drvdata(dev->input_dev, dev);
1348
1349         spin_lock_init(&dev->rc_map.lock);
1350         spin_lock_init(&dev->keylock);
1351         mutex_init(&dev->lock);
1352         setup_timer(&dev->timer_keyup, ir_timer_keyup, (unsigned long)dev);
1353
1354         dev->dev.type = &rc_dev_type;
1355         dev->dev.class = &rc_class;
1356         device_initialize(&dev->dev);
1357
1358         __module_get(THIS_MODULE);
1359         return dev;
1360 }
1361 EXPORT_SYMBOL_GPL(rc_allocate_device);
1362
1363 void rc_free_device(struct rc_dev *dev)
1364 {
1365         if (!dev)
1366                 return;
1367
1368         input_free_device(dev->input_dev);
1369
1370         put_device(&dev->dev);
1371
1372         kfree(dev);
1373         module_put(THIS_MODULE);
1374 }
1375 EXPORT_SYMBOL_GPL(rc_free_device);
1376
1377 int rc_register_device(struct rc_dev *dev)
1378 {
1379         static bool raw_init = false; /* raw decoders loaded? */
1380         struct rc_map *rc_map;
1381         const char *path;
1382         int attr = 0;
1383         int minor;
1384         int rc;
1385
1386         if (!dev || !dev->map_name)
1387                 return -EINVAL;
1388
1389         rc_map = rc_map_get(dev->map_name);
1390         if (!rc_map)
1391                 rc_map = rc_map_get(RC_MAP_EMPTY);
1392         if (!rc_map || !rc_map->scan || rc_map->size == 0)
1393                 return -EINVAL;
1394
1395         set_bit(EV_KEY, dev->input_dev->evbit);
1396         set_bit(EV_REP, dev->input_dev->evbit);
1397         set_bit(EV_MSC, dev->input_dev->evbit);
1398         set_bit(MSC_SCAN, dev->input_dev->mscbit);
1399         if (dev->open)
1400                 dev->input_dev->open = ir_open;
1401         if (dev->close)
1402                 dev->input_dev->close = ir_close;
1403
1404         minor = ida_simple_get(&rc_ida, 0, RC_DEV_MAX, GFP_KERNEL);
1405         if (minor < 0)
1406                 return minor;
1407
1408         dev->minor = minor;
1409         dev_set_name(&dev->dev, "rc%u", dev->minor);
1410         dev_set_drvdata(&dev->dev, dev);
1411
1412         dev->dev.groups = dev->sysfs_groups;
1413         dev->sysfs_groups[attr++] = &rc_dev_protocol_attr_grp;
1414         if (dev->s_filter)
1415                 dev->sysfs_groups[attr++] = &rc_dev_filter_attr_grp;
1416         if (dev->s_wakeup_filter)
1417                 dev->sysfs_groups[attr++] = &rc_dev_wakeup_filter_attr_grp;
1418         if (dev->change_wakeup_protocol)
1419                 dev->sysfs_groups[attr++] = &rc_dev_wakeup_protocol_attr_grp;
1420         dev->sysfs_groups[attr++] = NULL;
1421
1422         /*
1423          * Take the lock here, as the device sysfs node will appear
1424          * when device_add() is called, which may trigger an ir-keytable udev
1425          * rule, which will in turn call show_protocols and access
1426          * dev->enabled_protocols before it has been initialized.
1427          */
1428         mutex_lock(&dev->lock);
1429
1430         rc = device_add(&dev->dev);
1431         if (rc)
1432                 goto out_unlock;
1433
1434         rc = ir_setkeytable(dev, rc_map);
1435         if (rc)
1436                 goto out_dev;
1437
1438         dev->input_dev->dev.parent = &dev->dev;
1439         memcpy(&dev->input_dev->id, &dev->input_id, sizeof(dev->input_id));
1440         dev->input_dev->phys = dev->input_phys;
1441         dev->input_dev->name = dev->input_name;
1442
1443         /* input_register_device can call ir_open, so unlock mutex here */
1444         mutex_unlock(&dev->lock);
1445
1446         rc = input_register_device(dev->input_dev);
1447
1448         mutex_lock(&dev->lock);
1449
1450         if (rc)
1451                 goto out_table;
1452
1453         /*
1454          * Default delay of 250ms is too short for some protocols, especially
1455          * since the timeout is currently set to 250ms. Increase it to 500ms,
1456          * to avoid wrong repetition of the keycodes. Note that this must be
1457          * set after the call to input_register_device().
1458          */
1459         dev->input_dev->rep[REP_DELAY] = 500;
1460
1461         /*
1462          * As a repeat event on protocols like RC-5 and NEC take as long as
1463          * 110/114ms, using 33ms as a repeat period is not the right thing
1464          * to do.
1465          */
1466         dev->input_dev->rep[REP_PERIOD] = 125;
1467
1468         path = kobject_get_path(&dev->dev.kobj, GFP_KERNEL);
1469         dev_info(&dev->dev, "%s as %s\n",
1470                 dev->input_name ?: "Unspecified device", path ?: "N/A");
1471         kfree(path);
1472
1473         if (dev->driver_type == RC_DRIVER_IR_RAW) {
1474                 if (!raw_init) {
1475                         request_module_nowait("ir-lirc-codec");
1476                         raw_init = true;
1477                 }
1478                 /* calls ir_register_device so unlock mutex here*/
1479                 mutex_unlock(&dev->lock);
1480                 rc = ir_raw_event_register(dev);
1481                 mutex_lock(&dev->lock);
1482                 if (rc < 0)
1483                         goto out_input;
1484         }
1485
1486         if (dev->change_protocol) {
1487                 u64 rc_type = (1ll << rc_map->rc_type);
1488                 rc = dev->change_protocol(dev, &rc_type);
1489                 if (rc < 0)
1490                         goto out_raw;
1491                 dev->enabled_protocols = rc_type;
1492         }
1493
1494         mutex_unlock(&dev->lock);
1495
1496         IR_dprintk(1, "Registered rc%u (driver: %s, remote: %s, mode %s)\n",
1497                    dev->minor,
1498                    dev->driver_name ? dev->driver_name : "unknown",
1499                    rc_map->name ? rc_map->name : "unknown",
1500                    dev->driver_type == RC_DRIVER_IR_RAW ? "raw" : "cooked");
1501
1502         return 0;
1503
1504 out_raw:
1505         if (dev->driver_type == RC_DRIVER_IR_RAW)
1506                 ir_raw_event_unregister(dev);
1507 out_input:
1508         input_unregister_device(dev->input_dev);
1509         dev->input_dev = NULL;
1510 out_table:
1511         ir_free_table(&dev->rc_map);
1512 out_dev:
1513         device_del(&dev->dev);
1514 out_unlock:
1515         mutex_unlock(&dev->lock);
1516         ida_simple_remove(&rc_ida, minor);
1517         return rc;
1518 }
1519 EXPORT_SYMBOL_GPL(rc_register_device);
1520
1521 void rc_unregister_device(struct rc_dev *dev)
1522 {
1523         if (!dev)
1524                 return;
1525
1526         del_timer_sync(&dev->timer_keyup);
1527
1528         if (dev->driver_type == RC_DRIVER_IR_RAW)
1529                 ir_raw_event_unregister(dev);
1530
1531         /* Freeing the table should also call the stop callback */
1532         ir_free_table(&dev->rc_map);
1533         IR_dprintk(1, "Freed keycode table\n");
1534
1535         input_unregister_device(dev->input_dev);
1536         dev->input_dev = NULL;
1537
1538         device_del(&dev->dev);
1539
1540         ida_simple_remove(&rc_ida, dev->minor);
1541
1542         rc_free_device(dev);
1543 }
1544
1545 EXPORT_SYMBOL_GPL(rc_unregister_device);
1546
1547 /*
1548  * Init/exit code for the module. Basically, creates/removes /sys/class/rc
1549  */
1550
1551 static int __init rc_core_init(void)
1552 {
1553         int rc = class_register(&rc_class);
1554         if (rc) {
1555                 printk(KERN_ERR "rc_core: unable to register rc class\n");
1556                 return rc;
1557         }
1558
1559         led_trigger_register_simple("rc-feedback", &led_feedback);
1560         rc_map_register(&empty_map);
1561
1562         return 0;
1563 }
1564
1565 static void __exit rc_core_exit(void)
1566 {
1567         class_unregister(&rc_class);
1568         led_trigger_unregister_simple(led_feedback);
1569         rc_map_unregister(&empty_map);
1570 }
1571
1572 subsys_initcall(rc_core_init);
1573 module_exit(rc_core_exit);
1574
1575 int rc_core_debug;    /* ir_debug level (0,1,2) */
1576 EXPORT_SYMBOL_GPL(rc_core_debug);
1577 module_param_named(debug, rc_core_debug, int, 0644);
1578
1579 MODULE_AUTHOR("Mauro Carvalho Chehab");
1580 MODULE_LICENSE("GPL");