Loading drivers/media/IR/ir-keytable.c +56 −1 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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 Loading include/media/ir-core.h +4 −0 Original line number Diff line number Diff line Loading @@ -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) Loading Loading
drivers/media/IR/ir-keytable.c +56 −1 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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 Loading
include/media/ir-core.h +4 −0 Original line number Diff line number Diff line Loading @@ -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) Loading