aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/IR
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2010-03-21 11:15:16 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-05-17 23:52:56 -0400
commit6660de568d164e4eda6617dadcb999c96e62203f (patch)
treeef86833336b7423443531afa58dc5781b4f97c2a /drivers/media/IR
parenta3572c34da8dacc78a629211a91cf34e9b408701 (diff)
V4L/DVB: ir-core: add two functions to report keyup/keydown events
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/IR')
-rw-r--r--drivers/media/IR/ir-keytable.c57
1 files changed, 56 insertions, 1 deletions
diff --git a/drivers/media/IR/ir-keytable.c b/drivers/media/IR/ir-keytable.c
index 73fe4bec83bc..e59290febf81 100644
--- a/drivers/media/IR/ir-keytable.c
+++ b/drivers/media/IR/ir-keytable.c
@@ -365,7 +365,7 @@ static int ir_setkeycode(struct input_dev *dev,
365 * 365 *
366 * This routine is used by the input routines when a key is pressed at the 366 * This routine is used by the input routines when a key is pressed at the
367 * IR. The scancode is received and needs to be converted into a keycode. 367 * IR. The scancode is received and needs to be converted into a keycode.
368 * If the key is not found, it returns KEY_UNKNOWN. Otherwise, returns the 368 * If the key is not found, it returns KEY_RESERVED. Otherwise, returns the
369 * corresponding keycode from the table. 369 * corresponding keycode from the table.
370 */ 370 */
371u32 ir_g_keycode_from_table(struct input_dev *dev, u32 scancode) 371u32 ir_g_keycode_from_table(struct input_dev *dev, u32 scancode)
@@ -392,6 +392,61 @@ u32 ir_g_keycode_from_table(struct input_dev *dev, u32 scancode)
392EXPORT_SYMBOL_GPL(ir_g_keycode_from_table); 392EXPORT_SYMBOL_GPL(ir_g_keycode_from_table);
393 393
394/** 394/**
395 * ir_keyup() - generates input event to cleanup a key press
396 * @input_dev: the struct input_dev descriptor of the device
397 *
398 * This routine is used by the input routines when a key is pressed at the
399 * IR. It reports a keyup input event via input_report_key().
400 */
401void ir_keyup(struct input_dev *dev)
402{
403 struct ir_input_dev *ir = input_get_drvdata(dev);
404
405 if (!ir->keypressed)
406 return;
407
408 input_report_key(dev, ir->keycode, 0);
409 input_sync(dev);
410 ir->keypressed = 0;
411}
412EXPORT_SYMBOL_GPL(ir_keyup);
413
414/**
415 * ir_keydown() - generates input event for a key press
416 * @input_dev: the struct input_dev descriptor of the device
417 * @scancode: the scancode that we're seeking
418 *
419 * This routine is used by the input routines when a key is pressed at the
420 * IR. It gets the keycode for a scancode and reports an input event via
421 * input_report_key().
422 */
423void ir_keydown(struct input_dev *dev, int scancode)
424{
425 struct ir_input_dev *ir = input_get_drvdata(dev);
426
427 u32 keycode = ir_g_keycode_from_table(dev, scancode);
428
429 /* If already sent a keydown, do a keyup */
430 if (ir->keypressed)
431 ir_keyup(dev);
432
433 if (KEY_RESERVED == keycode)
434 return;
435
436 ir->keycode = keycode;
437 ir->keypressed = 1;
438
439 IR_dprintk(1, "%s: key down event, key 0x%04x, scancode 0x%04x\n",
440 dev->name, keycode, scancode);
441
442 input_report_key(dev, ir->keycode, 1);
443 input_sync(dev);
444
445}
446EXPORT_SYMBOL_GPL(ir_keydown);
447
448
449/**
395 * ir_input_register() - sets the IR keycode table and add the handlers 450 * ir_input_register() - sets the IR keycode table and add the handlers
396 * for keymap table get/set 451 * for keymap table get/set
397 * @input_dev: the struct input_dev descriptor of the device 452 * @input_dev: the struct input_dev descriptor of the device