lkml.org 
[lkml]   [2011]   [Jan]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH] Input: rc-keymap - return KEY_RESERVED for unknown mappings
    Do not respond with -EINVAL to EVIOCGKEYCODE for not-yet-mapped scancodes,
    but rather return KEY_RESERVED.

    This fixes breakage with Ubuntu's input-kbd utility that stopped returning
    full keymaps for remote controls.

    Tested-by: Mauro Carvalho Chehab <mchehab@redhat.com>
    Tested-by: Mark Lord <kernel@teksavvy.com>
    Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
    ---

    Linus,

    Due to the fact that contents of drivers/media in my 'for-linus' branch
    are quite different from mainline/Mauro's trees and I am not planning on
    merging this branch until closer to the next merge window I am sending
    this regression fix in patch form instead of pull request.

    Please consider applying.

    Thanks,
    Dmitry

    drivers/media/rc/rc-main.c | 28 +++++++++++++++++-----------
    1 files changed, 17 insertions(+), 11 deletions(-)

    diff --git a/drivers/media/rc/rc-main.c b/drivers/media/rc/rc-main.c
    index 72be8a0..512a2f4 100644
    --- a/drivers/media/rc/rc-main.c
    +++ b/drivers/media/rc/rc-main.c
    @@ -458,21 +458,27 @@ static int ir_getkeycode(struct input_dev *idev,
    index = ir_lookup_by_scancode(rc_map, scancode);
    }

    - if (index >= rc_map->len) {
    - if (!(ke->flags & INPUT_KEYMAP_BY_INDEX))
    - IR_dprintk(1, "unknown key for scancode 0x%04x\n",
    - scancode);
    + if (index < rc_map->len) {
    + entry = &rc_map->scan[index];
    +
    + ke->index = index;
    + ke->keycode = entry->keycode;
    + ke->len = sizeof(entry->scancode);
    + memcpy(ke->scancode, &entry->scancode, sizeof(entry->scancode));
    +
    + } else if (!(ke->flags & INPUT_KEYMAP_BY_INDEX)) {
    + /*
    + * We do not really know the valid range of scancodes
    + * so let's respond with KEY_RESERVED to anything we
    + * do not have mapping for [yet].
    + */
    + ke->index = index;
    + ke->keycode = KEY_RESERVED;
    + } else {
    retval = -EINVAL;
    goto out;
    }

    - entry = &rc_map->scan[index];
    -
    - ke->index = index;
    - ke->keycode = entry->keycode;
    - ke->len = sizeof(entry->scancode);
    - memcpy(ke->scancode, &entry->scancode, sizeof(entry->scancode));
    -
    retval = 0;

    out:
    --
    1.7.3.5
    --
    Dmitry


    \
     
     \ /
      Last update: 2011-01-29 08:37    [W:0.021 / U:31.584 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site