5009 }
5010
5011
5012 spin_lock_irqsave(&hc->lock, flags);
5013 enable_hwirq(hc);
5014 spin_unlock_irqrestore(&hc->lock, flags);
5015 return 0;
5016
5017free_card:
5018 release_io_hfcmulti(hc);
5019 if (hc == syncmaster)
5020 syncmaster = NULL;
5021 kfree(hc);
5022 return ret_err;
5023}
5024
5025static void __devexit hfc_remove_pci(struct pci_dev *pdev)
5026{
5027 struct hfc_multi *card = pci_get_drvdata(pdev);
5028 u_long flags;
5029
5030 if (debug)
5031 printk(KERN_INFO "removing hfc_multi card vendor:%x "
5032 "device:%x subvendor:%x subdevice:%x\n",
5033 pdev->vendor, pdev->device,
5034 pdev->subsystem_vendor, pdev->subsystem_device);
5035
5036 if (card) {
5037 spin_lock_irqsave(&HFClock, flags);
5038 release_card(card);
5039 spin_unlock_irqrestore(&HFClock, flags);
5040 } else {
5041 if (debug)
5042 printk(KERN_WARNING "%s: drvdata allready removed\n",
5043 __func__);
5044 }
5045}
5046
5047#define VENDOR_CCD "Cologne Chip AG"
5048#define VENDOR_BN "beroNet GmbH"
5049#define VENDOR_DIG "Digium Inc."