[media] rc: Pospone ir raw decoders loading until really needed
authorEzequiel García <elezegarcia@gmail.com>
Thu, 15 Mar 2012 19:53:49 +0000 (16:53 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 20 Mar 2012 01:11:04 +0000 (22:11 -0300)
This changes rc_core to not load the IR decoders at load time,
postponing it to load only if a RC_DRIVER_IR_RAW device is
registered via rc_register_device.
We use a static boolean variable, to ensure decoders modules
are only loaded once.
Tested with rc-loopback device only.

Signed-off-by: Ezequiel Garcia <elezegarcia@gmail.com>
Acked-by: Jarod Wilson <jarod@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/rc/rc-main.c

index f6a930b70c69586f67d3ac64ec0227c1afa1e623..6e16b09c24a99e1883bf0f4ad987e552bf98aa4e 100644 (file)
@@ -1029,6 +1029,7 @@ EXPORT_SYMBOL_GPL(rc_free_device);
 
 int rc_register_device(struct rc_dev *dev)
 {
+       static bool raw_init = false; /* raw decoders loaded? */
        static atomic_t devno = ATOMIC_INIT(0);
        struct rc_map *rc_map;
        const char *path;
@@ -1103,6 +1104,12 @@ int rc_register_device(struct rc_dev *dev)
        kfree(path);
 
        if (dev->driver_type == RC_DRIVER_IR_RAW) {
+               /* Load raw decoders, if they aren't already */
+               if (!raw_init) {
+                       IR_dprintk(1, "Loading raw decoders\n");
+                       ir_raw_init();
+                       raw_init = true;
+               }
                rc = ir_raw_event_register(dev);
                if (rc < 0)
                        goto out_input;
@@ -1176,8 +1183,6 @@ static int __init rc_core_init(void)
                return rc;
        }
 
-       /* Initialize/load the decoders/keymap code that will be used */
-       ir_raw_init();
        rc_map_register(&empty_map);
 
        return 0;