diff --git a/drivers/staging/dgnc/dgnc_driver.c b/drivers/staging/dgnc/dgnc_driver.c index 764613b2f4b4..2c2abf848326 100644 --- a/drivers/staging/dgnc/dgnc_driver.c +++ b/drivers/staging/dgnc/dgnc_driver.c @@ -76,12 +76,6 @@ static void dgnc_remove_one(struct pci_dev *dev); static int dgnc_probe1(struct pci_dev *pdev, int card_type); static void dgnc_do_remap(struct dgnc_board *brd); -/* Driver load/unload functions */ -int dgnc_init_module(void); -void dgnc_cleanup_module(void); - -module_init(dgnc_init_module); -module_exit(dgnc_cleanup_module); /* @@ -199,13 +193,49 @@ char *dgnc_driver_state_text[] = { * ************************************************************************/ +/* + * dgnc_cleanup_module() + * + * Module unload. This is where it all ends. + */ +static void dgnc_cleanup_module(void) +{ + int i; + ulong lock_flags; + + DGNC_LOCK(dgnc_poll_lock, lock_flags); + dgnc_poll_stop = 1; + DGNC_UNLOCK(dgnc_poll_lock, lock_flags); + + /* Turn off poller right away. */ + del_timer_sync(&dgnc_poll_timer); + + dgnc_remove_driver_sysfiles(&dgnc_driver); + + if (dgnc_Major_Control_Registered) { + device_destroy(dgnc_class, MKDEV(dgnc_Major, 0)); + class_destroy(dgnc_class); + unregister_chrdev(dgnc_Major, "dgnc"); + } + + for (i = 0; i < dgnc_NumBoards; ++i) { + dgnc_remove_ports_sysfiles(dgnc_Board[i]); + dgnc_tty_uninit(dgnc_Board[i]); + dgnc_cleanup_board(dgnc_Board[i]); + } + + dgnc_tty_post_uninit(); + + if (dgnc_NumBoards) + pci_unregister_driver(&dgnc_driver); +} /* * init_module() * * Module load. This is where it all starts. */ -int dgnc_init_module(void) +static int __init dgnc_init_module(void) { int rc = 0; @@ -243,6 +273,8 @@ int dgnc_init_module(void) return rc; } +module_init(dgnc_init_module); +module_exit(dgnc_cleanup_module); /* * Start of driver. @@ -354,44 +386,6 @@ static void dgnc_remove_one(struct pci_dev *dev) /* Do Nothing */ } -/* - * dgnc_cleanup_module() - * - * Module unload. This is where it all ends. - */ -void dgnc_cleanup_module(void) -{ - int i; - ulong lock_flags; - - DGNC_LOCK(dgnc_poll_lock, lock_flags); - dgnc_poll_stop = 1; - DGNC_UNLOCK(dgnc_poll_lock, lock_flags); - - /* Turn off poller right away. */ - del_timer_sync(&dgnc_poll_timer); - - dgnc_remove_driver_sysfiles(&dgnc_driver); - - if (dgnc_Major_Control_Registered) { - device_destroy(dgnc_class, MKDEV(dgnc_Major, 0)); - class_destroy(dgnc_class); - unregister_chrdev(dgnc_Major, "dgnc"); - } - - for (i = 0; i < dgnc_NumBoards; ++i) { - dgnc_remove_ports_sysfiles(dgnc_Board[i]); - dgnc_tty_uninit(dgnc_Board[i]); - dgnc_cleanup_board(dgnc_Board[i]); - } - - dgnc_tty_post_uninit(); - - if (dgnc_NumBoards) - pci_unregister_driver(&dgnc_driver); -} - - /* * dgnc_cleanup_board() *