diff options
author | Ian Abbott <abbotti@mev.co.uk> | 2013-06-28 17:09:20 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-07-23 14:27:51 -0700 |
commit | 86aff4bb11eb721b9be40dcd51f7571fb00edcde (patch) | |
tree | dc24e2c6986872d8a349993d5bce0557b73d8376 /drivers/staging/comedi/drivers/ni_labpc.c | |
parent | 9a6386623fc8a67f792b9df56acbd8758e1aa93d (diff) |
staging: comedi: ni_labpc: migrate DMA channel init & free
Migrate the code for requesting an ISA DMA channel and a DMA buffer, and
the code for freeing them into two new functions in the
"ni_labpc_isadma" module: `labpc_init_dma_chan()` and
`labpc_free_dma_chan()`. Dummy inline functions are provided in
"ni_labpc_isadma.h" if the "ni_labpc_isadma" module is not being built.
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi/drivers/ni_labpc.c')
-rw-r--r-- | drivers/staging/comedi/drivers/ni_labpc.c | 35 |
1 files changed, 5 insertions, 30 deletions
diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index d1d22a19f022..ab1773e1fbcc 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -1708,31 +1708,8 @@ static int labpc_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (ret) return ret; -#ifdef CONFIG_ISA_DMA_API - if (dev->irq && (dma_chan == 1 || dma_chan == 3)) { - void *dma_buffer = kmalloc(dma_buffer_size, - GFP_KERNEL | GFP_DMA); - - if (dma_buffer) { - ret = request_dma(dma_chan, dev->board_name); - if (ret == 0) { - unsigned long dma_flags; - - devpriv->dma_buffer = dma_buffer; - devpriv->dma_chan = dma_chan; - devpriv->dma_addr = - virt_to_bus(devpriv->dma_buffer); - - dma_flags = claim_dma_lock(); - disable_dma(devpriv->dma_chan); - set_dma_mode(devpriv->dma_chan, DMA_MODE_READ); - release_dma_lock(dma_flags); - } else { - kfree(dma_buffer); - } - } - } -#endif + if (dev->irq) + labpc_init_dma_chan(dev, dma_chan); return 0; } @@ -1741,11 +1718,9 @@ static void labpc_detach(struct comedi_device *dev) { struct labpc_private *devpriv = dev->private; - if (devpriv) { - kfree(devpriv->dma_buffer); - if (devpriv->dma_chan) - free_dma(devpriv->dma_chan); - } + if (devpriv) + labpc_free_dma_chan(dev); + comedi_legacy_detach(dev); } |