[linux-dvb] Updated Mantis VP-2033 remote control patch for Manu's jusst.de Mantis branch

Pauli Borodulin pauli at borodulin.fi
Tue May 20 14:30:11 CEST 2008

> On 20.05.2008 08:16, Pauli Borodulin wrote:
 >> [...]
>> Btw I found these in dvb-usb-remote.c:
>>      input_dev->rep[REP_PERIOD] = d->props.rc_interval;
>>      input_dev->rep[REP_DELAY]  = d->props.rc_interval + 150;
>> So there seems to be some configurable auto-repeat functionality in 
>> input layer. I guess I'll experiment with those even tho' RCs delays are 
>> a bit crappy, since it's a pretty painful to go through a long list of 
>> recordings without any auto-repeat...

Roland Scheidegger wrote:
> If you change these values (to anything but zero) before
> input_register_device, the input driver will just disable auto-repeat
> (or rather, you'd need to handle it yourself in the driver with the
> appropriate timer func, and I didn't feel like duplicating half the code
> of the input driver). input_register_device also says all capabilities
> must be set up before calling it, when I tried to change those values
> afterwards it didn't seem to work (though maybe I made some testing
> error, I can't see why it shouldn't work). I guess a REP_DELAY a bit
> over the initial delay (like 300ms) should work, and a REP_PERIOD of
> about 100 (which would give you about 50% chance of stopping pressing
> keys exactly) might be reasonable - though it really is annoying if you
> can't stop exactly (but it's not solvable - either live with slow repeat
> or live with that).

In dvb/ttpci/budget-ci.c there's a note:

         /* note: these must be after input_register_device */
         input_dev->rep[REP_DELAY] = 400;
         input_dev->rep[REP_PERIOD] = 250;

I wondered why and proceeded to kernel's drivers/input/input.c. There's
a note in input_register_device:

  * If delay and period are pre-set by the driver, then autorepeating
  * is handled by the driver itself and we don't do it in input.c.

if (!dev->rep[REP_DELAY] && !dev->rep[REP_PERIOD]) {
	dev->timer.data = (long) dev;
	dev->timer.function = input_repeat_key;
	dev->rep[REP_DELAY] = 250;
	dev->rep[REP_PERIOD] = 33;

So it is different whether you set REP_DELAY & REP_PERIOD before or 
after calling input_register_device. If you set them before, it seems 
you are also expected to provide your own input_repeat_key function. If 
after, then... I guess input layer uses it's own logic, but just using 
customized REP_DELAY and REP_PERIOD.

I don't know why for example ttpci/av7110_ir.c uses it's own 
input_repeat_key function instead of using the logic provided by input 
layer. I will probably find this out later today when trying to 
experiment auto-repeat functionality.

Pauli Borodulin

More information about the linux-dvb mailing list