Commit 77b74774 authored by Markus Rechberger's avatar Markus Rechberger Committed by Mauro Carvalho Chehab

V4L/DVB (5298): Added support for deferred module requesting to cx88

added support for deferred module requesting to cx88
Signed-off-by: default avatarMarkus Rechberger <mrechberger@gmail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent acf28212
...@@ -49,6 +49,35 @@ MODULE_PARM_DESC(debug,"enable debug messages [mpeg]"); ...@@ -49,6 +49,35 @@ MODULE_PARM_DESC(debug,"enable debug messages [mpeg]");
#define mpeg_dbg(level,fmt, arg...) if (debug >= level) \ #define mpeg_dbg(level,fmt, arg...) if (debug >= level) \
printk(KERN_DEBUG "%s/2-mpeg: " fmt, core->name, ## arg) printk(KERN_DEBUG "%s/2-mpeg: " fmt, core->name, ## arg)
#if defined(CONFIG_MODULES) && defined(MODULE)
static void request_module_async(struct work_struct *work)
{
struct cx8802_dev *dev=container_of(work, struct cx8802_dev, request_module_wk);
switch (cx88_boards[dev->core->board].mpeg) {
case CX88_MPEG_BLACKBIRD:
request_module("cx88-blackbird");
break;
case CX88_MPEG_DVB:
request_module("cx88-dvb");
break;
case CX88_BOARD_NONE:
/* reaching this one isn't possible */
break;
default:
printk("cx88-mpeg.c: WARNING extension [%d] is not supposed to be supported\n",cx88_boards[dev->core->board].mpeg);
}
}
static void request_modules(struct cx8802_dev *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 LIST_HEAD(cx8802_devlist); static LIST_HEAD(cx8802_devlist);
/* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */
...@@ -778,6 +807,9 @@ static int __devinit cx8802_probe(struct pci_dev *pci_dev, ...@@ -778,6 +807,9 @@ static int __devinit cx8802_probe(struct pci_dev *pci_dev,
/* Maintain a reference so cx88-video can query the 8802 device. */ /* Maintain a reference so cx88-video can query the 8802 device. */
core->dvbdev = dev; core->dvbdev = dev;
/* now autoload cx88-dvb or cx88-blackbird */
request_modules(dev);
return 0; return 0;
fail_free: fail_free:
......
...@@ -481,6 +481,8 @@ struct cx8802_dev { ...@@ -481,6 +481,8 @@ struct cx8802_dev {
/* List of attached drivers */ /* List of attached drivers */
struct cx8802_driver drvlist; struct cx8802_driver drvlist;
struct work_struct request_module_wk;
}; };
/* ----------------------------------------------------------- */ /* ----------------------------------------------------------- */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment