diff options
author | Hartmut Hackmann <hartmut.hackmann@t-online.de> | 2007-02-15 01:15:54 +0100 |
---|---|---|
committer | Hartmut Hackmann <hartmut.hackmann@t-online.de> | 2007-02-15 01:15:54 +0100 |
commit | e13eaa7389cf068c8243c7d98d2ccd6321093817 (patch) | |
tree | 284476d5e58c7fc1e9a4a0c62dffa5a1acfe0848 | |
parent | abf69ab9d6b9d4c9729c7b4189c15171a1d2e575 (diff) | |
download | mediapointer-dvb-s2-e13eaa7389cf068c8243c7d98d2ccd6321093817.tar.gz mediapointer-dvb-s2-e13eaa7389cf068c8243c7d98d2ccd6321093817.tar.bz2 |
this patch fixes request_module_depend()
From: Markus Rechberger <markus.rechberger@amd.com>
this patch fixes request_module_depend()
Signed-off-by: Markus Rechberger <markus.rechberger@amd.com>
Signed-off-by: Hartmut Hackmann <hartmut.hackmann@t-online.de>
-rw-r--r-- | linux/drivers/media/video/saa7134/saa7134-core.c | 78 |
1 files changed, 24 insertions, 54 deletions
diff --git a/linux/drivers/media/video/saa7134/saa7134-core.c b/linux/drivers/media/video/saa7134/saa7134-core.c index 0195b3597..194ad5a3f 100644 --- a/linux/drivers/media/video/saa7134/saa7134-core.c +++ b/linux/drivers/media/video/saa7134/saa7134-core.c @@ -242,59 +242,44 @@ static void dump_statusregs(struct saa7134_dev *dev) /* delayed request_module */ #if defined(CONFIG_MODULES) && defined(MODULE) -static int need_empress; -static int need_dvb; -static int need_alsa; -static int need_oss; #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) -#define request_module_depend(name,flag) request_module(name); +/* This is the same as it did before, it very likely doesn't work + someone please review this part and remove it.. */ +static void request_submodules(struct saa7134_dev *dev){ + if (card_is_empress(dev)) + request_module("saa7134-empress"); + if (card_is_dvb(dev)) + request_module("saa7134-dvb"); + if (alsa) + request_module("saa7134-alsa"); + if (oss) + request_module("saa7134-oss"); +} #else -static int pending_call(struct notifier_block *self, unsigned long state, - void *module) -{ - if (module != THIS_MODULE || state != MODULE_STATE_LIVE) - return NOTIFY_DONE; +static struct work_struct request_module_wk; - if (need_empress) +static void request_module_async(void *ptr){ + struct saa7134_dev *dev=(struct saa7134_dev*)ptr; + if (card_is_empress(dev)) request_module("saa7134-empress"); - if (need_dvb) + if (card_is_dvb(dev)) request_module("saa7134-dvb"); - if (need_alsa) + if (alsa) request_module("saa7134-alsa"); - if (need_oss) + if (oss) request_module("saa7134-oss"); - return NOTIFY_DONE; } -static int pending_registered; -static struct notifier_block pending_notifier = { - .notifier_call = pending_call, -}; - -static void request_module_depend(char *name, int *flag) +static void request_submodules(struct saa7134_dev *dev) { - int err; - switch (THIS_MODULE->state) { - case MODULE_STATE_COMING: - if (!pending_registered) { - err = register_module_notifier(&pending_notifier); - pending_registered = 1; - } - *flag = 1; - break; - case MODULE_STATE_LIVE: - request_module(name); - break; - default: - /* nothing */; - break; - } + INIT_WORK(&request_module_wk, request_module_async, dev); + schedule_work(&request_module_wk); } #endif #else -#define request_module_depend(name,flag) +#define request_module_depend(name) #endif /* CONFIG_MODULES */ /* ------------------------------------------------------------------ */ @@ -1076,18 +1061,9 @@ static int __devinit saa7134_initdev(struct pci_dev *pci_dev, request_module("tuner"); if (card_is_empress(dev)) { request_module("saa6752hs"); - request_module_depend("saa7134-empress",&need_empress); } - if (card_is_dvb(dev)) - request_module_depend("saa7134-dvb",&need_dvb); - - - if (alsa) - request_module_depend("saa7134-alsa",&need_alsa); - - if (oss) - request_module_depend("saa7134-oss",&need_oss); + request_submodules(dev); v4l2_prio_init(&dev->prio); @@ -1287,12 +1263,6 @@ static int saa7134_init(void) static void saa7134_fini(void) { -#if defined(CONFIG_MODULES) && defined(MODULE) -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) - if (pending_registered) - unregister_module_notifier(&pending_notifier); -#endif -#endif /* CONFIG_MODULES */ pci_unregister_driver(&saa7134_pci_driver); } |