diff options
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 | } | ||