staging: comedi: ni_labpc: move DMA init out of the common attach

Only the ISA versions of the LabPC boards support DMA. Move the DMA
initialization out of the labpc_common_attach() and put it in the
ISA specific labpc_attach() function.

Remove the 'dma_chan' parameter from labpc_common_attach().

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
H Hartley Sweeten 2013-04-22 12:33:30 -07:00 committed by Greg Kroah-Hartman
parent fa3cb21910
commit 767308842b
4 changed files with 30 additions and 26 deletions

View File

@ -1588,7 +1588,7 @@ static int labpc_eeprom_insn_read(struct comedi_device *dev,
} }
int labpc_common_attach(struct comedi_device *dev, int labpc_common_attach(struct comedi_device *dev,
unsigned int irq, unsigned int dma_chan) unsigned int irq)
{ {
const struct labpc_boardinfo *board = comedi_board(dev); const struct labpc_boardinfo *board = comedi_board(dev);
struct labpc_private *devpriv = dev->private; struct labpc_private *devpriv = dev->private;
@ -1626,27 +1626,6 @@ int labpc_common_attach(struct comedi_device *dev,
dev->irq = irq; dev->irq = irq;
} }
#ifdef CONFIG_ISA_DMA_API
if (dev->irq && (dma_chan == 1 || dma_chan == 3)) {
devpriv->dma_buffer = kmalloc(dma_buffer_size,
GFP_KERNEL | GFP_DMA);
if (devpriv->dma_buffer) {
ret = request_dma(dma_chan, dev->board_name);
if (ret == 0) {
unsigned long dma_flags;
devpriv->dma_chan = dma_chan;
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(devpriv->dma_buffer);
}
}
}
#endif
ret = comedi_alloc_subdevices(dev, 5); ret = comedi_alloc_subdevices(dev, 5);
if (ret) if (ret)
return ret; return ret;
@ -1759,7 +1738,32 @@ static int labpc_attach(struct comedi_device *dev, struct comedi_devconfig *it)
if (ret) if (ret)
return ret; return ret;
return labpc_common_attach(dev, irq, dma_chan); ret = labpc_common_attach(dev, irq);
if (ret)
return ret;
#ifdef CONFIG_ISA_DMA_API
if (dev->irq && (dma_chan == 1 || dma_chan == 3)) {
devpriv->dma_buffer = kmalloc(dma_buffer_size,
GFP_KERNEL | GFP_DMA);
if (devpriv->dma_buffer) {
ret = request_dma(dma_chan, dev->board_name);
if (ret == 0) {
unsigned long dma_flags;
devpriv->dma_chan = dma_chan;
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(devpriv->dma_buffer);
}
}
}
#endif
return 0;
} }
void labpc_detach(struct comedi_device *dev) void labpc_detach(struct comedi_device *dev)

View File

@ -101,7 +101,7 @@ struct labpc_private {
}; };
int labpc_common_attach(struct comedi_device *dev, int labpc_common_attach(struct comedi_device *dev,
unsigned int irq, unsigned int dma); unsigned int irq);
void labpc_common_detach(struct comedi_device *dev); void labpc_common_detach(struct comedi_device *dev);
extern const int labpc_1200_ai_gain_bits[]; extern const int labpc_1200_ai_gain_bits[];

View File

@ -111,7 +111,7 @@ static int labpc_auto_attach(struct comedi_device *dev,
return -ENOMEM; return -ENOMEM;
dev->private = devpriv; dev->private = devpriv;
return labpc_common_attach(dev, link->irq, 0); return labpc_common_attach(dev, link->irq);
} }
static void labpc_detach(struct comedi_device *dev) static void labpc_detach(struct comedi_device *dev)

View File

@ -92,7 +92,7 @@ static int labpc_pci_auto_attach(struct comedi_device *dev,
return ret; return ret;
dev->iobase = (unsigned long)devpriv->mite->daq_io_addr; dev->iobase = (unsigned long)devpriv->mite->daq_io_addr;
return labpc_common_attach(dev, mite_irq(devpriv->mite), 0); return labpc_common_attach(dev, mite_irq(devpriv->mite));
} }
static void labpc_pci_detach(struct comedi_device *dev) static void labpc_pci_detach(struct comedi_device *dev)