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@xxxxxxxxxxxxxxxxxxx> Cc: Ian Abbott <abbotti@xxxxxxxxx> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/staging/comedi/drivers/adv_pci_dio.c | 27 +++------------------------ 1 file 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 2c3dbf0..4da0e7b 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; } } -- 1.7.11 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel