1. 03 8月, 2010 2 次提交
    • J
      V4L/DVB: IR: only initially registers protocol that matches loaded keymap · 7366646e
      Jarod Wilson 提交于
      Rather than registering all IR protocol decoders as enabled when bringing
      up a new device, only enable the IR protocol decoder that matches the
      keymap being loaded. Additional decoders can be enabled on the fly by
      those that need to, either by twiddling sysfs bits or by using the
      ir-keytable util from v4l-utils.
      
      Functional testing done with the mceusb driver, and it behaves as expected,
      only the rc6 decoder is enabled, keys are all handled properly, etc.
      Signed-off-by: NJarod Wilson <jarod@redhat.com>
      Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
      7366646e
    • J
      V4L/DVB: IR: let all protocol decoders have a go at raw data · c2284261
      Jarod Wilson 提交于
      On Fri, May 28, 2010 at 3:59 PM, Jarod Wilson <jarod@redhat.com> wrote:
      > The mceusb driver I'm about to submit handles just about any raw IR you
      > can throw at it. The ir-core loads up all protocol decoders, starting
      > with NEC, then RC5, then RC6. RUN_DECODER() was trying them in the same
      > order, and exiting if any of the decoders didn't like the data. The
      > default mceusb remote talks RC6(6A). Well, the RC6 decoder never gets a
      > chance to run unless you move the RC6 decoder to the front of the list.
      >
      > What I believe to be correct is to have RUN_DECODER keep trying all of
      > the decoders, even when one triggers an error. I don't think the errors
      > matter so much as it matters that at least one was successful -- i.e.,
      > that _sumrc is > 0. The following works for me w/my mceusb driver and
      > the default decoder ordering -- NEC and RC5 still fail, but RC6 still
      > gets a crack at it, and successfully does its job.
      >
      > Signed-off-by: Jarod Wilson <jarod@redhat.com>
      >
      > ---
      >  drivers/media/IR/ir-raw-event.c |    7 ++++---
      >
      > diff --git a/drivers/media/IR/ir-raw-event.c b/drivers/media/IR/ir-raw-event.c
      > index ea68a3f..44162db 100644
      > --- a/drivers/media/IR/ir-raw-event.c
      > +++ b/drivers/media/IR/ir-raw-event.c
      > @@ -36,14 +36,15 @@ static DEFINE_SPINLOCK(ir_raw_handler_lock);
      >  */
      >  #define RUN_DECODER(ops, ...) ({                                           \
      >        struct ir_raw_handler           *_ir_raw_handler;                   \
      > -       int _sumrc = 0, _rc;                                                \
      > +       int _sumrc = 0, _rc, _fail;                                         \
      >        spin_lock(&ir_raw_handler_lock);                                    \
      >        list_for_each_entry(_ir_raw_handler, &ir_raw_handler_list, list) {  \
      >                if (_ir_raw_handler->ops) {                                 \
      >                        _rc = _ir_raw_handler->ops(__VA_ARGS__);            \
      >                        if (_rc < 0)                                        \
      > -                               break;                                      \
      > -                       _sumrc += _rc;                                      \
      > +                               _fail++;                                    \
      > +                       else                                                \
      > +                               _sumrc += _rc;                              \
      
      Self-NAK. The only place we actually *care* about the retval from a
      RUN_DECODER() call is in __ir_input_register(), and currently, its
      looking for retval < 0, which is currently never possible. When we're
      running the decoders, either they fail and return -EINVAL or they
      succeed and return 0, and in the register case, we get either a
      negative error (ex: -ENOMEM from rc6) or 0, so with the above, _sumrc
      will *always* be 0 in the two cases I'm looking at. The third place
      where RUN_DECODER gets called (decoder unregister) doesn't care about
      the retval either. New patch below, including updated comments about
      the macro.
      Signed-off-by: NJarod Wilson <jarod@redhat.com>
      Signed-off-by: NMauro Carvalho Chehab <mchehab@redhat.com>
      c2284261
  2. 01 6月, 2010 7 次提交
  3. 19 5月, 2010 31 次提交