? cinergyT2.c.test01 ? cinergy_key_repeat_handling-02.diff ? cinergy_key_repeat_handling-03.diff ? cinergy_key_repeat_handling.diff ? event_fake.diff ? loop.diff Index: cinergyT2.c =================================================================== RCS file: /cvs/linuxtv/dvb-kernel/linux/drivers/media/dvb/cinergyT2/cinergyT2.c,v retrieving revision 1.15.2.5 diff -r1.15.2.5 cinergyT2.c 50c50 < #define RC_QUERY_INTERVAL (100) /* milliseconds */ --- > #define RC_QUERY_INTERVAL (70) /* milliseconds */ 188a189 > int rc_key_state; 763c764 < printk("got key (type %d, value 0x%08x\n", rc_events[n].type, rc_events[n].value); --- > printk("got key n=%d (type %d, value 0x%08x)\n", n, rc_events[n].type, rc_events[n].value); 774a776,782 > > /** > * Ignore repeat events. input system handles these. > * Reset our key_state to 'keypressed' > */ > cinergyt2->rc_key_state = 1; > continue; 787a796,802 > /** > * new keypress: so report key release, if already pressed. > * remember state 'keypressed' > */ > if (cinergyt2->rc_key_state) > input_report_key(&cinergyt2->rc_input_dev, cinergyt2->rc_input_event, 0); > 789c804 < input_report_key(&cinergyt2->rc_input_dev, cinergyt2->rc_input_event, 0); --- > cinergyt2->rc_key_state = 1; 793a809,822 > /** > * no key was pressed in this intervall, but key press was previously set > * so report 'keyrelease' if there was at least one query with no > * key event send (rc_key_state == 2). > */ > if (!len && cinergyt2->rc_key_state) { > if (cinergyt2->rc_key_state == 1) { > cinergyt2->rc_key_state = 2; > } else { > input_report_key(&cinergyt2->rc_input_dev, cinergyt2->rc_input_event, 0); > cinergyt2->rc_key_state = 0; > input_sync(&cinergyt2->rc_input_dev); > } > } 895c924,927 < cinergyt2->rc_input_dev.evbit[0] = BIT(EV_KEY); --- > /** > * let the input system handle keyrepeat > */ > cinergyt2->rc_input_dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REP); 905a938 > cinergyt2->rc_key_state = 0;