Skip to content

Commit

Permalink
staging: comedi: gsc_hpdi: don't store physical base addresses
Browse files Browse the repository at this point in the history
In `struct hpdi_private`, the `plx9080_phys_iobase` and
`hpdi_phys_iobase` hold the physical memory addresses from the PCI
BARs used by this driver.  The physical addresses are only really needed
when ioremapping the resources when the device is being attached by
`hpdi_auto_attach()`.  A non-zero value of the `hpdi_phys_iobase` is
also used to indicate that a call to `comedi_pci_enable()` was
successful so that `comedi_pci_disable()` should be called when the
device is detached by `hpdi_detach()`.

Remove the `plx9080_phys_iobase` and `hpdi_phys_iobase` members and use
`dev->iobase` as a flag to indicate whether `comedi_pci_disable()` needs
to be called by `hpdi_detach()`.

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Ian Abbott authored and Greg Kroah-Hartman committed Nov 1, 2012
1 parent fd67ad4 commit 594985d
Showing 1 changed file with 7 additions and 15 deletions.
22 changes: 7 additions & 15 deletions drivers/staging/comedi/drivers/gsc_hpdi.c
Original file line number Diff line number Diff line change
Expand Up @@ -213,9 +213,6 @@ static inline struct hpdi_board *board(const struct comedi_device *dev)
}

struct hpdi_private {
/* base addresses (physical) */
resource_size_t plx9080_phys_iobase;
resource_size_t hpdi_phys_iobase;
/* base addresses (ioremapped) */
void __iomem *plx9080_iobase;
void __iomem *hpdi_iobase;
Expand Down Expand Up @@ -506,23 +503,18 @@ static int __devinit hpdi_auto_attach(struct comedi_device *dev,
"failed enable PCI device and request regions\n");
return -EIO;
}
dev->iobase = 1; /* the "detach" needs this */
pci_set_master(pcidev);

/* Initialize dev->board_name */
dev->board_name = board(dev)->name;

devpriv->plx9080_phys_iobase =
pci_resource_start(pcidev, PLX9080_BADDRINDEX);
devpriv->hpdi_phys_iobase =
pci_resource_start(pcidev, HPDI_BADDRINDEX);

/* remap, won't work with 2.0 kernels but who cares */
devpriv->plx9080_iobase = ioremap(devpriv->plx9080_phys_iobase,
pci_resource_len(pcidev,
PLX9080_BADDRINDEX));
devpriv->plx9080_iobase =
ioremap(pci_resource_start(pcidev, PLX9080_BADDRINDEX),
pci_resource_len(pcidev, PLX9080_BADDRINDEX));
devpriv->hpdi_iobase =
ioremap(devpriv->hpdi_phys_iobase,
pci_resource_len(pcidev, HPDI_BADDRINDEX));
ioremap(pci_resource_start(pcidev, HPDI_BADDRINDEX),
pci_resource_len(pcidev, HPDI_BADDRINDEX));
if (!devpriv->plx9080_iobase || !devpriv->hpdi_iobase) {
dev_warn(dev->class_dev, "failed to remap io memory\n");
return -ENOMEM;
Expand Down Expand Up @@ -606,7 +598,7 @@ static void hpdi_detach(struct comedi_device *dev)
NUM_DMA_DESCRIPTORS,
devpriv->dma_desc,
devpriv->dma_desc_phys_addr);
if (devpriv->hpdi_phys_iobase)
if (dev->iobase)
comedi_pci_disable(pcidev);
}
}
Expand Down

0 comments on commit 594985d

Please sign in to comment.