Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 192895
b: refs/heads/master
c: 6660de5
h: refs/heads/master
i:
  192893: 6f3847b
  192891: 0b40292
  192887: b375207
  192879: 2b55d39
  192863: e4d1429
  192831: 7a5fe2f
  192767: 09a5654
v: v3
  • Loading branch information
Mauro Carvalho Chehab committed May 18, 2010
1 parent 4f7753e commit 96171b0
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a3572c34da8dacc78a629211a91cf34e9b408701
refs/heads/master: 6660de568d164e4eda6617dadcb999c96e62203f
57 changes: 56 additions & 1 deletion trunk/drivers/media/IR/ir-keytable.c
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ static int ir_setkeycode(struct input_dev *dev,
*
* This routine is used by the input routines when a key is pressed at the
* IR. The scancode is received and needs to be converted into a keycode.
* If the key is not found, it returns KEY_UNKNOWN. Otherwise, returns the
* If the key is not found, it returns KEY_RESERVED. Otherwise, returns the
* corresponding keycode from the table.
*/
u32 ir_g_keycode_from_table(struct input_dev *dev, u32 scancode)
Expand All @@ -391,6 +391,61 @@ u32 ir_g_keycode_from_table(struct input_dev *dev, u32 scancode)
}
EXPORT_SYMBOL_GPL(ir_g_keycode_from_table);

/**
* ir_keyup() - generates input event to cleanup a key press
* @input_dev: the struct input_dev descriptor of the device
*
* This routine is used by the input routines when a key is pressed at the
* IR. It reports a keyup input event via input_report_key().
*/
void ir_keyup(struct input_dev *dev)
{
struct ir_input_dev *ir = input_get_drvdata(dev);

if (!ir->keypressed)
return;

input_report_key(dev, ir->keycode, 0);
input_sync(dev);
ir->keypressed = 0;
}
EXPORT_SYMBOL_GPL(ir_keyup);

/**
* ir_keydown() - generates input event for a key press
* @input_dev: the struct input_dev descriptor of the device
* @scancode: the scancode that we're seeking
*
* This routine is used by the input routines when a key is pressed at the
* IR. It gets the keycode for a scancode and reports an input event via
* input_report_key().
*/
void ir_keydown(struct input_dev *dev, int scancode)
{
struct ir_input_dev *ir = input_get_drvdata(dev);

u32 keycode = ir_g_keycode_from_table(dev, scancode);

/* If already sent a keydown, do a keyup */
if (ir->keypressed)
ir_keyup(dev);

if (KEY_RESERVED == keycode)
return;

ir->keycode = keycode;
ir->keypressed = 1;

IR_dprintk(1, "%s: key down event, key 0x%04x, scancode 0x%04x\n",
dev->name, keycode, scancode);

input_report_key(dev, ir->keycode, 1);
input_sync(dev);

}
EXPORT_SYMBOL_GPL(ir_keydown);


/**
* ir_input_register() - sets the IR keycode table and add the handlers
* for keymap table get/set
Expand Down
4 changes: 4 additions & 0 deletions trunk/include/media/ir-core.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,10 @@ struct ir_input_dev {
unsigned long devno; /* device number */
const struct ir_dev_props *props; /* Device properties */
struct ir_raw_event_ctrl *raw; /* for raw pulse/space events */

/* key info - needed by IR keycode handlers */
u32 keycode; /* linux key code */
int keypressed; /* current state */
};

#define to_ir_input_dev(_attr) container_of(_attr, struct ir_input_dev, attr)
Expand Down

0 comments on commit 96171b0

Please sign in to comment.