[media] bttv: make remote controls of devices with i2c ir decoder working
authorFrank Schaefer <fschaefer.oss@googlemail.com>
Sun, 17 Feb 2013 12:40:05 +0000 (09:40 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 5 Mar 2013 20:10:43 +0000 (17:10 -0300)
Request module ir-kbd-i2c if an i2c ir decoder is detected.
Tested with device "Hauppauge WinTV Theatre" (model 37284 rev B421).

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/pci/bt8xx/bttv-input.c

index 04207a7..01c7121 100644 (file)
@@ -375,6 +375,7 @@ void init_bttv_i2c_ir(struct bttv *btv)
                I2C_CLIENT_END
        };
        struct i2c_board_info info;
+       struct i2c_client *i2c_dev;
 
        if (0 != btv->i2c_rc)
                return;
@@ -390,7 +391,12 @@ void init_bttv_i2c_ir(struct bttv *btv)
                btv->init_data.ir_codes = RC_MAP_PV951;
                info.addr = 0x4b;
                break;
-       default:
+       }
+
+       if (btv->init_data.name) {
+               info.platform_data = &btv->init_data;
+               i2c_dev = i2c_new_device(&btv->c.i2c_adap, &info);
+       } else {
                /*
                 * The external IR receiver is at i2c address 0x34 (0x35 for
                 * reads).  Future Hauppauge cards will have an internal
@@ -399,16 +405,14 @@ void init_bttv_i2c_ir(struct bttv *btv)
                 * internal.
                 * That's why we probe 0x1a (~0x34) first. CB
                 */
-
-               i2c_new_probed_device(&btv->c.i2c_adap, &info, addr_list, NULL);
-               return;
+               i2c_dev = i2c_new_probed_device(&btv->c.i2c_adap, &info, addr_list, NULL);
        }
+       if (NULL == i2c_dev)
+               return;
 
-       if (btv->init_data.name)
-               info.platform_data = &btv->init_data;
-       i2c_new_device(&btv->c.i2c_adap, &info);
-
-       return;
+#if defined(CONFIG_MODULES) && defined(MODULE)
+       request_module("ir-kbd-i2c");
+#endif
 }
 
 int fini_bttv_i2c(struct bttv *btv)