* 02-07-2003 Bug made it into first release. Take two.
*/
+#include <linux/config.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/init.h>
static struct sb_card_config *legacy = NULL;
#ifdef CONFIG_PNP
-static int pnp_registered;
static int __initdata pnp = 1;
/*
static int __initdata uart401 = 0;
}
/* Register legacy card with OSS subsystem */
-static int __init sb_init_legacy(void)
+static int sb_init_legacy(void)
{
struct sb_module_options sbmo = {0};
}
}
-static unsigned int sb_pnp_devices;
-
/* Probe callback function for the PnP API */
static int sb_pnp_probe(struct pnp_card_link *card, const struct pnp_card_device_id *card_id)
{
scc->conf.dma, scc->conf.dma2);
pnp_set_card_drvdata(card, scc);
- sb_pnp_devices++;
return sb_register_oss(scc, &sbmo);
}
MODULE_DEVICE_TABLE(pnp_card, sb_pnp_card_table);
#endif /* CONFIG_PNP */
-static void __init_or_module sb_unregister_all(void)
-{
-#ifdef CONFIG_PNP
- if (pnp_registered)
- pnp_unregister_card_driver(&sb_pnp_driver);
-#endif
-}
-
static int __init sb_init(void)
{
int lres = 0;
#ifdef CONFIG_PNP
if(pnp) {
- int err = pnp_register_card_driver(&sb_pnp_driver);
- if (!err)
- pnp_registered = 1;
- pres = sb_pnp_devices;
+ pres = pnp_register_card_driver(&sb_pnp_driver);
}
#endif
printk(KERN_INFO "sb: Init: Done\n");
/* If either PnP or Legacy registered a card then return
* success */
- if (pres == 0 && lres <= 0) {
- sb_unregister_all();
+ if (pres <= 0 && lres <= 0) {
+#ifdef CONFIG_PNP
+ pnp_unregister_card_driver(&sb_pnp_driver);
+#endif
return -ENODEV;
}
return 0;
sb_unload(legacy);
}
- sb_unregister_all();
+#ifdef CONFIG_PNP
+ pnp_unregister_card_driver(&sb_pnp_driver);
+#endif
- vfree(smw_free);
- smw_free = NULL;
+ if (smw_free) {
+ vfree(smw_free);
+ smw_free = NULL;
+ }
}
module_init(sb_init);