staging: comedi: amplc_dio200: check bus type in detach routine
authorIan Abbott <abbotti@mev.co.uk>
Tue, 14 Aug 2012 15:31:29 +0000 (16:31 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 14 Aug 2012 23:46:33 +0000 (16:46 -0700)
When detaching the device in dio200_detach() mirror the bus type checks
performed by dio200_attach().  The existing tests are safe but rely on
dev->iobase being 0 when comedi_to_pci_dev(dev) is NULL.

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/amplc_dio200.c

index 0905e40de192e874296bda67508cf59ae2817829..7a61831132be182a5eae3ba5bb585774507f129d 100644 (file)
@@ -1417,7 +1417,6 @@ static int __devinit dio200_attach_pci(struct comedi_device *dev,
 static void dio200_detach(struct comedi_device *dev)
 {
        const struct dio200_board *thisboard = comedi_board(dev);
-       struct pci_dev *pcidev = comedi_to_pci_dev(dev);
        const struct dio200_layout_struct *layout;
        unsigned n;
 
@@ -1442,13 +1441,16 @@ static void dio200_detach(struct comedi_device *dev)
                        }
                }
        }
-       if (pcidev) {
-               if (dev->iobase)
-                       comedi_pci_disable(pcidev);
-               pci_dev_put(pcidev);
-       } else {
+       if (IS_ISA_BOARD(thisboard)) {
                if (dev->iobase)
                        release_region(dev->iobase, DIO200_IO_SIZE);
+       } else if (IS_PCI_BOARD(thisboard)) {
+               struct pci_dev *pcidev = comedi_to_pci_dev(dev);
+               if (pcidev) {
+                       if (dev->iobase)
+                               comedi_pci_disable(pcidev);
+                       pci_dev_put(pcidev);
+               }
        }
 }