diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-04-02 19:01:00 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-05-19 11:56:50 -0400 |
commit | 02858eedcb78a664215b918d98cdb753ce432ce6 (patch) | |
tree | dd212b7b2e63cd846a1c9cf0d9b751514648b130 /drivers/media/IR/rc-map.c | |
parent | b2245ba1644eb1eba400fd04c6e7bb3ab2d4a8fa (diff) |
V4L/DVB: ir-core: Make use of the new IR keymap modules
Instead of using the ugly keymap sequences, use the new rc-*.ko keymap
files. For now, it is still needed to have one keymap loaded, for the
RC code to work. Later patches will remove this depenency.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/IR/rc-map.c')
-rw-r--r-- | drivers/media/IR/rc-map.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/drivers/media/IR/rc-map.c b/drivers/media/IR/rc-map.c index 02c72f086fe0..2f6201ce1898 100644 --- a/drivers/media/IR/rc-map.c +++ b/drivers/media/IR/rc-map.c | |||
@@ -26,12 +26,14 @@ static struct rc_keymap *seek_rc_map(const char *name) | |||
26 | 26 | ||
27 | spin_lock(&rc_map_lock); | 27 | spin_lock(&rc_map_lock); |
28 | list_for_each_entry(map, &rc_map_list, list) { | 28 | list_for_each_entry(map, &rc_map_list, list) { |
29 | if (!strcmp(name, map->map.name)) | 29 | if (!strcmp(name, map->map.name)) { |
30 | break; | 30 | spin_unlock(&rc_map_lock); |
31 | return map; | ||
32 | } | ||
31 | } | 33 | } |
32 | spin_unlock(&rc_map_lock); | 34 | spin_unlock(&rc_map_lock); |
33 | 35 | ||
34 | return map; | 36 | return NULL; |
35 | } | 37 | } |
36 | 38 | ||
37 | struct ir_scancode_table *get_rc_map(const char *name) | 39 | struct ir_scancode_table *get_rc_map(const char *name) |
@@ -43,15 +45,22 @@ struct ir_scancode_table *get_rc_map(const char *name) | |||
43 | map = seek_rc_map(name); | 45 | map = seek_rc_map(name); |
44 | #ifdef MODULE | 46 | #ifdef MODULE |
45 | if (!map) { | 47 | if (!map) { |
46 | rc = request_module("name"); | 48 | rc = request_module(name); |
47 | if (rc < 0) | 49 | if (rc < 0) { |
50 | printk(KERN_ERR "Couldn't load IR keymap %s\n", name); | ||
48 | return NULL; | 51 | return NULL; |
52 | } | ||
53 | msleep(20); /* Give some time for IR to register */ | ||
49 | 54 | ||
50 | map = seek_rc_map(name); | 55 | map = seek_rc_map(name); |
51 | } | 56 | } |
52 | #endif | 57 | #endif |
53 | if (!map) | 58 | if (!map) { |
59 | printk(KERN_ERR "IR keymap %s not found\n", name); | ||
54 | return NULL; | 60 | return NULL; |
61 | } | ||
62 | |||
63 | printk(KERN_INFO "Registered IR keymap %s\n", map->map.name); | ||
55 | 64 | ||
56 | return &map->map; | 65 | return &map->map; |
57 | } | 66 | } |
@@ -73,3 +82,9 @@ void ir_unregister_map(struct rc_keymap *map) | |||
73 | spin_unlock(&rc_map_lock); | 82 | spin_unlock(&rc_map_lock); |
74 | } | 83 | } |
75 | EXPORT_SYMBOL_GPL(ir_unregister_map); | 84 | EXPORT_SYMBOL_GPL(ir_unregister_map); |
85 | |||
86 | void rc_map_init(void) | ||
87 | { | ||
88 | spin_lock_init(&rc_map_lock); | ||
89 | |||
90 | } | ||