Browse Source

V4L/DVB (5482): Bttv: automatically load dvb-bt8xx for bttv cards with dvb

This patch causes the bttv driver to automatically load the dvb-bt8xx module
for bttv/dvb hybrid cards. Successfully tested with a pcHDTV HD-2000 card.
This patch is based on the recent patches to enable autoloading of cx88-dvb,
cx88-blackbird and saa7134-dvb.

Signed-off-by: Jarod Wilson <jwilson@redhat.com>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Jarod Wilson 18 years ago
parent
commit
f992a497c7
2 changed files with 25 additions and 2 deletions
  1. 22 2
      drivers/media/video/bt8xx/bttv-driver.c
  2. 3 0
      drivers/media/video/bt8xx/bttvp.h

+ 22 - 2
drivers/media/video/bt8xx/bttv-driver.c

@@ -163,6 +163,24 @@ static ssize_t show_card(struct class_device *cd, char *buf)
 }
 static CLASS_DEVICE_ATTR(card, S_IRUGO, show_card, NULL);
 
+/* ----------------------------------------------------------------------- */
+/* dvb auto-load setup                                                     */
+#if defined(CONFIG_MODULES) && defined(MODULE)
+static void request_module_async(struct work_struct *work)
+{
+	request_module("dvb-bt8xx");
+}
+
+static void request_modules(struct bttv *dev)
+{
+	INIT_WORK(&dev->request_module_wk, request_module_async);
+	schedule_work(&dev->request_module_wk);
+}
+#else
+#define request_modules(dev)
+#endif /* CONFIG_MODULES */
+
+
 /* ----------------------------------------------------------------------- */
 /* static data                                                             */
 
@@ -4769,9 +4787,11 @@ static int __devinit bttv_probe(struct pci_dev *dev,
 		disclaim_video_lines(btv);
 	}
 
-	/* add subdevices */
-	if (bttv_tvcards[btv->c.type].has_dvb)
+	/* add subdevices and autoload dvb-bt8xx if needed */
+	if (bttv_tvcards[btv->c.type].has_dvb) {
 		bttv_sub_add_device(&btv->c, "dvb");
+		request_modules(btv);
+	}
 
 	bttv_input_init(btv);
 

+ 3 - 0
drivers/media/video/bt8xx/bttvp.h

@@ -434,6 +434,9 @@ struct bttv {
 	unsigned int users;
 	struct bttv_fh init;
 
+	/* used to make dvb-bt8xx autoloadable */
+	struct work_struct request_module_wk;
+
 	/* Default (0) and current (1) video capturing and overlay
 	   cropping parameters in bttv_tvnorm.cropcap units. Protected
 	   by bttv.lock. */