diff options
Diffstat (limited to 'drivers')
30 files changed, 50 insertions, 154 deletions
diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 26c55569813..ce509d02c21 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -348,6 +348,8 @@ void comedi_buf_memcpy_from(struct comedi_async *async, unsigned int offset, int comedi_alloc_subdevices(struct comedi_device *, int); +void comedi_spriv_free(struct comedi_device *, int subdev_num); + int __comedi_request_region(struct comedi_device *, unsigned long start, unsigned long len); int comedi_request_region(struct comedi_device *, diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index 8a19f22d4ab..2a28f64dc74 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -86,6 +86,18 @@ int comedi_alloc_subdevices(struct comedi_device *dev, int num_subdevices) } EXPORT_SYMBOL_GPL(comedi_alloc_subdevices); +void comedi_spriv_free(struct comedi_device *dev, int subdev_num) +{ + struct comedi_subdevice *s; + + if (dev->subdevices && subdev_num < dev->n_subdevices) { + s = &dev->subdevices[subdev_num]; + kfree(s->private); + s->private = NULL; + } +} +EXPORT_SYMBOL_GPL(comedi_spriv_free); + static void cleanup_device(struct comedi_device *dev) { int i; diff --git a/drivers/staging/comedi/drivers/8255.c b/drivers/staging/comedi/drivers/8255.c index ec4dacff025..1d48aa602ec 100644 --- a/drivers/staging/comedi/drivers/8255.c +++ b/drivers/staging/comedi/drivers/8255.c @@ -334,12 +334,6 @@ int subdev_8255_init_irq(struct comedi_device *dev, struct comedi_subdevice *s, } EXPORT_SYMBOL_GPL(subdev_8255_init_irq); -void subdev_8255_cleanup(struct comedi_device *dev, struct comedi_subdevice *s) -{ - kfree(s->private); -} -EXPORT_SYMBOL_GPL(subdev_8255_cleanup); - /* Start of the 8255 standalone device @@ -397,7 +391,7 @@ static void dev_8255_detach(struct comedi_device *dev) spriv = s->private; release_region(spriv->iobase, _8255_SIZE); } - subdev_8255_cleanup(dev, s); + comedi_spriv_free(dev, i); } } diff --git a/drivers/staging/comedi/drivers/8255.h b/drivers/staging/comedi/drivers/8255.h index 1e589b4b8b7..0f6e7492b7d 100644 --- a/drivers/staging/comedi/drivers/8255.h +++ b/drivers/staging/comedi/drivers/8255.h @@ -32,7 +32,6 @@ int subdev_8255_init(struct comedi_device *dev, struct comedi_subdevice *s, int subdev_8255_init_irq(struct comedi_device *dev, struct comedi_subdevice *s, int (*io) (int, int, int, unsigned long), unsigned long iobase); -void subdev_8255_cleanup(struct comedi_device *dev, struct comedi_subdevice *s); void subdev_8255_interrupt(struct comedi_device *dev, struct comedi_subdevice *s); diff --git a/drivers/staging/comedi/drivers/8255_pci.c b/drivers/staging/comedi/drivers/8255_pci.c index de54ad3a64e..76dec96aeb2 100644 --- a/drivers/staging/comedi/drivers/8255_pci.c +++ b/drivers/staging/comedi/drivers/8255_pci.c @@ -241,20 +241,12 @@ static int pci_8255_auto_attach(struct comedi_device *dev, static void pci_8255_detach(struct comedi_device *dev) { - const struct pci_8255_boardinfo *board = comedi_board(dev); struct pci_8255_private *devpriv = dev->private; - struct comedi_subdevice *s; int i; - if (!board || !devpriv) - return; - if (dev->subdevices) { - for (i = 0; i < board->n_8255; i++) { - s = &dev->subdevices[i]; - subdev_8255_cleanup(dev, s); - } - } - if (devpriv->mmio_base) + for (i = 0; i < dev->n_subdevices; i++) + comedi_spriv_free(dev, i); + if (devpriv && devpriv->mmio_base) iounmap(devpriv->mmio_base); comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/addi_apci_1516.c b/drivers/staging/comedi/drivers/addi_apci_1516.c index e66ff4e05cd..ed01c56630b 100644 --- a/drivers/staging/comedi/drivers/addi_apci_1516.c +++ b/drivers/staging/comedi/drivers/addi_apci_1516.c @@ -203,8 +203,7 @@ static void apci1516_detach(struct comedi_device *dev) { if (dev->iobase) apci1516_reset(dev); - if (dev->subdevices) - addi_watchdog_cleanup(&dev->subdevices[2]); + comedi_spriv_free(dev, 2); comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/addi_apci_2032.c b/drivers/staging/comedi/drivers/addi_apci_2032.c index e5fa20aa7f2..b666637f61b 100644 --- a/drivers/staging/comedi/drivers/addi_apci_2032.c +++ b/drivers/staging/comedi/drivers/addi_apci_2032.c @@ -354,8 +354,7 @@ static void apci2032_detach(struct comedi_device *dev) free_irq(dev->irq, dev); if (dev->read_subdev) kfree(dev->read_subdev->private); - if (dev->subdevices) - addi_watchdog_cleanup(&dev->subdevices[1]); + comedi_spriv_free(dev, 1); comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/addi_apci_2200.c b/drivers/staging/comedi/drivers/addi_apci_2200.c index 8cad37ccf73..1cdc08d7979 100644 --- a/drivers/staging/comedi/drivers/addi_apci_2200.c +++ b/drivers/staging/comedi/drivers/addi_apci_2200.c @@ -130,8 +130,7 @@ static void apci2200_detach(struct comedi_device *dev) { if (dev->iobase) apci2200_reset(dev); - if (dev->subdevices) - addi_watchdog_cleanup(&dev->subdevices[2]); + comedi_spriv_free(dev, 2); comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/addi_watchdog.c b/drivers/staging/comedi/drivers/addi_watchdog.c index 375ab665e09..1666b5f510d 100644 --- a/drivers/staging/comedi/drivers/addi_watchdog.c +++ b/drivers/staging/comedi/drivers/addi_watchdog.c @@ -150,12 +150,6 @@ int addi_watchdog_init(struct comedi_subdevice *s, unsigned long iobase) } EXPORT_SYMBOL_GPL(addi_watchdog_init); -void addi_watchdog_cleanup(struct comedi_subdevice *s) -{ - kfree(s->private); -} -EXPORT_SYMBOL_GPL(addi_watchdog_cleanup); - static int __init addi_watchdog_module_init(void) { return 0; diff --git a/drivers/staging/comedi/drivers/addi_watchdog.h b/drivers/staging/comedi/drivers/addi_watchdog.h index f374a7bff44..83b47befa4d 100644 --- a/drivers/staging/comedi/drivers/addi_watchdog.h +++ b/drivers/staging/comedi/drivers/addi_watchdog.h @@ -5,6 +5,5 @@ void addi_watchdog_reset(unsigned long iobase); int addi_watchdog_init(struct comedi_subdevice *, unsigned long iobase); -void addi_watchdog_cleanup(struct comedi_subdevice *s); #endif diff --git a/drivers/staging/comedi/drivers/adv_pci_dio.c b/drivers/staging/comedi/drivers/adv_pci_dio.c index e98ddcc6ecf..f70c67471c1 100644 --- a/drivers/staging/comedi/drivers/adv_pci_dio.c +++ b/drivers/staging/comedi/drivers/adv_pci_dio.c @@ -1180,13 +1180,11 @@ static void pci_dio_detach(struct comedi_device *dev) if (devpriv->valid) pci_dio_reset(dev); } - if (dev->subdevices) { - 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; - } + for (i = 0; i < dev->n_subdevices; i++) { + s = &dev->subdevices[i]; + if (s->type == COMEDI_SUBD_DIO) + comedi_spriv_free(dev, i); + s->private = NULL; /* some private data is static */ } comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/aio_aio12_8.c b/drivers/staging/comedi/drivers/aio_aio12_8.c index e37d4a8f924..a3ca5c6b6a0 100644 --- a/drivers/staging/comedi/drivers/aio_aio12_8.c +++ b/drivers/staging/comedi/drivers/aio_aio12_8.c @@ -261,8 +261,7 @@ static int aio_aio12_8_attach(struct comedi_device *dev, static void aio_aio12_8_detach(struct comedi_device *dev) { - if (dev->subdevices) - subdev_8255_cleanup(dev, &dev->subdevices[2]); + comedi_spriv_free(dev, 2); if (dev->iobase) release_region(dev->iobase, 24); } diff --git a/drivers/staging/comedi/drivers/amplc_dio200_common.c b/drivers/staging/comedi/drivers/amplc_dio200_common.c index 04a798e9d01..3403e5ccfa9 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200_common.c +++ b/drivers/staging/comedi/drivers/amplc_dio200_common.c @@ -595,17 +595,6 @@ dio200_subdev_intr_init(struct comedi_device *dev, struct comedi_subdevice *s, } /* - * This function cleans up an 'INTERRUPT' subdevice. - */ -static void -dio200_subdev_intr_cleanup(struct comedi_device *dev, - struct comedi_subdevice *s) -{ - struct dio200_subdev_intr *subpriv = s->private; - kfree(subpriv); -} - -/* * Interrupt service routine. */ static irqreturn_t dio200_interrupt(int irq, void *d) @@ -938,17 +927,6 @@ dio200_subdev_8254_init(struct comedi_device *dev, struct comedi_subdevice *s, } /* - * This function cleans up an '8254' counter subdevice. - */ -static void -dio200_subdev_8254_cleanup(struct comedi_device *dev, - struct comedi_subdevice *s) -{ - struct dio200_subdev_intr *subpriv = s->private; - kfree(subpriv); -} - -/* * This function sets I/O directions for an '8255' DIO subdevice. */ static void dio200_subdev_8255_set_dir(struct comedi_device *dev, @@ -1065,17 +1043,6 @@ static int dio200_subdev_8255_init(struct comedi_device *dev, } /* - * This function cleans up an '8255' DIO subdevice. - */ -static void dio200_subdev_8255_cleanup(struct comedi_device *dev, - struct comedi_subdevice *s) -{ - struct dio200_subdev_8255 *subpriv = s->private; - - kfree(subpriv); -} - -/* * Handle 'insn_read' for a timer subdevice. */ static int dio200_subdev_timer_read(struct comedi_device *dev, @@ -1178,15 +1145,6 @@ static int dio200_subdev_timer_init(struct comedi_device *dev, return 0; } -/* - * This function cleans up a timer subdevice. - */ -static void dio200_subdev_timer_cleanup(struct comedi_device *dev, - struct comedi_subdevice *s) -{ - /* Nothing to do. */ -} - void amplc_dio200_set_enhance(struct comedi_device *dev, unsigned char val) { dio200_write8(dev, DIO200_ENHANCE, val); @@ -1282,20 +1240,13 @@ void amplc_dio200_common_detach(struct comedi_device *dev) if (dev->subdevices) { layout = dio200_board_layout(thisboard); for (n = 0; n < dev->n_subdevices; n++) { - struct comedi_subdevice *s = &dev->subdevices[n]; switch (layout->sdtype[n]) { case sd_8254: - dio200_subdev_8254_cleanup(dev, s); - break; case sd_8255: - dio200_subdev_8255_cleanup(dev, s); - break; case sd_intr: - dio200_subdev_intr_cleanup(dev, s); + comedi_spriv_free(dev, n); break; case sd_timer: - dio200_subdev_timer_cleanup(dev, s); - break; default: break; } diff --git a/drivers/staging/comedi/drivers/amplc_pc236.c b/drivers/staging/comedi/drivers/amplc_pc236.c index e789383ce49..0f1a0f806cc 100644 --- a/drivers/staging/comedi/drivers/amplc_pc236.c +++ b/drivers/staging/comedi/drivers/amplc_pc236.c @@ -545,8 +545,7 @@ static void pc236_detach(struct comedi_device *dev) pc236_intr_disable(dev); if (dev->irq) free_irq(dev->irq, dev); - if (dev->subdevices) - subdev_8255_cleanup(dev, &dev->subdevices[0]); + comedi_spriv_free(dev, 0); if (is_isa_board(thisboard)) { if (dev->iobase) release_region(dev->iobase, PC236_IO_SIZE); diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index b6e4af444ef..49200fbd60b 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -2832,11 +2832,9 @@ static int pci230_auto_attach(struct comedi_device *dev, static void pci230_detach(struct comedi_device *dev) { - const struct pci230_board *thisboard = comedi_board(dev); struct pci_dev *pcidev = comedi_to_pci_dev(dev); - if (dev->subdevices && thisboard->have_dio) - subdev_8255_cleanup(dev, &dev->subdevices[2]); + comedi_spriv_free(dev, 2); if (dev->irq) free_irq(dev->irq, dev); comedi_pci_disable(dev); diff --git a/drivers/staging/comedi/drivers/cb_pcidas.c b/drivers/staging/comedi/drivers/cb_pcidas.c index cdbeb0833d0..53dd298d2b5 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas.c +++ b/drivers/staging/comedi/drivers/cb_pcidas.c @@ -1608,8 +1608,7 @@ static void cb_pcidas_detach(struct comedi_device *dev) } if (dev->irq) free_irq(dev->irq, dev); - if (dev->subdevices) - subdev_8255_cleanup(dev, &dev->subdevices[2]); + comedi_spriv_free(dev, 2); comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index cfcde124143..c3e5495b4f0 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -4163,8 +4163,7 @@ static void detach(struct comedi_device *dev) devpriv->ao_dma_desc_bus_addr); } } - if (dev->subdevices) - subdev_8255_cleanup(dev, &dev->subdevices[4]); + comedi_spriv_free(dev, 4); comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/cb_pcidda.c b/drivers/staging/comedi/drivers/cb_pcidda.c index 2da6bd663af..f9b459888b8 100644 --- a/drivers/staging/comedi/drivers/cb_pcidda.c +++ b/drivers/staging/comedi/drivers/cb_pcidda.c @@ -399,10 +399,8 @@ static int cb_pcidda_auto_attach(struct comedi_device *dev, static void cb_pcidda_detach(struct comedi_device *dev) { - if (dev->subdevices) { - subdev_8255_cleanup(dev, &dev->subdevices[1]); - subdev_8255_cleanup(dev, &dev->subdevices[2]); - } + comedi_spriv_free(dev, 1); + comedi_spriv_free(dev, 2); comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/cb_pcimdda.c b/drivers/staging/comedi/drivers/cb_pcimdda.c index f7d1136be65..88f03ae6f3e 100644 --- a/drivers/staging/comedi/drivers/cb_pcimdda.c +++ b/drivers/staging/comedi/drivers/cb_pcimdda.c @@ -199,8 +199,7 @@ static int cb_pcimdda_auto_attach(struct comedi_device *dev, static void cb_pcimdda_detach(struct comedi_device *dev) { - if (dev->subdevices) - subdev_8255_cleanup(dev, &dev->subdevices[1]); + comedi_spriv_free(dev, 1); comedi_pci_disable(dev); } diff --git a/drivers/staging/comedi/drivers/daqboard2000.c b/drivers/staging/comedi/drivers/daqboard2000.c index ed3d6e51081..c1f14f0b6c1 100644 --- a/drivers/staging/comedi/drivers/daqboard2000.c +++ b/drivers/staging/comedi/drivers/daqboard2000.c @@ -766,8 +766,7 @@ static void daqboard2000_detach(struct comedi_device *dev) { struct daqboard2000_private *devpriv = dev->private; - if (dev->subdevices) - subdev_8255_cleanup(dev, &dev->subdevices[2]); + comedi_spriv_free(dev, 2); if (dev->irq) free_irq(dev->irq, dev); if (devpriv) { diff --git a/drivers/staging/comedi/drivers/das08.c b/drivers/staging/comedi/drivers/das08.c index 9823aa06787..ba12c1d605f 100644 --- a/drivers/staging/comedi/drivers/das08.c +++ b/drivers/staging/comedi/drivers/das08.c @@ -568,8 +568,7 @@ EXPORT_SYMBOL_GPL(das08_common_attach); void das08_common_detach(struct comedi_device *dev) { - if (dev->subdevices) - subdev_8255_cleanup(dev, &dev->subdevices[4]); + comedi_spriv_free(dev, 4); } EXPORT_SYMBOL_GPL(das08_common_detach); diff --git a/drivers/staging/comedi/drivers/das16.c b/drivers/staging/comedi/drivers/das16.c index 50902ccb519..c2b5015448a 100644 --- a/drivers/staging/comedi/drivers/das16.c +++ b/drivers/staging/comedi/drivers/das16.c @@ -1339,8 +1339,7 @@ static void das16_detach(struct comedi_device *dev) struct das16_private_struct *devpriv = dev->private; das16_reset(dev); - if (dev->subdevices) - subdev_8255_cleanup(dev, &dev->subdevices[4]); + comedi_spriv_free(dev, 4); if (devpriv) { int i; for (i = 0; i < 2; i++) { diff --git a/drivers/staging/comedi/drivers/das16m1.c b/drivers/staging/comedi/drivers/das16m1.c index 77f213b4450..91aba224beb 100644 --- a/drivers/staging/comedi/drivers/das16m1.c +++ b/drivers/staging/comedi/drivers/das16m1.c @@ -669,8 +669,7 @@ static int das16m1_attach(struct comedi_device *dev, static void das16m1_detach(struct comedi_device *dev) { - if (dev->subdevices) - subdev_8255_cleanup(dev, &dev->subdevices[3]); + comedi_spriv_free(dev, 3); if (dev->irq) free_irq(dev->irq, dev); if (dev->iobase) { diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 013392cfe2a..3f71f0f54d3 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -730,6 +730,7 @@ static int ni_65xx_auto_attach(struct comedi_device *dev, static void ni_65xx_detach(struct comedi_device *dev) { struct ni_65xx_private *devpriv = dev->private; + int i; if (devpriv && devpriv->mite && devpriv->mite->daq_io_addr) { writeb(0x00, @@ -738,15 +739,9 @@ static void ni_65xx_detach(struct comedi_device *dev) } if (dev->irq) free_irq(dev->irq, dev); + for (i = 0; i < dev->n_subdevices; ++i) + comedi_spriv_free(dev, i); if (devpriv) { - struct comedi_subdevice *s; - unsigned i; - - for (i = 0; i < dev->n_subdevices; ++i) { - s = &dev->subdevices[i]; - kfree(s->private); - s->private = NULL; - } if (devpriv->mite) { mite_unsetup(devpriv->mite); mite_free(devpriv->mite); diff --git a/drivers/staging/comedi/drivers/ni_atmio16d.c b/drivers/staging/comedi/drivers/ni_atmio16d.c index 4bfe6c8d0cc..4fb36cd833d 100644 --- a/drivers/staging/comedi/drivers/ni_atmio16d.c +++ b/drivers/staging/comedi/drivers/ni_atmio16d.c @@ -767,13 +767,7 @@ static int atmio16d_attach(struct comedi_device *dev, static void atmio16d_detach(struct comedi_device *dev) { - const struct atmio16_board_t *board = comedi_board(dev); - struct comedi_subdevice *s; - - if (dev->subdevices && board->has_8255) { - s = &dev->subdevices[3]; - subdev_8255_cleanup(dev, s); - } + comedi_spriv_free(dev, 3); if (dev->irq) free_irq(dev->irq, dev); reset_atmio16d(dev); diff --git a/drivers/staging/comedi/drivers/ni_daq_dio24.c b/drivers/staging/comedi/drivers/ni_daq_dio24.c index c17ffe3cf5c..9b7805fda93 100644 --- a/drivers/staging/comedi/drivers/ni_daq_dio24.c +++ b/drivers/staging/comedi/drivers/ni_daq_dio24.c @@ -73,8 +73,7 @@ static int dio24_auto_attach(struct comedi_device *dev, static void dio24_detach(struct comedi_device *dev) { - if (dev->subdevices) - subdev_8255_cleanup(dev, &dev->subdevices[0]); + comedi_spriv_free(dev, 0); comedi_pcmcia_disable(dev); } diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 19961424d1d..d48511f0cac 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -1860,14 +1860,10 @@ void labpc_common_detach(struct comedi_device *dev) { const struct labpc_boardinfo *board = comedi_board(dev); struct labpc_private *devpriv = dev->private; - struct comedi_subdevice *s; if (!board) return; - if (dev->subdevices) { - s = &dev->subdevices[2]; - subdev_8255_cleanup(dev, s); - } + comedi_spriv_free(dev, 2); #ifdef CONFIG_ISA_DMA_API /* only free stuff if it has been allocated by _attach */ kfree(devpriv->dma_buffer); diff --git a/drivers/staging/comedi/drivers/ni_mio_common.c b/drivers/staging/comedi/drivers/ni_mio_common.c index 0f8d05c3539..a46d579016d 100644 --- a/drivers/staging/comedi/drivers/ni_mio_common.c +++ b/drivers/staging/comedi/drivers/ni_mio_common.c @@ -4068,19 +4068,14 @@ static int ni_serial_sw_readwrite8(struct comedi_device *dev, static void mio_common_detach(struct comedi_device *dev) { - const struct ni_board_struct *board = comedi_board(dev); struct ni_private *devpriv = dev->private; - struct comedi_subdevice *s; if (devpriv) { if (devpriv->counter_dev) { ni_gpct_device_destroy(devpriv->counter_dev); } } - if (dev->subdevices && board->has_8255) { - s = &dev->subdevices[NI_8255_DIO_SUBDEV]; - subdev_8255_cleanup(dev, s); - } + comedi_spriv_free(dev, NI_8255_DIO_SUBDEV); } static void init_ao_67xx(struct comedi_device *dev, struct comedi_subdevice *s) diff --git a/drivers/staging/comedi/drivers/pcl724.c b/drivers/staging/comedi/drivers/pcl724.c index 2821ead2772..0f5a4821cf5 100644 --- a/drivers/staging/comedi/drivers/pcl724.c +++ b/drivers/staging/comedi/drivers/pcl724.c @@ -170,13 +170,10 @@ static int pcl724_attach(struct comedi_device *dev, struct comedi_devconfig *it) static void pcl724_detach(struct comedi_device *dev) { const struct pcl724_board *board = comedi_board(dev); - struct comedi_subdevice *s; int i; - for (i = 0; i < dev->n_subdevices; i++) { - s = &dev->subdevices[i]; - subdev_8255_cleanup(dev, s); - } + for (i = 0; i < dev->n_subdevices; i++) + comedi_spriv_free(dev, i); #ifdef PCL724_IRQ if (dev->irq) free_irq(dev->irq, dev); diff --git a/drivers/staging/comedi/drivers/pcm3724.c b/drivers/staging/comedi/drivers/pcm3724.c index 7f9266cefc1..19742d1ba56 100644 --- a/drivers/staging/comedi/drivers/pcm3724.c +++ b/drivers/staging/comedi/drivers/pcm3724.c @@ -252,15 +252,10 @@ static int pcm3724_attach(struct comedi_device *dev, static void pcm3724_detach(struct comedi_device *dev) { - struct comedi_subdevice *s; int i; - if (dev->subdevices) { - for (i = 0; i < dev->n_subdevices; i++) { - s = &dev->subdevices[i]; - subdev_8255_cleanup(dev, s); - } - } + for (i = 0; i < dev->n_subdevices; i++) + comedi_spriv_free(dev, i); if (dev->iobase) release_region(dev->iobase, PCM3724_SIZE); } |