diff options
Diffstat (limited to 'drivers/staging/comedi/comedi_pci.c')
-rw-r--r-- | drivers/staging/comedi/comedi_pci.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/staging/comedi/comedi_pci.c b/drivers/staging/comedi/comedi_pci.c index abbc0e4f5c51..aa0795a2660e 100644 --- a/drivers/staging/comedi/comedi_pci.c +++ b/drivers/staging/comedi/comedi_pci.c @@ -17,6 +17,7 @@ */ #include <linux/pci.h> +#include <linux/interrupt.h> #include "comedidev.h" @@ -73,6 +74,29 @@ void comedi_pci_disable(struct comedi_device *dev) EXPORT_SYMBOL_GPL(comedi_pci_disable); /** + * comedi_pci_detach() - A generic (*detach) function for PCI drivers. + * @dev: comedi_device struct + */ +void comedi_pci_detach(struct comedi_device *dev) +{ + struct pci_dev *pcidev = comedi_to_pci_dev(dev); + + if (!pcidev || !dev->ioenabled) + return; + + if (dev->irq) { + free_irq(dev->irq, dev); + dev->irq = 0; + } + if (dev->mmio) { + iounmap(dev->mmio); + dev->mmio = NULL; + } + comedi_pci_disable(dev); +} +EXPORT_SYMBOL_GPL(comedi_pci_detach); + +/** * comedi_pci_auto_config() - Configure/probe a comedi PCI driver. * @pcidev: pci_dev struct * @driver: comedi_driver struct |