static void __exit unload_opl3sa2(struct address_info *hw_config) { /* Release control ports */ release_region(hw_config->io_base, 2); /* Unload mixer */ if(opl3sa2_mixer >= 0) sound_unload_mixerdev(opl3sa2_mixer); }
static void __exit cleanup_nm256 (void) { if (loaded) { struct nm256_info *card; struct nm256_info *next_card; for (card = nmcard_list; card != NULL; card = next_card) { stopPlay (card); stopRecord (card); if (card->has_irq) free_irq (card->irq, card); nm256_release_ports (card); sound_unload_mixerdev (card->mixer_oss_dev); sound_unload_audiodev (card->dev[0]); sound_unload_audiodev (card->dev[1]); next_card = card->next_card; kfree (card); } nmcard_list = NULL; } pm_unregister_all (&handle_pm_event); }
static void __devinit nm256_remove(struct pci_dev *pcidev) { struct nm256_info *xcard = pci_get_drvdata(pcidev); struct nm256_info *card,*next_card = NULL; for (card = nmcard_list; card != NULL; card = next_card) { next_card = card->next_card; if (card == xcard) { stopPlay (card); stopRecord (card); if (card->has_irq) free_irq (card->irq, card); nm256_release_ports (card); sound_unload_mixerdev (card->mixer_oss_dev); sound_unload_audiodev (card->dev[0]); sound_unload_audiodev (card->dev[1]); kfree (card); break; } } if (nmcard_list == card) nmcard_list = next_card; }