From: hias@horus.com (Matthias Reichl)
To: linus-amlogic@lists.infradead.org
Subject: [PATCH v2 0/7] Improve latency of IR decoding
Date: Tue, 10 Apr 2018 19:53:43 +0200 [thread overview]
Message-ID: <20180410175343.hu423iejripoqdkj@camel2.lan> (raw)
In-Reply-To: <cover.1523221902.git.sean@mess.org>
Hi Sean,
On Sun, Apr 08, 2018 at 10:19:35PM +0100, Sean Young wrote:
> The current IR decoding is much too slow. Many IR protocols rely on
> a trailing space for decoding (e.g. rc-6 needs to know when the bits
> end). The trailing space is generated by the IR timeout, and if this
> is longer than required, buttons can feel slow to respond.
>
> The other issue is the keyup timer. IR has no concept of a keyup message,
> this is implied by the absence of IR. So, minimising the timeout for
> this makes buttons less "sticky"; the are released much quicker.
>
> With these patches in place, using IR with the builtin decoders is much
> improved and feels very snappy.
>
> Changes since v1:
> - lost more testing
> - fixed various issues with mce decoder
> - fixed mceusb so it can use better timeout too
thanks, this version is working fine with meson-ir and gpio-rc-recv
(latter on RPi). I mainly tested it with rc-5 remotes so far, more
will follow and I'll update LibreELEC in a day or two to include
the v2 series.
Also thanks a lot for the mce_kbd fixes, I was just going to dig
into the decoder (we received a bug report about stuck keys with
mce_kbd last week), your patches can in just at the right time :)
I had a closer look at ir-mce_kbd-decoder.c and noticed 2 things
(which can be handled separately):
It looks like the input_sync call in the state machine error
path is not necessary:
out:
dev_dbg(&dev->dev, "failed at state %i (%uus %s)\n",
data->state, TO_US(ev.duration), TO_STR(ev.pulse));
data->state = STATE_INACTIVE;
input_sync(data->idev);
return -EINVAL;
If I followed the code paths correctly states that generate
input events won't go to out, only paths were no events are
generated jump to out - but better verify that, I could have
missed something.
The other thing I noticed is that there's no spinlock synchronizing
the events from the timeout callback with the ones from the state
machine - like keylock in rc-main. So the code could potentially
be racy (if the timeout fires while the state machine is outputting
events).
so long,
Hias
>
> Sean Young (7):
> media: rc: set timeout to smallest value required by enabled protocols
> media: rc: add ioctl to get the current timeout
> media: rc: per-protocol repeat period and minimum keyup timer
> media: rc: mce_kbd decoder: low timeout values cause double keydowns
> media: rc: mce_kbd protocol encodes two scancodes
> media: rc: mce_kbd decoder: fix stuck keys
> media: rc: mceusb: allow the timeout to be configurable
>
> Documentation/media/uapi/rc/lirc-func.rst | 1 +
> .../media/uapi/rc/lirc-set-rec-timeout.rst | 14 +++--
> drivers/media/cec/cec-core.c | 2 +-
> drivers/media/rc/ir-imon-decoder.c | 1 +
> drivers/media/rc/ir-jvc-decoder.c | 1 +
> drivers/media/rc/ir-mce_kbd-decoder.c | 36 +++++++-----
> drivers/media/rc/ir-nec-decoder.c | 1 +
> drivers/media/rc/ir-rc5-decoder.c | 1 +
> drivers/media/rc/ir-rc6-decoder.c | 1 +
> drivers/media/rc/ir-sanyo-decoder.c | 1 +
> drivers/media/rc/ir-sharp-decoder.c | 1 +
> drivers/media/rc/ir-sony-decoder.c | 1 +
> drivers/media/rc/ir-xmp-decoder.c | 1 +
> drivers/media/rc/lirc_dev.c | 9 ++-
> drivers/media/rc/mceusb.c | 22 +++++++
> drivers/media/rc/rc-core-priv.h | 1 +
> drivers/media/rc/rc-ir-raw.c | 31 +++++++++-
> drivers/media/rc/rc-main.c | 68 +++++++++++-----------
> include/uapi/linux/lirc.h | 6 ++
> 19 files changed, 144 insertions(+), 55 deletions(-)
>
> --
> 2.14.3
>
next prev parent reply other threads:[~2018-04-10 17:53 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-08 21:19 Sean Young
2018-04-08 21:19 ` [PATCH v2 1/7] media: rc: set timeout to smallest value required by enabled protocols Sean Young
2018-04-08 21:19 ` [PATCH v2 2/7] media: rc: add ioctl to get the current timeout Sean Young
2018-04-08 21:19 ` [PATCH v2 3/7] media: rc: per-protocol repeat period and minimum keyup timer Sean Young
2018-04-08 21:19 ` [PATCH v2 4/7] media: rc: mce_kbd decoder: low timeout values cause double keydowns Sean Young
2018-04-08 21:19 ` [PATCH v2 5/7] media: rc: mce_kbd protocol encodes two scancodes Sean Young
2018-04-08 21:19 ` [PATCH v2 6/7] media: rc: mce_kbd decoder: fix stuck keys Sean Young
2018-04-08 21:19 ` [PATCH v2 7/7] media: rc: mceusb: allow the timeout to be configurable Sean Young
2018-04-17 19:14 ` Matthias Reichl
2018-04-18 11:24 ` Sean Young
2018-04-18 17:42 ` Matthias Reichl
2018-04-19 22:17 ` Matthias Reichl
2018-04-21 13:18 ` Matthias Reichl
2018-04-21 17:41 ` Matthias Reichl
2018-04-10 17:53 ` Matthias Reichl [this message]
2018-04-10 18:39 ` [PATCH v2 0/7] Improve latency of IR decoding Sean Young
2018-04-10 19:24 ` Matthias Reichl
2018-04-12 22:02 ` Sean Young
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180410175343.hu423iejripoqdkj@camel2.lan \
--to=hias@horus.com \
--cc=linus-amlogic@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®