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