Commit db190fc1 authored by Jarod Wilson's avatar Jarod Wilson Committed by Mauro Carvalho Chehab

V4L/DVB: IR/imon: add proper auto-repeat support

Simplified from version 1, in that hacks heisted from ati_remote2.c
aren't actually necessary, the real fix for too many repeats was
from setting too long a timer release value (200ms) on repeats in
mce mode -- this patch drops the release timeout to 33ms, matching
the input subsystem default input_dev->rep[REP_PERIOD].
Signed-off-by: default avatarJarod Wilson <jarod@redhat.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 666a9ed8
...@@ -146,7 +146,6 @@ struct imon_context { ...@@ -146,7 +146,6 @@ struct imon_context {
}; };
#define TOUCH_TIMEOUT (HZ/30) #define TOUCH_TIMEOUT (HZ/30)
#define MCE_TIMEOUT_MS 200
/* vfd character device file operations */ /* vfd character device file operations */
static const struct file_operations vfd_fops = { static const struct file_operations vfd_fops = {
...@@ -1392,6 +1391,8 @@ static int imon_parse_press_type(struct imon_context *ictx, ...@@ -1392,6 +1391,8 @@ static int imon_parse_press_type(struct imon_context *ictx,
unsigned char *buf, u8 ktype) unsigned char *buf, u8 ktype)
{ {
int press_type = 0; int press_type = 0;
int rep_delay = ictx->idev->rep[REP_DELAY];
int rep_period = ictx->idev->rep[REP_PERIOD];
/* key release of 0x02XXXXXX key */ /* key release of 0x02XXXXXX key */
if (ictx->kc == KEY_RESERVED && buf[0] == 0x02 && buf[3] == 0x00) if (ictx->kc == KEY_RESERVED && buf[0] == 0x02 && buf[3] == 0x00)
...@@ -1416,12 +1417,12 @@ static int imon_parse_press_type(struct imon_context *ictx, ...@@ -1416,12 +1417,12 @@ static int imon_parse_press_type(struct imon_context *ictx,
ictx->mce_toggle_bit = buf[2]; ictx->mce_toggle_bit = buf[2];
press_type = 1; press_type = 1;
mod_timer(&ictx->itimer, mod_timer(&ictx->itimer,
jiffies + msecs_to_jiffies(MCE_TIMEOUT_MS)); jiffies + msecs_to_jiffies(rep_delay));
/* repeat */ /* repeat */
} else { } else {
press_type = 2; press_type = 2;
mod_timer(&ictx->itimer, mod_timer(&ictx->itimer,
jiffies + msecs_to_jiffies(MCE_TIMEOUT_MS)); jiffies + msecs_to_jiffies(rep_period));
} }
/* incoherent or irrelevant data */ /* incoherent or irrelevant data */
...@@ -1539,7 +1540,7 @@ static void imon_incoming_packet(struct imon_context *ictx, ...@@ -1539,7 +1540,7 @@ static void imon_incoming_packet(struct imon_context *ictx,
do_gettimeofday(&t); do_gettimeofday(&t);
msec = tv2int(&t, &prev_time); msec = tv2int(&t, &prev_time);
prev_time = t; prev_time = t;
if (msec < 200) if (msec < idev->rep[REP_DELAY])
return; return;
} }
...@@ -1684,7 +1685,7 @@ static struct input_dev *imon_init_idev(struct imon_context *ictx) ...@@ -1684,7 +1685,7 @@ static struct input_dev *imon_init_idev(struct imon_context *ictx)
strlcat(ictx->phys_idev, "/input0", sizeof(ictx->phys_idev)); strlcat(ictx->phys_idev, "/input0", sizeof(ictx->phys_idev));
idev->phys = ictx->phys_idev; idev->phys = ictx->phys_idev;
idev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); idev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | BIT_MASK(EV_REL);
idev->keybit[BIT_WORD(BTN_MOUSE)] = idev->keybit[BIT_WORD(BTN_MOUSE)] =
BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_RIGHT); BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_RIGHT);
......
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