v4l: saa7134 module
PATCH 1/1 v4l: saa7134 module
- fix saa7134 module loading issues.
Signed-off-by Gerd Knorr <[email protected]>
--- drivers/media/video/saa7134/saa7134-core.c | 47 ++++++++++++++++++++- 1 files changed, 45 insertions(+), 2 deletions(-)
drivers/media/video/saa7134/saa7134-core.c +45 -2
@@ -222,6 +222,49 @@ static void dump_statusregs(struct saa71 }#endif +/* ----------------------------------------------------------- */ +/* delayed request_module */ + +static int need_empress; +static int need_dvb; + +static int pending_call (struct notifier_block *self,unsigned long state, +void *module) +{ +if (module !=THIS_MODULE || state !=MODULE_STATE_LIVE ) +return NOTIFY_DONE ; + +if (need_empress) +request_module ("saa7134-empress" ); +if (need_dvb) +request_module ("saa7134-dvb" ); +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) +{ +switch (THIS_MODULE ->state) { +case MODULE_STATE_COMING : +if (!pending_registered) { +register_module_notifier (&pending_notifier); + pending_registered =1 ; + } + *flag =1 ; +break ; +case MODULE_STATE_LIVE : +request_module (name); +break ; +default : +/* nothing */ ; +break ; + } +} +/* ------------------------------------------------------------------ */ /* nr of (saa7134-)pages for the given buffer size */
@@ -941,11 +984,11 @@ static int __devinit saa7134_initdev(strif (dev->tda9887_conf)request_module ("tda9887" );if (card_is_empress (dev)) { -request_module ("saa7134-empress" );request_module ("saa6752hs" ); +request_module_depend ("saa7134-empress" ,&need_empress); }if (card_is_dvb (dev)) -request_module ("saa7134-dvb" ); +request_module_depend ("saa7134-dvb" ,&need_dvb);v4l2_prio_init (&dev->prio);
Signature · 1 line
#define printk(args...) fprintf(stderr, ## args)