forked from Minki/linux
V4L/DVB: IR: JVC: make repeat work
Currently, jvc decoder will attempt misdetect next press as a repeat of last keypress, therefore second keypress isn't detected. Signed-off-by: Maxim Levitsky <maximlevitsky@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
0d2cb1de8e
commit
39b2c0687b
@ -32,6 +32,7 @@ enum jvc_state {
|
|||||||
STATE_BIT_SPACE,
|
STATE_BIT_SPACE,
|
||||||
STATE_TRAILER_PULSE,
|
STATE_TRAILER_PULSE,
|
||||||
STATE_TRAILER_SPACE,
|
STATE_TRAILER_SPACE,
|
||||||
|
STATE_CHECK_REPEAT,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -60,6 +61,7 @@ static int ir_jvc_decode(struct input_dev *input_dev, struct ir_raw_event ev)
|
|||||||
IR_dprintk(2, "JVC decode started at state %d (%uus %s)\n",
|
IR_dprintk(2, "JVC decode started at state %d (%uus %s)\n",
|
||||||
data->state, TO_US(ev.duration), TO_STR(ev.pulse));
|
data->state, TO_US(ev.duration), TO_STR(ev.pulse));
|
||||||
|
|
||||||
|
again:
|
||||||
switch (data->state) {
|
switch (data->state) {
|
||||||
|
|
||||||
case STATE_INACTIVE:
|
case STATE_INACTIVE:
|
||||||
@ -149,8 +151,18 @@ static int ir_jvc_decode(struct input_dev *input_dev, struct ir_raw_event ev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
data->count = 0;
|
data->count = 0;
|
||||||
data->state = STATE_BIT_PULSE;
|
data->state = STATE_CHECK_REPEAT;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case STATE_CHECK_REPEAT:
|
||||||
|
if (!ev.pulse)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (eq_margin(ev.duration, JVC_HEADER_PULSE, JVC_UNIT / 2))
|
||||||
|
data->state = STATE_INACTIVE;
|
||||||
|
else
|
||||||
|
data->state = STATE_BIT_PULSE;
|
||||||
|
goto again;
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
Loading…
Reference in New Issue
Block a user