diff options
author | David Härdeman | 2010-04-02 20:58:28 +0200 |
---|---|---|
committer | Mauro Carvalho Chehab | 2010-05-19 17:56:53 +0200 |
commit | b3074c0a3f020766c05c1249a31212bff4a77bea (patch) | |
tree | 90fcff6ccd7746273810ebf7f22536855d31ff31 /include/media | |
parent | V4L/DVB: saa7134: Add support for both positive and negative edge IRQ (diff) | |
download | kernel-qcow2-linux-b3074c0a3f020766c05c1249a31212bff4a77bea.tar.gz kernel-qcow2-linux-b3074c0a3f020766c05c1249a31212bff4a77bea.tar.xz kernel-qcow2-linux-b3074c0a3f020766c05c1249a31212bff4a77bea.zip |
V4L/DVB: drivers/media/IR - improve keytable code
The attached patch rewrites much of the keytable code in
drivers/media/IR/ir-keytable.c.
The scancodes are now inserted into the array in sorted
order which allows for a binary search on lookup.
The code has also been shrunk by about 150 lines.
In addition it fixes the following bugs:
Any use of ir_seek_table() was racy.
ir_dev->driver_name is leaked between ir_input_register() and
ir_input_unregister().
ir_setkeycode() unconditionally does clear_bit() on dev->keybit
when removing a mapping, but there might be another mapping with
a different scancode and the same keycode.
This version has been updated to incorporate patch feedback from
Mauro Carvalho Chehab.
[mchehab@redhat.com: Fix a conflict with RC keytable breakup patches and input changes]
Signed-off-by: David Härdeman <david@hardeman.nu>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'include/media')
-rw-r--r-- | include/media/ir-core.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/media/ir-core.h b/include/media/ir-core.h index c6b8e179dfe0..7a0be8d4999d 100644 --- a/include/media/ir-core.h +++ b/include/media/ir-core.h @@ -47,7 +47,9 @@ struct ir_scancode { struct ir_scancode_table { struct ir_scancode *scan; - int size; + unsigned int size; /* Max number of entries */ + unsigned int len; /* Used number of entries */ + unsigned int alloc; /* Size of *scan in bytes */ u64 ir_type; char *name; spinlock_t lock; |