aboutsummaryrefslogtreecommitdiffstats
path: root/include/media
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2010-04-02 14:58:29 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-05-19 11:56:54 -0400
commita374fef4437abd0a1ee27afe0cca7a55425c1c3c (patch)
tree652e36573ac29d360d7f59cfb64a160c08390a54 /include/media
parent354389467b6b2a3b36666b6e933d78bbd9e23577 (diff)
V4L/DVB: ir-core: improve keyup/keydown logic
Rewrites the keyup/keydown logic in drivers/media/IR/ir-keytable.c. All knowledge of keystates etc is now internal to ir-keytable.c and not scattered around ir-raw-event.c and ir-nec-decoder.c (where it doesn't belong). In addition, I've changed the API slightly so that ir_input_dev is passed as the first argument rather than input_dev. If we're ever going to support multiple keytables we need to move towards making ir_input_dev the main interface from a driver POV and obscure away the input_dev as an implementational detail in ir-core. Signed-off-by: David Härdeman <david@hardeman.nu> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'include/media')
-rw-r--r--include/media/ir-core.h15
1 files changed, 10 insertions, 5 deletions
diff --git a/include/media/ir-core.h b/include/media/ir-core.h
index 7a0be8d4999d..b452a478c12c 100644
--- a/include/media/ir-core.h
+++ b/include/media/ir-core.h
@@ -76,7 +76,6 @@ struct ir_raw_event {
76struct ir_raw_event_ctrl { 76struct ir_raw_event_ctrl {
77 struct kfifo kfifo; /* fifo for the pulse/space events */ 77 struct kfifo kfifo; /* fifo for the pulse/space events */
78 struct timespec last_event; /* when last event occurred */ 78 struct timespec last_event; /* when last event occurred */
79 struct timer_list timer_keyup; /* timer for key release */
80}; 79};
81 80
82struct ir_input_dev { 81struct ir_input_dev {
@@ -86,10 +85,16 @@ struct ir_input_dev {
86 unsigned long devno; /* device number */ 85 unsigned long devno; /* device number */
87 const struct ir_dev_props *props; /* Device properties */ 86 const struct ir_dev_props *props; /* Device properties */
88 struct ir_raw_event_ctrl *raw; /* for raw pulse/space events */ 87 struct ir_raw_event_ctrl *raw; /* for raw pulse/space events */
88 struct input_dev *input_dev; /* the input device associated with this device */
89 89
90 /* key info - needed by IR keycode handlers */ 90 /* key info - needed by IR keycode handlers */
91 u32 keycode; /* linux key code */ 91 spinlock_t keylock; /* protects the below members */
92 int keypressed; /* current state */ 92 bool keypressed; /* current state */
93 unsigned long keyup_jiffies; /* when should the current keypress be released? */
94 struct timer_list timer_keyup; /* timer for releasing a keypress */
95 u32 last_keycode; /* keycode of last command */
96 u32 last_scancode; /* scancode of last command */
97 u8 last_toggle; /* toggle of last command */
93}; 98};
94 99
95struct ir_raw_handler { 100struct ir_raw_handler {
@@ -115,8 +120,8 @@ void rc_map_init(void);
115 120
116u32 ir_g_keycode_from_table(struct input_dev *input_dev, 121u32 ir_g_keycode_from_table(struct input_dev *input_dev,
117 u32 scancode); 122 u32 scancode);
118void ir_keyup(struct input_dev *dev); 123void ir_repeat(struct input_dev *dev);
119void ir_keydown(struct input_dev *dev, int scancode); 124void ir_keydown(struct input_dev *dev, int scancode, u8 toggle);
120int __ir_input_register(struct input_dev *dev, 125int __ir_input_register(struct input_dev *dev,
121 const struct ir_scancode_table *ir_codes, 126 const struct ir_scancode_table *ir_codes,
122 const struct ir_dev_props *props, 127 const struct ir_dev_props *props,