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>
This commit is contained in:

committed by
Mauro Carvalho Chehab

parent
354389467b
commit
a374fef443
@@ -76,7 +76,6 @@ struct ir_raw_event {
|
||||
struct ir_raw_event_ctrl {
|
||||
struct kfifo kfifo; /* fifo for the pulse/space events */
|
||||
struct timespec last_event; /* when last event occurred */
|
||||
struct timer_list timer_keyup; /* timer for key release */
|
||||
};
|
||||
|
||||
struct ir_input_dev {
|
||||
@@ -86,10 +85,16 @@ 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 */
|
||||
struct input_dev *input_dev; /* the input device associated with this device */
|
||||
|
||||
/* key info - needed by IR keycode handlers */
|
||||
u32 keycode; /* linux key code */
|
||||
int keypressed; /* current state */
|
||||
spinlock_t keylock; /* protects the below members */
|
||||
bool keypressed; /* current state */
|
||||
unsigned long keyup_jiffies; /* when should the current keypress be released? */
|
||||
struct timer_list timer_keyup; /* timer for releasing a keypress */
|
||||
u32 last_keycode; /* keycode of last command */
|
||||
u32 last_scancode; /* scancode of last command */
|
||||
u8 last_toggle; /* toggle of last command */
|
||||
};
|
||||
|
||||
struct ir_raw_handler {
|
||||
@@ -115,8 +120,8 @@ void rc_map_init(void);
|
||||
|
||||
u32 ir_g_keycode_from_table(struct input_dev *input_dev,
|
||||
u32 scancode);
|
||||
void ir_keyup(struct input_dev *dev);
|
||||
void ir_keydown(struct input_dev *dev, int scancode);
|
||||
void ir_repeat(struct input_dev *dev);
|
||||
void ir_keydown(struct input_dev *dev, int scancode, u8 toggle);
|
||||
int __ir_input_register(struct input_dev *dev,
|
||||
const struct ir_scancode_table *ir_codes,
|
||||
const struct ir_dev_props *props,
|
||||
|
Reference in New Issue
Block a user