Commit 59236d46 authored by David Hardeman's avatar David Hardeman Committed by Mauro Carvalho Chehab

V4L/DVB (4882): budget-ci IR: make debounce logic conditional

Change the debounce logic so that it is not used at all unless the
debounce parameter has been set. This makes for a much "snappier" remote
for most users as there is no timeout to wait for (the debounce logic has
a 350ms timer for the next repeat, but with the RC5 protocol, one event
per ~110ms is possible)
Signed-off-by: default avatarDavid Hardeman <david@hardeman.nu>
Signed-off-by: default avatarAndrew de Quincey <adq_dvb@lidskialf.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent b5471a27
...@@ -159,27 +159,32 @@ static void msp430_ir_interrupt(unsigned long data) ...@@ -159,27 +159,32 @@ static void msp430_ir_interrupt(unsigned long data)
if (budget_ci->ir.rc5_device != IR_DEVICE_ANY && budget_ci->ir.rc5_device != device) if (budget_ci->ir.rc5_device != IR_DEVICE_ANY && budget_ci->ir.rc5_device != device)
return; return;
/* Are we still waiting for a keyup event while this is a new key? */
if ((ir_key != dev->repeat_key || toggle != prev_toggle) && del_timer(&dev->timer))
ir_input_nokey(dev, &budget_ci->ir.state);
prev_toggle = toggle;
/* Ignore repeated key sequences if requested */ /* Ignore repeated key sequences if requested */
if (ir_key == dev->repeat_key && bounces > 0 && timer_pending(&dev->timer)) { if (toggle == prev_toggle && ir_key == dev->repeat_key &&
bounces > 0 && timer_pending(&dev->timer)) {
if (ir_debug)
printk("budget_ci: debounce logic ignored IR command\n");
bounces--; bounces--;
return; return;
} }
prev_toggle = toggle;
/* New keypress? */ /* Are we still waiting for a keyup event? */
if (!timer_pending(&dev->timer)) if (del_timer(&dev->timer))
bounces = debounce; ir_input_nokey(dev, &budget_ci->ir.state);
/* Prepare a keyup event sometime in the future */ /* Generate keypress */
mod_timer(&dev->timer, jiffies + msecs_to_jiffies(IR_REPEAT_TIMEOUT)); if (ir_debug)
printk("budget_ci: generating keypress 0x%02x\n", ir_key);
ir_input_keydown(dev, &budget_ci->ir.state, ir_key, (ir_key & (command << 8)));
/* Generate a new or repeated keypress */ /* Do we want to delay the keyup event? */
ir_input_keydown(dev, &budget_ci->ir.state, ir_key, ((device << 8) | command)); if (debounce) {
bounces = debounce;
mod_timer(&dev->timer, jiffies + msecs_to_jiffies(IR_REPEAT_TIMEOUT));
} else {
ir_input_nokey(dev, &budget_ci->ir.state);
}
} }
static void msp430_ir_debounce(unsigned long data) static void msp430_ir_debounce(unsigned long data)
...@@ -297,11 +302,9 @@ static int msp430_ir_init(struct budget_ci *budget_ci) ...@@ -297,11 +302,9 @@ static int msp430_ir_init(struct budget_ci *budget_ci)
break; break;
} }
/* initialise the key-up timeout handler */ /* initialise the key-up debounce timeout handler */
input_dev->timer.function = msp430_ir_keyup; input_dev->timer.function = msp430_ir_keyup;
input_dev->timer.data = (unsigned long) &budget_ci->ir; input_dev->timer.data = (unsigned long) &budget_ci->ir;
input_dev->rep[REP_DELAY] = 1;
input_dev->rep[REP_PERIOD] = 1;
error = input_register_device(input_dev); error = input_register_device(input_dev);
if (error) { if (error) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment