aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/IR/rc-map.c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2010-04-02 19:01:00 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-05-19 11:56:50 -0400
commit02858eedcb78a664215b918d98cdb753ce432ce6 (patch)
treedd212b7b2e63cd846a1c9cf0d9b751514648b130 /drivers/media/IR/rc-map.c
parentb2245ba1644eb1eba400fd04c6e7bb3ab2d4a8fa (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.c27
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
37struct ir_scancode_table *get_rc_map(const char *name) 39struct 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}
75EXPORT_SYMBOL_GPL(ir_unregister_map); 84EXPORT_SYMBOL_GPL(ir_unregister_map);
85
86void rc_map_init(void)
87{
88 spin_lock_init(&rc_map_lock);
89
90}