forked from Minki/linux
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: David Hardeman <david@hardeman.nu> Signed-off-by: Andrew de Quincey <adq_dvb@lidskialf.net> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
This commit is contained in:
parent
b5471a27b4
commit
59236d46da
@ -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))
|
||||||
|
ir_input_nokey(dev, &budget_ci->ir.state);
|
||||||
|
|
||||||
|
/* Generate keypress */
|
||||||
|
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)));
|
||||||
|
|
||||||
|
/* Do we want to delay the keyup event? */
|
||||||
|
if (debounce) {
|
||||||
bounces = debounce;
|
bounces = debounce;
|
||||||
|
mod_timer(&dev->timer, jiffies + msecs_to_jiffies(IR_REPEAT_TIMEOUT));
|
||||||
/* Prepare a keyup event sometime in the future */
|
} else {
|
||||||
mod_timer(&dev->timer, jiffies + msecs_to_jiffies(IR_REPEAT_TIMEOUT));
|
ir_input_nokey(dev, &budget_ci->ir.state);
|
||||||
|
}
|
||||||
/* Generate a new or repeated keypress */
|
|
||||||
ir_input_keydown(dev, &budget_ci->ir.state, ir_key, ((device << 8) | command));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|||||||
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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user