Use the new comedi_legacy_detach() helper in the (*detach) to release the first I/O region requested by this driver. An additional I/O region is requested for some of the boards this driver supports. The iobase for that region is stored in the private data so that the (*detach) knows it needs to be released. Remove the extra cleanup in the (*attach) that releases the first region. For aesthetics, move the release of the additional region in the (*detach) so it follows the (*attach) order. Signed-off-by: H Hartley Sweeten <hsweeten@xxxxxxxxxxxxxxxxxxx> Cc: Ian Abbott <abbotti@xxxxxxxxx> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/staging/comedi/drivers/das1800.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/drivers/staging/comedi/drivers/das1800.c b/drivers/staging/comedi/drivers/das1800.c index 7676201..4aa2c50 100644 --- a/drivers/staging/comedi/drivers/das1800.c +++ b/drivers/staging/comedi/drivers/das1800.c @@ -1541,11 +1541,8 @@ static int das1800_attach(struct comedi_device *dev, unsigned long iobase2 = dev->iobase + IOBASE2; ret = __comedi_request_region(dev, iobase2, DAS1800_SIZE); - if (ret) { - release_region(dev->iobase, DAS1800_SIZE); - dev->iobase = 0; - return -EIO; - } + if (ret) + return ret; devpriv->iobase2 = iobase2; } @@ -1671,21 +1668,20 @@ static void das1800_detach(struct comedi_device *dev) { struct das1800_private *devpriv = dev->private; - if (dev->iobase) - release_region(dev->iobase, DAS1800_SIZE); if (dev->irq) free_irq(dev->irq, dev); if (devpriv) { - if (devpriv->iobase2) - release_region(devpriv->iobase2, DAS1800_SIZE); if (devpriv->dma0) free_dma(devpriv->dma0); if (devpriv->dma1) free_dma(devpriv->dma1); kfree(devpriv->ai_buf0); kfree(devpriv->ai_buf1); + if (devpriv->iobase2) + release_region(devpriv->iobase2, DAS1800_SIZE); } -}; + comedi_legacy_detach(dev); +} static struct comedi_driver das1800_driver = { .driver_name = "das1800", -- 1.8.1.4 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel