Index: linux/drivers/media/dvb/ttpci/av7110_ir.c =================================================================== RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/ttpci/av7110_ir.c,v retrieving revision 1.21 diff -p -u -r1.21 av7110_ir.c --- linux/drivers/media/dvb/ttpci/av7110_ir.c 11 Aug 2005 19:02:36 -0000 1.21 +++ linux/drivers/media/dvb/ttpci/av7110_ir.c 27 Sep 2005 05:45:04 -0000 @@ -17,6 +17,8 @@ static int av_cnt; static struct av7110 *av_list[4]; static struct input_dev input_dev; +static u8 delay_timer_finished; + static u16 key_map [256] = { KEY_0, KEY_1, KEY_2, KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_BACK, 0, KEY_POWER, KEY_MUTE, 0, KEY_INFO, @@ -112,13 +114,16 @@ static void av7110_emit_key(unsigned lon if (timer_pending(&keyup_timer)) { del_timer(&keyup_timer); if (keyup_timer.data != keycode || new_toggle != old_toggle) { + delay_timer_finished = 0; input_event(&input_dev, EV_KEY, keyup_timer.data, !!0); input_event(&input_dev, EV_KEY, keycode, !0); - } else + } else if (delay_timer_finished) input_event(&input_dev, EV_KEY, keycode, 2); - } else + } else { + delay_timer_finished = 0; input_event(&input_dev, EV_KEY, keycode, !0); + } keyup_timer.expires = jiffies + UP_TIMEOUT; keyup_timer.data = keycode; @@ -146,6 +151,9 @@ static void input_register_keys(void) static void input_repeat_key(unsigned long data) { /* dummy routine to disable autorepeat in the input driver */ + delay_timer_finished = 1; + struct input_dev *dev = (void *) data; + del_timer(&dev->timer); }