rc-main.c 29.2 KB
Newer Older
1
/* rc-main.c - Remote Controller core module
2
 *
3
 * Copyright (C) 2009-2010 by Mauro Carvalho Chehab <mchehab@redhat.com>
4 5 6 7 8 9 10 11 12
 *
 * This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation version 2 of the License.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
13 14
 */

15
#include <media/rc-core.h>
16 17
#include <linux/spinlock.h>
#include <linux/delay.h>
18
#include <linux/input.h>
19
#include <linux/slab.h>
20
#include <linux/device.h>
21
#include "rc-core-priv.h"
22

23 24 25
/* Sizes are in bytes, 256 bytes allows for 32 entries on x64 */
#define IR_TAB_MIN_SIZE	256
#define IR_TAB_MAX_SIZE	8192
26

27 28 29
/* FIXME: IR_KEYPRESS_TIMEOUT should be protocol specific */
#define IR_KEYPRESS_TIMEOUT 250

30
/* Used to keep track of known keymaps */
31 32 33
static LIST_HEAD(rc_map_list);
static DEFINE_SPINLOCK(rc_map_lock);

34
static struct rc_map_list *seek_rc_map(const char *name)
35
{
36
	struct rc_map_list *map = NULL;
37 38 39 40 41 42 43 44 45 46 47 48 49

	spin_lock(&rc_map_lock);
	list_for_each_entry(map, &rc_map_list, list) {
		if (!strcmp(name, map->map.name)) {
			spin_unlock(&rc_map_lock);
			return map;
		}
	}
	spin_unlock(&rc_map_lock);

	return NULL;
}

50
struct rc_map *rc_map_get(const char *name)
51 52
{

53
	struct rc_map_list *map;
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

	map = seek_rc_map(name);
#ifdef MODULE
	if (!map) {
		int rc = request_module(name);
		if (rc < 0) {
			printk(KERN_ERR "Couldn't load IR keymap %s\n", name);
			return NULL;
		}
		msleep(20);	/* Give some time for IR to register */

		map = seek_rc_map(name);
	}
#endif
	if (!map) {
		printk(KERN_ERR "IR keymap %s not found\n", name);
		return NULL;
	}

	printk(KERN_INFO "Registered IR keymap %s\n", map->map.name);

	return &map->map;
}
77
EXPORT_SYMBOL_GPL(rc_map_get);
78

79
int rc_map_register(struct rc_map_list *map)
80 81 82 83 84 85
{
	spin_lock(&rc_map_lock);
	list_add_tail(&map->list, &rc_map_list);
	spin_unlock(&rc_map_lock);
	return 0;
}
86
EXPORT_SYMBOL_GPL(rc_map_register);
87

88
void rc_map_unregister(struct rc_map_list *map)
89 90 91 92 93
{
	spin_lock(&rc_map_lock);
	list_del(&map->list);
	spin_unlock(&rc_map_lock);
}
94
EXPORT_SYMBOL_GPL(rc_map_unregister);
95 96


97
static struct rc_map_table empty[] = {
98 99 100
	{ 0x2a, KEY_COFFEE },
};

101
static struct rc_map_list empty_map = {
102 103 104
	.map = {
		.scan    = empty,
		.size    = ARRAY_SIZE(empty),
105
		.rc_type = RC_TYPE_UNKNOWN,	/* Legacy IR type */
106 107 108 109
		.name    = RC_MAP_EMPTY,
	}
};

110 111
/**
 * ir_create_table() - initializes a scancode table
112
 * @rc_map:	the rc_map to initialize
113
 * @name:	name to assign to the table
114
 * @rc_type:	ir type to assign to the new table
115 116 117
 * @size:	initial size of the table
 * @return:	zero on success or a negative error code
 *
118
 * This routine will initialize the rc_map and will allocate
119
 * memory to hold at least the specified number of elements.
120
 */
121
static int ir_create_table(struct rc_map *rc_map,
122
			   const char *name, u64 rc_type, size_t size)
123
{
124 125
	rc_map->name = name;
	rc_map->rc_type = rc_type;
126 127
	rc_map->alloc = roundup_pow_of_two(size * sizeof(struct rc_map_table));
	rc_map->size = rc_map->alloc / sizeof(struct rc_map_table);
128 129
	rc_map->scan = kmalloc(rc_map->alloc, GFP_KERNEL);
	if (!rc_map->scan)
130 131 132
		return -ENOMEM;

	IR_dprintk(1, "Allocated space for %u keycode entries (%u bytes)\n",
133
		   rc_map->size, rc_map->alloc);
134 135 136 137 138
	return 0;
}

/**
 * ir_free_table() - frees memory allocated by a scancode table
139
 * @rc_map:	the table whose mappings need to be freed
140 141 142 143
 *
 * This routine will free memory alloctaed for key mappings used by given
 * scancode table.
 */
144
static void ir_free_table(struct rc_map *rc_map)
145
{
146 147 148
	rc_map->size = 0;
	kfree(rc_map->scan);
	rc_map->scan = NULL;
149 150
}

151
/**
152
 * ir_resize_table() - resizes a scancode table if necessary
153
 * @rc_map:	the rc_map to resize
154
 * @gfp_flags:	gfp flags to use when allocating memory
155
 * @return:	zero on success or a negative error code
156
 *
157
 * This routine will shrink the rc_map if it has lots of
158
 * unused entries and grow it if it is full.
159
 */
160
static int ir_resize_table(struct rc_map *rc_map, gfp_t gfp_flags)
161
{
162
	unsigned int oldalloc = rc_map->alloc;
163
	unsigned int newalloc = oldalloc;
164 165
	struct rc_map_table *oldscan = rc_map->scan;
	struct rc_map_table *newscan;
166

167
	if (rc_map->size == rc_map->len) {
168
		/* All entries in use -> grow keytable */
169
		if (rc_map->alloc >= IR_TAB_MAX_SIZE)
170
			return -ENOMEM;
171

172 173 174
		newalloc *= 2;
		IR_dprintk(1, "Growing table to %u bytes\n", newalloc);
	}
175

176
	if ((rc_map->len * 3 < rc_map->size) && (oldalloc > IR_TAB_MIN_SIZE)) {
177 178 179 180
		/* Less than 1/3 of entries in use -> shrink keytable */
		newalloc /= 2;
		IR_dprintk(1, "Shrinking table to %u bytes\n", newalloc);
	}
181

182 183
	if (newalloc == oldalloc)
		return 0;
184

185
	newscan = kmalloc(newalloc, gfp_flags);
186 187 188 189
	if (!newscan) {
		IR_dprintk(1, "Failed to kmalloc %u bytes\n", newalloc);
		return -ENOMEM;
	}
190

191
	memcpy(newscan, rc_map->scan, rc_map->len * sizeof(struct rc_map_table));
192 193
	rc_map->scan = newscan;
	rc_map->alloc = newalloc;
194
	rc_map->size = rc_map->alloc / sizeof(struct rc_map_table);
195 196
	kfree(oldscan);
	return 0;
197 198
}

199
/**
200
 * ir_update_mapping() - set a keycode in the scancode->keycode table
201
 * @dev:	the struct rc_dev device descriptor
202
 * @rc_map:	scancode table to be adjusted
203 204 205 206
 * @index:	index of the mapping that needs to be updated
 * @keycode:	the desired keycode
 * @return:	previous keycode assigned to the mapping
 *
207
 * This routine is used to update scancode->keycode mapping at given
208 209
 * position.
 */
210
static unsigned int ir_update_mapping(struct rc_dev *dev,
211
				      struct rc_map *rc_map,
212 213 214
				      unsigned int index,
				      unsigned int new_keycode)
{
215
	int old_keycode = rc_map->scan[index].keycode;
216 217 218 219 220
	int i;

	/* Did the user wish to remove the mapping? */
	if (new_keycode == KEY_RESERVED || new_keycode == KEY_UNKNOWN) {
		IR_dprintk(1, "#%d: Deleting scan 0x%04x\n",
221 222 223
			   index, rc_map->scan[index].scancode);
		rc_map->len--;
		memmove(&rc_map->scan[index], &rc_map->scan[index+ 1],
224
			(rc_map->len - index) * sizeof(struct rc_map_table));
225 226 227 228
	} else {
		IR_dprintk(1, "#%d: %s scan 0x%04x with key 0x%04x\n",
			   index,
			   old_keycode == KEY_RESERVED ? "New" : "Replacing",
229 230
			   rc_map->scan[index].scancode, new_keycode);
		rc_map->scan[index].keycode = new_keycode;
231
		__set_bit(new_keycode, dev->input_dev->keybit);
232 233 234 235
	}

	if (old_keycode != KEY_RESERVED) {
		/* A previous mapping was updated... */
236
		__clear_bit(old_keycode, dev->input_dev->keybit);
237
		/* ... but another scancode might use the same keycode */
238 239
		for (i = 0; i < rc_map->len; i++) {
			if (rc_map->scan[i].keycode == old_keycode) {
240
				__set_bit(old_keycode, dev->input_dev->keybit);
241 242 243 244 245
				break;
			}
		}

		/* Possibly shrink the keytable, failure is not a problem */
246
		ir_resize_table(rc_map, GFP_ATOMIC);
247 248 249 250 251 252
	}

	return old_keycode;
}

/**
253
 * ir_establish_scancode() - set a keycode in the scancode->keycode table
254
 * @dev:	the struct rc_dev device descriptor
255
 * @rc_map:	scancode table to be searched
256 257 258 259 260
 * @scancode:	the desired scancode
 * @resize:	controls whether we allowed to resize the table to
 *		accomodate not yet present scancodes
 * @return:	index of the mapping containing scancode in question
 *		or -1U in case of failure.
261
 *
262
 * This routine is used to locate given scancode in rc_map.
263 264
 * If scancode is not yet present the routine will allocate a new slot
 * for it.
265
 */
266
static unsigned int ir_establish_scancode(struct rc_dev *dev,
267
					  struct rc_map *rc_map,
268 269
					  unsigned int scancode,
					  bool resize)
270
{
271
	unsigned int i;
272 273 274 275 276 277

	/*
	 * Unfortunately, some hardware-based IR decoders don't provide
	 * all bits for the complete IR code. In general, they provide only
	 * the command part of the IR code. Yet, as it is possible to replace
	 * the provided IR with another one, it is needed to allow loading
278 279
	 * IR tables from other remotes. So, we support specifying a mask to
	 * indicate the valid bits of the scancodes.
280
	 */
281 282
	if (dev->scanmask)
		scancode &= dev->scanmask;
283 284

	/* First check if we already have a mapping for this ir command */
285 286
	for (i = 0; i < rc_map->len; i++) {
		if (rc_map->scan[i].scancode == scancode)
287 288
			return i;

289
		/* Keytable is sorted from lowest to highest scancode */
290
		if (rc_map->scan[i].scancode >= scancode)
291 292
			break;
	}
293

294
	/* No previous mapping found, we might need to grow the table */
295 296
	if (rc_map->size == rc_map->len) {
		if (!resize || ir_resize_table(rc_map, GFP_ATOMIC))
297 298
			return -1U;
	}
299

300
	/* i is the proper index to insert our new keycode */
301 302
	if (i < rc_map->len)
		memmove(&rc_map->scan[i + 1], &rc_map->scan[i],
303
			(rc_map->len - i) * sizeof(struct rc_map_table));
304 305 306
	rc_map->scan[i].scancode = scancode;
	rc_map->scan[i].keycode = KEY_RESERVED;
	rc_map->len++;
307

308
	return i;
309 310
}

311
/**
312
 * ir_setkeycode() - set a keycode in the scancode->keycode table
313
 * @idev:	the struct input_dev device descriptor
314
 * @scancode:	the desired scancode
315 316
 * @keycode:	result
 * @return:	-EINVAL if the keycode could not be inserted, otherwise zero.
317
 *
318
 * This routine is used to handle evdev EVIOCSKEY ioctl.
319
 */
320
static int ir_setkeycode(struct input_dev *idev,
321 322
			 const struct input_keymap_entry *ke,
			 unsigned int *old_keycode)
323
{
324
	struct rc_dev *rdev = input_get_drvdata(idev);
325
	struct rc_map *rc_map = &rdev->rc_map;
326 327
	unsigned int index;
	unsigned int scancode;
328
	int retval = 0;
329
	unsigned long flags;
330

331
	spin_lock_irqsave(&rc_map->lock, flags);
332 333 334

	if (ke->flags & INPUT_KEYMAP_BY_INDEX) {
		index = ke->index;
335
		if (index >= rc_map->len) {
336 337 338 339 340 341 342 343
			retval = -EINVAL;
			goto out;
		}
	} else {
		retval = input_scancode_to_scalar(ke, &scancode);
		if (retval)
			goto out;

344 345
		index = ir_establish_scancode(rdev, rc_map, scancode, true);
		if (index >= rc_map->len) {
346 347 348 349 350
			retval = -ENOMEM;
			goto out;
		}
	}

351
	*old_keycode = ir_update_mapping(rdev, rc_map, index, ke->keycode);
352 353

out:
354
	spin_unlock_irqrestore(&rc_map->lock, flags);
355
	return retval;
356 357 358
}

/**
359
 * ir_setkeytable() - sets several entries in the scancode->keycode table
360
 * @dev:	the struct rc_dev device descriptor
361 362
 * @to:		the struct rc_map to copy entries to
 * @from:	the struct rc_map to copy entries from
363
 * @return:	-ENOMEM if all keycodes could not be inserted, otherwise zero.
364
 *
365
 * This routine is used to handle table initialization.
366
 */
367
static int ir_setkeytable(struct rc_dev *dev,
368
			  const struct rc_map *from)
369
{
370
	struct rc_map *rc_map = &dev->rc_map;
371 372 373
	unsigned int i, index;
	int rc;

374
	rc = ir_create_table(rc_map, from->name,
375
			     from->rc_type, from->size);
376 377 378 379
	if (rc)
		return rc;

	IR_dprintk(1, "Allocated space for %u keycode entries (%u bytes)\n",
380
		   rc_map->size, rc_map->alloc);
381

382
	for (i = 0; i < from->size; i++) {
383
		index = ir_establish_scancode(dev, rc_map,
384
					      from->scan[i].scancode, false);
385
		if (index >= rc_map->len) {
386
			rc = -ENOMEM;
387
			break;
388 389
		}

390
		ir_update_mapping(dev, rc_map, index,
391
				  from->scan[i].keycode);
392
	}
393 394

	if (rc)
395
		ir_free_table(rc_map);
396

397
	return rc;
398 399
}

400 401
/**
 * ir_lookup_by_scancode() - locate mapping by scancode
402
 * @rc_map:	the struct rc_map to search
403 404 405 406 407 408
 * @scancode:	scancode to look for in the table
 * @return:	index in the table, -1U if not found
 *
 * This routine performs binary search in RC keykeymap table for
 * given scancode.
 */
409
static unsigned int ir_lookup_by_scancode(const struct rc_map *rc_map,
410 411
					  unsigned int scancode)
{
412
	int start = 0;
413
	int end = rc_map->len - 1;
414
	int mid;
415 416 417

	while (start <= end) {
		mid = (start + end) / 2;
418
		if (rc_map->scan[mid].scancode < scancode)
419
			start = mid + 1;
420
		else if (rc_map->scan[mid].scancode > scancode)
421 422 423 424 425 426 427 428
			end = mid - 1;
		else
			return mid;
	}

	return -1U;
}

429
/**
430
 * ir_getkeycode() - get a keycode from the scancode->keycode table
431
 * @idev:	the struct input_dev device descriptor
432
 * @scancode:	the desired scancode
433 434
 * @keycode:	used to return the keycode, if found, or KEY_RESERVED
 * @return:	always returns zero.
435
 *
436
 * This routine is used to handle evdev EVIOCGKEY ioctl.
437
 */
438
static int ir_getkeycode(struct input_dev *idev,
439
			 struct input_keymap_entry *ke)
440
{
441
	struct rc_dev *rdev = input_get_drvdata(idev);
442
	struct rc_map *rc_map = &rdev->rc_map;
443
	struct rc_map_table *entry;
444 445 446 447
	unsigned long flags;
	unsigned int index;
	unsigned int scancode;
	int retval;
448

449
	spin_lock_irqsave(&rc_map->lock, flags);
450 451 452 453 454 455 456 457

	if (ke->flags & INPUT_KEYMAP_BY_INDEX) {
		index = ke->index;
	} else {
		retval = input_scancode_to_scalar(ke, &scancode);
		if (retval)
			goto out;

458
		index = ir_lookup_by_scancode(rc_map, scancode);
459 460
	}

461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477
	if (index < rc_map->len) {
		entry = &rc_map->scan[index];

		ke->index = index;
		ke->keycode = entry->keycode;
		ke->len = sizeof(entry->scancode);
		memcpy(ke->scancode, &entry->scancode, sizeof(entry->scancode));

	} else if (!(ke->flags & INPUT_KEYMAP_BY_INDEX)) {
		/*
		 * We do not really know the valid range of scancodes
		 * so let's respond with KEY_RESERVED to anything we
		 * do not have mapping for [yet].
		 */
		ke->index = index;
		ke->keycode = KEY_RESERVED;
	} else {
478 479
		retval = -EINVAL;
		goto out;
480 481
	}

482 483
	retval = 0;

484
out:
485
	spin_unlock_irqrestore(&rc_map->lock, flags);
486
	return retval;
487 488 489
}

/**
490
 * rc_g_keycode_from_table() - gets the keycode that corresponds to a scancode
491 492 493
 * @dev:	the struct rc_dev descriptor of the device
 * @scancode:	the scancode to look for
 * @return:	the corresponding keycode, or KEY_RESERVED
494
 *
495 496 497
 * This routine is used by drivers which need to convert a scancode to a
 * keycode. Normally it should not be used since drivers should have no
 * interest in keycodes.
498
 */
499
u32 rc_g_keycode_from_table(struct rc_dev *dev, u32 scancode)
500
{
501
	struct rc_map *rc_map = &dev->rc_map;
502 503 504 505
	unsigned int keycode;
	unsigned int index;
	unsigned long flags;

506
	spin_lock_irqsave(&rc_map->lock, flags);
507

508 509 510
	index = ir_lookup_by_scancode(rc_map, scancode);
	keycode = index < rc_map->len ?
			rc_map->scan[index].keycode : KEY_RESERVED;
511

512
	spin_unlock_irqrestore(&rc_map->lock, flags);
513

514 515
	if (keycode != KEY_RESERVED)
		IR_dprintk(1, "%s: scancode 0x%04x keycode 0x%02x\n",
516
			   dev->input_name, scancode, keycode);
517

518
	return keycode;
519
}
520
EXPORT_SYMBOL_GPL(rc_g_keycode_from_table);
521

522
/**
523
 * ir_do_keyup() - internal function to signal the release of a keypress
524
 * @dev:	the struct rc_dev descriptor of the device
525
 *
526 527
 * This function is used internally to release a keypress, it must be
 * called with keylock held.
528
 */
529
static void ir_do_keyup(struct rc_dev *dev)
530
{
531
	if (!dev->keypressed)
532 533
		return;

534 535 536 537
	IR_dprintk(1, "keyup key 0x%04x\n", dev->last_keycode);
	input_report_key(dev->input_dev, dev->last_keycode, 0);
	input_sync(dev->input_dev);
	dev->keypressed = false;
538
}
539 540

/**
541
 * rc_keyup() - signals the release of a keypress
542
 * @dev:	the struct rc_dev descriptor of the device
543 544 545 546
 *
 * This routine is used to signal that a key has been released on the
 * remote control.
 */
547
void rc_keyup(struct rc_dev *dev)
548 549 550
{
	unsigned long flags;

551 552 553
	spin_lock_irqsave(&dev->keylock, flags);
	ir_do_keyup(dev);
	spin_unlock_irqrestore(&dev->keylock, flags);
554
}
555
EXPORT_SYMBOL_GPL(rc_keyup);
556 557 558

/**
 * ir_timer_keyup() - generates a keyup event after a timeout
559
 * @cookie:	a pointer to the struct rc_dev for the device
560 561 562
 *
 * This routine will generate a keyup event some time after a keydown event
 * is generated when no further activity has been detected.
563
 */
564
static void ir_timer_keyup(unsigned long cookie)
565
{
566
	struct rc_dev *dev = (struct rc_dev *)cookie;
567 568 569 570 571 572 573 574 575 576 577 578
	unsigned long flags;

	/*
	 * ir->keyup_jiffies is used to prevent a race condition if a
	 * hardware interrupt occurs at this point and the keyup timer
	 * event is moved further into the future as a result.
	 *
	 * The timer will then be reactivated and this function called
	 * again in the future. We need to exit gracefully in that case
	 * to allow the input subsystem to do its auto-repeat magic or
	 * a keyup event might follow immediately after the keydown.
	 */
579 580 581 582
	spin_lock_irqsave(&dev->keylock, flags);
	if (time_is_before_eq_jiffies(dev->keyup_jiffies))
		ir_do_keyup(dev);
	spin_unlock_irqrestore(&dev->keylock, flags);
583 584 585
}

/**
586
 * rc_repeat() - signals that a key is still pressed
587
 * @dev:	the struct rc_dev descriptor of the device
588 589 590 591 592
 *
 * This routine is used by IR decoders when a repeat message which does
 * not include the necessary bits to reproduce the scancode has been
 * received.
 */
593
void rc_repeat(struct rc_dev *dev)
594 595
{
	unsigned long flags;
596

597
	spin_lock_irqsave(&dev->keylock, flags);
598

599
	input_event(dev->input_dev, EV_MSC, MSC_SCAN, dev->last_scancode);
600

601
	if (!dev->keypressed)
602
		goto out;
603

604 605
	dev->keyup_jiffies = jiffies + msecs_to_jiffies(IR_KEYPRESS_TIMEOUT);
	mod_timer(&dev->timer_keyup, dev->keyup_jiffies);
606 607

out:
608
	spin_unlock_irqrestore(&dev->keylock, flags);
609
}
610
EXPORT_SYMBOL_GPL(rc_repeat);
611 612

/**
613
 * ir_do_keydown() - internal function to process a keypress
614
 * @dev:	the struct rc_dev descriptor of the device
615 616 617
 * @scancode:   the scancode of the keypress
 * @keycode:    the keycode of the keypress
 * @toggle:     the toggle value of the keypress
618
 *
619 620
 * This function is used internally to register a keypress, it must be
 * called with keylock held.
621
 */
622
static void ir_do_keydown(struct rc_dev *dev, int scancode,
623
			  u32 keycode, u8 toggle)
624
{
625
	input_event(dev->input_dev, EV_MSC, MSC_SCAN, scancode);
626

627
	/* Repeat event? */
628 629 630
	if (dev->keypressed &&
	    dev->last_scancode == scancode &&
	    dev->last_toggle == toggle)
631
		return;
632

633
	/* Release old keypress */
634
	ir_do_keyup(dev);
635

636 637 638
	dev->last_scancode = scancode;
	dev->last_toggle = toggle;
	dev->last_keycode = keycode;
639 640

	if (keycode == KEY_RESERVED)
641
		return;
642

643
	/* Register a keypress */
644
	dev->keypressed = true;
645
	IR_dprintk(1, "%s: key down event, key 0x%04x, scancode 0x%04x\n",
646 647 648
		   dev->input_name, keycode, scancode);
	input_report_key(dev->input_dev, dev->last_keycode, 1);
	input_sync(dev->input_dev);
649
}
650

651
/**
652
 * rc_keydown() - generates input event for a key press
653
 * @dev:	the struct rc_dev descriptor of the device
654 655 656 657
 * @scancode:   the scancode that we're seeking
 * @toggle:     the toggle value (protocol dependent, if the protocol doesn't
 *              support toggle values, this should be set to zero)
 *
658 659
 * This routine is used to signal that a key has been pressed on the
 * remote control.
660
 */
661
void rc_keydown(struct rc_dev *dev, int scancode, u8 toggle)
662 663
{
	unsigned long flags;
664
	u32 keycode = rc_g_keycode_from_table(dev, scancode);
665

666
	spin_lock_irqsave(&dev->keylock, flags);
667 668
	ir_do_keydown(dev, scancode, keycode, toggle);

669 670 671
	if (dev->keypressed) {
		dev->keyup_jiffies = jiffies + msecs_to_jiffies(IR_KEYPRESS_TIMEOUT);
		mod_timer(&dev->timer_keyup, dev->keyup_jiffies);
672
	}
673
	spin_unlock_irqrestore(&dev->keylock, flags);
674
}
675
EXPORT_SYMBOL_GPL(rc_keydown);
676

677
/**
678
 * rc_keydown_notimeout() - generates input event for a key press without
679
 *                          an automatic keyup event at a later time
680
 * @dev:	the struct rc_dev descriptor of the device
681 682 683 684
 * @scancode:   the scancode that we're seeking
 * @toggle:     the toggle value (protocol dependent, if the protocol doesn't
 *              support toggle values, this should be set to zero)
 *
685
 * This routine is used to signal that a key has been pressed on the
686
 * remote control. The driver must manually call rc_keyup() at a later stage.
687
 */
688
void rc_keydown_notimeout(struct rc_dev *dev, int scancode, u8 toggle)
689 690
{
	unsigned long flags;
691
	u32 keycode = rc_g_keycode_from_table(dev, scancode);
692

693
	spin_lock_irqsave(&dev->keylock, flags);
694
	ir_do_keydown(dev, scancode, keycode, toggle);
695
	spin_unlock_irqrestore(&dev->keylock, flags);
696
}
697
EXPORT_SYMBOL_GPL(rc_keydown_notimeout);
698

699
static int ir_open(struct input_dev *idev)
700
{
701
	struct rc_dev *rdev = input_get_drvdata(idev);
702

703
	return rdev->open(rdev);
704
}
705

706
static void ir_close(struct input_dev *idev)
707
{
708
	struct rc_dev *rdev = input_get_drvdata(idev);
709

710
	rdev->close(rdev);
711 712
}

713 714 715 716 717 718 719 720 721 722 723 724 725 726 727
/* class for /sys/class/rc */
static char *ir_devnode(struct device *dev, mode_t *mode)
{
	return kasprintf(GFP_KERNEL, "rc/%s", dev_name(dev));
}

static struct class ir_input_class = {
	.name		= "rc",
	.devnode	= ir_devnode,
};

static struct {
	u64	type;
	char	*name;
} proto_names[] = {
728 729 730 731 732 733 734 735
	{ RC_TYPE_UNKNOWN,	"unknown"	},
	{ RC_TYPE_RC5,		"rc-5"		},
	{ RC_TYPE_NEC,		"nec"		},
	{ RC_TYPE_RC6,		"rc-6"		},
	{ RC_TYPE_JVC,		"jvc"		},
	{ RC_TYPE_SONY,		"sony"		},
	{ RC_TYPE_RC5_SZ,	"rc-5-sz"	},
	{ RC_TYPE_LIRC,		"lirc"		},
736 737 738 739 740 741
};

#define PROTO_NONE	"none"

/**
 * show_protocols() - shows the current IR protocol(s)
742
 * @device:	the device descriptor
743 744 745 746 747 748 749 750
 * @mattr:	the device attribute struct (unused)
 * @buf:	a pointer to the output buffer
 *
 * This routine is a callback routine for input read the IR protocol type(s).
 * it is trigged by reading /sys/class/rc/rc?/protocols.
 * It returns the protocol names of supported protocols.
 * Enabled protocols are printed in brackets.
 */
751
static ssize_t show_protocols(struct device *device,
752 753
			      struct device_attribute *mattr, char *buf)
{
754
	struct rc_dev *dev = to_rc_dev(device);
755 756 757 758 759
	u64 allowed, enabled;
	char *tmp = buf;
	int i;

	/* Device is being removed */
760
	if (!dev)
761 762
		return -EINVAL;

763
	if (dev->driver_type == RC_DRIVER_SCANCODE) {
764
		enabled = dev->rc_map.rc_type;
765 766 767
		allowed = dev->allowed_protos;
	} else {
		enabled = dev->raw->enabled_protocols;
768
		allowed = ir_raw_get_allowed_protocols();
769
	}
770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789

	IR_dprintk(1, "allowed - 0x%llx, enabled - 0x%llx\n",
		   (long long)allowed,
		   (long long)enabled);

	for (i = 0; i < ARRAY_SIZE(proto_names); i++) {
		if (allowed & enabled & proto_names[i].type)
			tmp += sprintf(tmp, "[%s] ", proto_names[i].name);
		else if (allowed & proto_names[i].type)
			tmp += sprintf(tmp, "%s ", proto_names[i].name);
	}

	if (tmp != buf)
		tmp--;
	*tmp = '\n';
	return tmp + 1 - buf;
}

/**
 * store_protocols() - changes the current IR protocol(s)
790
 * @device:	the device descriptor
791 792 793 794
 * @mattr:	the device attribute struct (unused)
 * @buf:	a pointer to the input buffer
 * @len:	length of the input buffer
 *
795
 * This routine is for changing the IR protocol type.
796 797 798 799 800 801 802 803
 * It is trigged by writing to /sys/class/rc/rc?/protocols.
 * Writing "+proto" will add a protocol to the list of enabled protocols.
 * Writing "-proto" will remove a protocol from the list of enabled protocols.
 * Writing "proto" will enable only "proto".
 * Writing "none" will disable all protocols.
 * Returns -EINVAL if an invalid protocol combination or unknown protocol name
 * is used, otherwise @len.
 */
804
static ssize_t store_protocols(struct device *device,
805 806 807 808
			       struct device_attribute *mattr,
			       const char *data,
			       size_t len)
{
809
	struct rc_dev *dev = to_rc_dev(device);
810 811 812 813 814 815 816 817
	bool enable, disable;
	const char *tmp;
	u64 type;
	u64 mask;
	int rc, i, count = 0;
	unsigned long flags;

	/* Device is being removed */
818
	if (!dev)
819 820
		return -EINVAL;

821
	if (dev->driver_type == RC_DRIVER_SCANCODE)
822
		type = dev->rc_map.rc_type;
823 824
	else if (dev->raw)
		type = dev->raw->enabled_protocols;
825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878
	else {
		IR_dprintk(1, "Protocol switching not supported\n");
		return -EINVAL;
	}

	while ((tmp = strsep((char **) &data, " \n")) != NULL) {
		if (!*tmp)
			break;

		if (*tmp == '+') {
			enable = true;
			disable = false;
			tmp++;
		} else if (*tmp == '-') {
			enable = false;
			disable = true;
			tmp++;
		} else {
			enable = false;
			disable = false;
		}

		if (!enable && !disable && !strncasecmp(tmp, PROTO_NONE, sizeof(PROTO_NONE))) {
			tmp += sizeof(PROTO_NONE);
			mask = 0;
			count++;
		} else {
			for (i = 0; i < ARRAY_SIZE(proto_names); i++) {
				if (!strncasecmp(tmp, proto_names[i].name, strlen(proto_names[i].name))) {
					tmp += strlen(proto_names[i].name);
					mask = proto_names[i].type;
					break;
				}
			}
			if (i == ARRAY_SIZE(proto_names)) {
				IR_dprintk(1, "Unknown protocol: '%s'\n", tmp);
				return -EINVAL;
			}
			count++;
		}

		if (enable)
			type |= mask;
		else if (disable)
			type &= ~mask;
		else
			type = mask;
	}

	if (!count) {
		IR_dprintk(1, "Protocol not specified\n");
		return -EINVAL;
	}

879 880
	if (dev->change_protocol) {
		rc = dev->change_protocol(dev, type);
881 882 883 884 885 886 887
		if (rc < 0) {
			IR_dprintk(1, "Error setting protocols to 0x%llx\n",
				   (long long)type);
			return -EINVAL;
		}
	}

888
	if (dev->driver_type == RC_DRIVER_SCANCODE) {
889 890 891
		spin_lock_irqsave(&dev->rc_map.lock, flags);
		dev->rc_map.rc_type = type;
		spin_unlock_irqrestore(&dev->rc_map.lock, flags);
892
	} else {
893
		dev->raw->enabled_protocols = type;
894 895 896 897 898 899 900 901
	}

	IR_dprintk(1, "Current protocol(s): 0x%llx\n",
		   (long long)type);

	return len;
}

902 903 904 905 906 907 908 909
static void rc_dev_release(struct device *device)
{
	struct rc_dev *dev = to_rc_dev(device);

	kfree(dev);
	module_put(THIS_MODULE);
}

910 911 912 913 914 915 916 917 918
#define ADD_HOTPLUG_VAR(fmt, val...)					\
	do {								\
		int err = add_uevent_var(env, fmt, val);		\
		if (err)						\
			return err;					\
	} while (0)

static int rc_dev_uevent(struct device *device, struct kobj_uevent_env *env)
{
919
	struct rc_dev *dev = to_rc_dev(device);
920

921 922
	if (dev->rc_map.name)
		ADD_HOTPLUG_VAR("NAME=%s", dev->rc_map.name);
923 924
	if (dev->driver_name)
		ADD_HOTPLUG_VAR("DRV_NAME=%s", dev->driver_name);
925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950

	return 0;
}

/*
 * Static device attribute struct with the sysfs attributes for IR's
 */
static DEVICE_ATTR(protocols, S_IRUGO | S_IWUSR,
		   show_protocols, store_protocols);

static struct attribute *rc_dev_attrs[] = {
	&dev_attr_protocols.attr,
	NULL,
};

static struct attribute_group rc_dev_attr_grp = {
	.attrs	= rc_dev_attrs,
};

static const struct attribute_group *rc_dev_attr_groups[] = {
	&rc_dev_attr_grp,
	NULL
};

static struct device_type rc_dev_type = {
	.groups		= rc_dev_attr_groups,
951
	.release	= rc_dev_release,
952 953 954
	.uevent		= rc_dev_uevent,
};

955
struct rc_dev *rc_allocate_device(void)
956
{
957
	struct rc_dev *dev;
958

959 960 961 962 963 964 965 966 967 968 969 970 971 972
	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
	if (!dev)
		return NULL;

	dev->input_dev = input_allocate_device();
	if (!dev->input_dev) {
		kfree(dev);
		return NULL;
	}

	dev->input_dev->getkeycode_new = ir_getkeycode;
	dev->input_dev->setkeycode_new = ir_setkeycode;
	input_set_drvdata(dev->input_dev, dev);

973
	spin_lock_init(&dev->rc_map.lock);
974 975
	spin_lock_init(&dev->keylock);
	setup_timer(&dev->timer_keyup, ir_timer_keyup, (unsigned long)dev);
976

977 978 979 980 981 982 983 984 985 986
	dev->dev.type = &rc_dev_type;
	dev->dev.class = &ir_input_class;
	device_initialize(&dev->dev);

	__module_get(THIS_MODULE);
	return dev;
}
EXPORT_SYMBOL_GPL(rc_allocate_device);

void rc_free_device(struct rc_dev *dev)
987
{
988 989 990 991 992 993 994 995 996 997
	if (dev) {
		input_free_device(dev->input_dev);
		put_device(&dev->dev);
	}
}
EXPORT_SYMBOL_GPL(rc_free_device);

int rc_register_device(struct rc_dev *dev)
{
	static atomic_t devno = ATOMIC_INIT(0);
998
	struct rc_map *rc_map;
999
	const char *path;
1000
	int rc;
1001

1002 1003
	if (!dev || !dev->map_name)
		return -EINVAL;
1004

1005
	rc_map = rc_map_get(dev->map_name);
1006
	if (!rc_map)
1007
		rc_map = rc_map_get(RC_MAP_EMPTY);
1008
	if (!rc_map || !rc_map->scan || rc_map->size == 0)
1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024
		return -EINVAL;

	set_bit(EV_KEY, dev->input_dev->evbit);
	set_bit(EV_REP, dev->input_dev->evbit);
	set_bit(EV_MSC, dev->input_dev->evbit);
	set_bit(MSC_SCAN, dev->input_dev->mscbit);
	if (dev->open)
		dev->input_dev->open = ir_open;
	if (dev->close)
		dev->input_dev->close = ir_close;

	dev->devno = (unsigned long)(atomic_inc_return(&devno) - 1);
	dev_set_name(&dev->dev, "rc%ld", dev->devno);
	dev_set_drvdata(&dev->dev, dev);
	rc = device_add(&dev->dev);
	if (rc)
1025 1026
		return rc;

1027
	rc = ir_setkeytable(dev, rc_map);
1028 1029 1030 1031 1032 1033 1034 1035 1036 1037
	if (rc)
		goto out_dev;

	dev->input_dev->dev.parent = &dev->dev;
	memcpy(&dev->input_dev->id, &dev->input_id, sizeof(dev->input_id));
	dev->input_dev->phys = dev->input_phys;
	dev->input_dev->name = dev->input_name;
	rc = input_register_device(dev->input_dev);
	if (rc)
		goto out_table;
1038

1039 1040 1041 1042 1043 1044 1045 1046 1047
	/*
	 * Default delay of 250ms is too short for some protocols, expecially
	 * since the timeout is currently set to 250ms. Increase it to 500ms,
	 * to avoid wrong repetition of the keycodes. Note that this must be
	 * set after the call to input_register_device().
	 */
	dev->input_dev->rep[REP_DELAY] = 500;

	path = kobject_get_path(&dev->dev.kobj, GFP_KERNEL);
1048
	printk(KERN_INFO "%s: %s as %s\n",
1049 1050
		dev_name(&dev->dev),
		dev->input_name ? dev->input_name : "Unspecified device",
1051 1052 1053
		path ? path : "N/A");
	kfree(path);

1054 1055 1056 1057 1058 1059 1060
	if (dev->driver_type == RC_DRIVER_IR_RAW) {
		rc = ir_raw_event_register(dev);
		if (rc < 0)
			goto out_input;
	}

	if (dev->change_protocol) {
1061
		rc = dev->change_protocol(dev, rc_map->rc_type);
1062 1063 1064 1065 1066 1067 1068
		if (rc < 0)
			goto out_raw;
	}

	IR_dprintk(1, "Registered rc%ld (driver: %s, remote: %s, mode %s)\n",
		   dev->devno,
		   dev->driver_name ? dev->driver_name : "unknown",
1069
		   rc_map->name ? rc_map->name : "unknown",
1070 1071
		   dev->driver_type == RC_DRIVER_IR_RAW ? "raw" : "cooked");

1072
	return 0;
1073 1074 1075 1076 1077 1078 1079 1080

out_raw:
	if (dev->driver_type == RC_DRIVER_IR_RAW)
		ir_raw_event_unregister(dev);
out_input:
	input_unregister_device(dev->input_dev);
	dev->input_dev = NULL;
out_table:
1081
	ir_free_table(&dev->rc_map);
1082 1083 1084
out_dev:
	device_del(&dev->dev);
	return rc;
1085
}
1086
EXPORT_SYMBOL_GPL(rc_register_device);
1087

1088
void rc_unregister_device(struct rc_dev *dev)
1089
{
1090 1091
	if (!dev)
		return;
1092

1093
	del_timer_sync(&dev->timer_keyup);
1094

1095 1096 1097 1098 1099 1100
	if (dev->driver_type == RC_DRIVER_IR_RAW)
		ir_raw_event_unregister(dev);

	input_unregister_device(dev->input_dev);
	dev->input_dev = NULL;

1101
	ir_free_table(&dev->rc_map);
1102 1103 1104
	IR_dprintk(1, "Freed keycode table\n");

	device_unregister(&dev->dev);
1105
}
1106
EXPORT_SYMBOL_GPL(rc_unregister_device);
1107 1108 1109 1110 1111

/*
 * Init/exit code for the module. Basically, creates/removes /sys/class/rc
 */

1112
static int __init rc_core_init(void)
1113 1114 1115
{
	int rc = class_register(&ir_input_class);
	if (rc) {
1116
		printk(KERN_ERR "rc_core: unable to register rc class\n");
1117 1118 1119 1120 1121
		return rc;
	}

	/* Initialize/load the decoders/keymap code that will be used */
	ir_raw_init();
1122
	rc_map_register(&empty_map);
1123 1124 1125 1126

	return 0;
}

1127
static void __exit rc_core_exit(void)
1128 1129
{
	class_unregister(&ir_input_class);
1130
	rc_map_unregister(&empty_map);
1131 1132
}

1133 1134
module_init(rc_core_init);
module_exit(rc_core_exit);
1135

1136 1137 1138
int rc_core_debug;    /* ir_debug level (0,1,2) */
EXPORT_SYMBOL_GPL(rc_core_debug);
module_param_named(debug, rc_core_debug, int, 0644);
1139 1140 1141

MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@redhat.com>");
MODULE_LICENSE("GPL");