staging: comedi: comedi_pci: introduce comedi_pci_detach()
[cascardo/linux.git] / drivers / staging / comedi / drivers / 8255_pci.c
index f21e656..8b95898 100644 (file)
@@ -190,24 +190,12 @@ static int pci_8255_mite_init(struct pci_dev *pcidev)
        return 0;
 }
 
-static int pci_8255_mmio(int dir, int port, int data, unsigned long iobase)
-{
-       void __iomem *mmio_base = (void __iomem *)iobase;
-
-       if (dir) {
-               writeb(data, mmio_base + port);
-               return 0;
-       }
-       return readb(mmio_base  + port);
-}
-
 static int pci_8255_auto_attach(struct comedi_device *dev,
                                unsigned long context)
 {
        struct pci_dev *pcidev = comedi_to_pci_dev(dev);
        const struct pci_8255_boardinfo *board = NULL;
        struct comedi_subdevice *s;
-       bool is_mmio;
        int ret;
        int i;
 
@@ -228,9 +216,7 @@ static int pci_8255_auto_attach(struct comedi_device *dev,
                        return ret;
        }
 
-       is_mmio = (pci_resource_flags(pcidev, board->dio_badr) &
-                  IORESOURCE_MEM) != 0;
-       if (is_mmio) {
+       if ((pci_resource_flags(pcidev, board->dio_badr) & IORESOURCE_MEM)) {
                dev->mmio = pci_ioremap_bar(pcidev, board->dio_badr);
                if (!dev->mmio)
                        return -ENOMEM;
@@ -248,16 +234,11 @@ static int pci_8255_auto_attach(struct comedi_device *dev,
                return ret;
 
        for (i = 0; i < board->n_8255; i++) {
-               unsigned long iobase;
-
                s = &dev->subdevices[i];
-               if (is_mmio) {
-                       iobase = (unsigned long)(dev->mmio + (i * 4));
-                       ret = subdev_8255_init(dev, s, pci_8255_mmio, iobase);
-               } else {
-                       iobase = dev->iobase + (i * 4);
-                       ret = subdev_8255_init(dev, s, NULL, iobase);
-               }
+               if (dev->mmio)
+                       ret = subdev_8255_mm_init(dev, s, NULL, i * I8255_SIZE);
+               else
+                       ret = subdev_8255_init(dev, s, NULL, i * I8255_SIZE);
                if (ret)
                        return ret;
        }
@@ -265,18 +246,11 @@ static int pci_8255_auto_attach(struct comedi_device *dev,
        return 0;
 }
 
-static void pci_8255_detach(struct comedi_device *dev)
-{
-       if (dev->mmio)
-               iounmap(dev->mmio);
-       comedi_pci_disable(dev);
-}
-
 static struct comedi_driver pci_8255_driver = {
        .driver_name    = "8255_pci",
        .module         = THIS_MODULE,
        .auto_attach    = pci_8255_auto_attach,
-       .detach         = pci_8255_detach,
+       .detach         = comedi_pci_detach,
 };
 
 static int pci_8255_pci_probe(struct pci_dev *dev,