media: rc: mce_kbd decoder: low timeout values cause double keydowns
The mce keyboard repeats pressed keys every 100ms. If the IR timeout is set to less than that, we send key up events before the repeat arrives, so we have key up/key down for each IR repeat. The keyboard ends any sequence with a 0 scancode, in which case all keys are cleared so there is no need to run the timeout timer: it only exists for the case that the final 0 was not received. Signed-off-by: Sean Young <sean@mess.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
This commit is contained in:
parent
284922562b
commit
c421c62a4a
|
@ -322,11 +322,13 @@ static int ir_mce_kbd_decode(struct rc_dev *dev, struct ir_raw_event ev)
|
|||
scancode = data->body & 0xffff;
|
||||
dev_dbg(&dev->dev, "keyboard data 0x%08x\n",
|
||||
data->body);
|
||||
if (dev->timeout)
|
||||
delay = usecs_to_jiffies(dev->timeout / 1000);
|
||||
else
|
||||
delay = msecs_to_jiffies(100);
|
||||
mod_timer(&data->rx_timeout, jiffies + delay);
|
||||
if (scancode) {
|
||||
delay = nsecs_to_jiffies(dev->timeout) +
|
||||
msecs_to_jiffies(100);
|
||||
mod_timer(&data->rx_timeout, jiffies + delay);
|
||||
} else {
|
||||
del_timer(&data->rx_timeout);
|
||||
}
|
||||
/* Pass data to keyboard buffer parser */
|
||||
ir_mce_kbd_process_keyboard_data(dev, scancode);
|
||||
lsc.rc_proto = RC_PROTO_MCIR2_KBD;
|
||||
|
|
Loading…
Reference in New Issue