Since commit d57ea877af38 ("media: rc: per-protocol repeat period"), double keypresses are reported on the ite-cir driver. This is due two factors: that commit reduced the timeout used for some protocols (it became protocol dependant) and the high default IR timeout used by the ite-cir driver.
Some of the IR decoders wait for a trailing space, as that is the only way to know if the bit stream has ended (e.g. rc-6 can be 16, 20 or 32 bits). The longer the IR timeout, the longer it will take to receive the trailing space, delaying decoding and pushing it past the keyup timeout. So, add the IR timeout to the keyup timeout. Cc: <sta...@vger.kernel.org> # 4.14 Reported-by: Matthias Reichl <h...@horus.com> Signed-off-by: Sean Young <s...@mess.org> --- drivers/media/rc/rc-main.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c index 17950e29d4e3..fae721534517 100644 --- a/drivers/media/rc/rc-main.c +++ b/drivers/media/rc/rc-main.c @@ -672,7 +672,8 @@ void rc_repeat(struct rc_dev *dev) input_event(dev->input_dev, EV_MSC, MSC_SCAN, dev->last_scancode); input_sync(dev->input_dev); - dev->keyup_jiffies = jiffies + msecs_to_jiffies(timeout); + dev->keyup_jiffies = jiffies + msecs_to_jiffies(timeout) + + nsecs_to_jiffies(dev->timeout); mod_timer(&dev->timer_keyup, dev->keyup_jiffies); out: @@ -744,7 +745,8 @@ void rc_keydown(struct rc_dev *dev, enum rc_proto protocol, u32 scancode, if (dev->keypressed) { dev->keyup_jiffies = jiffies + - msecs_to_jiffies(protocols[protocol].repeat_period); + msecs_to_jiffies(protocols[protocol].repeat_period) + + nsecs_to_jiffies(dev->timeout); mod_timer(&dev->timer_keyup, dev->keyup_jiffies); } spin_unlock_irqrestore(&dev->keylock, flags); -- 2.14.3