static void spec_remove(struct pci_dev *pdev) { int i; struct spec_dev *dev = pci_get_drvdata(pdev); unsigned int minor = MINOR(dev->cdev.dev); if (dev->bus_registered) wb_unregister_bus(&dev->wb_bus); device_destroy(spec_class, MKDEV(spec_major, minor)); cdev_del(&dev->cdev); if (dev->flags & SPEC_FLAG_IRQREQUEST) free_irq(pdev->irq, dev); /* FIXME: Reenable if we are shared */ for (i = 0; i < 3; i++) iounmap(dev->remap[i]); release_firmware(dev->fw); pci_release_regions(pdev); pci_disable_device(pdev); vfree(dev->dmabuf); kfree(dev); }
static void __exit fake_wb_bus_exit(void) { wb_unregister_bus(&fake_wb_bus); release_firmware(wb_fw); device_unregister(&fake_wbbus_device); }