aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/comedi/drivers/adv_pci_dio.c
diff options
context:
space:
mode:
authorH Hartley Sweeten <hartleys@visionengravers.com>2012-08-17 18:20:51 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-09-04 11:20:40 -0700
commitcb448d6572219efa4a6eb0c98f37125079b78549 (patch)
treeaa0fae6ddc0f8d66b9fd7019c58a27203d56be15 /drivers/staging/comedi/drivers/adv_pci_dio.c
parentstaging: comedi: adv_pci_dio: add the number of subdevices to the boardinfo (diff)
downloadlinux-dev-cb448d6572219efa4a6eb0c98f37125079b78549.tar.xz
linux-dev-cb448d6572219efa4a6eb0c98f37125079b78549.zip
staging: comedi: adv_pci_dio: simplify the 'detach'
Currently the 'detach' function in this driver walks thru the boardinfo in order to find the subdevice index for any sdio subdevices in order to call the subdev_8255_cleanup(). Then it goes thru all the subdevices to clean the s->private pointer. All the sdio subdevices are unique in that the s->type is COMEDI_SUBD_DIO. Use that to know when to call the cleanup for the 8255 subdevice. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi/drivers/adv_pci_dio.c')
-rw-r--r--drivers/staging/comedi/drivers/adv_pci_dio.c27
1 files changed, 3 insertions, 24 deletions
diff --git a/drivers/staging/comedi/drivers/adv_pci_dio.c b/drivers/staging/comedi/drivers/adv_pci_dio.c
index 2c3dbf06060b..4da0e7bd204f 100644
--- a/drivers/staging/comedi/drivers/adv_pci_dio.c
+++ b/drivers/staging/comedi/drivers/adv_pci_dio.c
@@ -1176,39 +1176,18 @@ static int pci_dio_attach_pci(struct comedi_device *dev,
static void pci_dio_detach(struct comedi_device *dev)
{
- const struct dio_boardtype *this_board = comedi_board(dev);
struct pci_dio_private *devpriv = dev->private;
struct pci_dev *pcidev = comedi_to_pci_dev(dev);
- int i, j;
struct comedi_subdevice *s;
- int subdev;
+ int i;
if (devpriv) {
if (devpriv->valid)
pci_dio_reset(dev);
- subdev = 0;
- for (i = 0; i < MAX_DI_SUBDEVS; i++) {
- if (this_board->sdi[i].chans)
- subdev++;
- }
- for (i = 0; i < MAX_DO_SUBDEVS; i++) {
- if (this_board->sdo[i].chans)
- subdev++;
- }
- for (i = 0; i < MAX_DIO_SUBDEVG; i++) {
- for (j = 0; j < this_board->sdio[i].regs; j++) {
- s = dev->subdevices + subdev;
- subdev_8255_cleanup(dev, s);
- subdev++;
- }
- }
- if (this_board->boardid.chans)
- subdev++;
- for (i = 0; i < MAX_8254_SUBDEVS; i++)
- if (this_board->s8254[i].chans)
- subdev++;
for (i = 0; i < dev->n_subdevices; i++) {
s = dev->subdevices + i;
+ if (s->type == COMEDI_SUBD_DIO)
+ subdev_8255_cleanup(dev, s);
s->private = NULL;
}
}