Skip to content

Commit

Permalink
staging: comedi: ni_labpc: move DMA init out of the common attach
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
H Hartley Sweeten authored and Greg Kroah-Hartman committed Apr 23, 2013
1 parent fa3cb21 commit 7673088
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 26 deletions.
50 changes: 27 additions & 23 deletions drivers/staging/comedi/drivers/ni_labpc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1588,7 +1588,7 @@ static int labpc_eeprom_insn_read(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);
struct labpc_private *devpriv = dev->private;
Expand Down Expand Up @@ -1626,27 +1626,6 @@ int labpc_common_attach(struct comedi_device *dev,
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);
if (ret)
return ret;
Expand Down Expand Up @@ -1759,7 +1738,32 @@ static int labpc_attach(struct comedi_device *dev, struct comedi_devconfig *it)
if (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)
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/comedi/drivers/ni_labpc.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ struct labpc_private {
};

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);

extern const int labpc_1200_ai_gain_bits[];
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/comedi/drivers/ni_labpc_cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ static int labpc_auto_attach(struct comedi_device *dev,
return -ENOMEM;
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)
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/comedi/drivers/ni_labpc_pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ static int labpc_pci_auto_attach(struct comedi_device *dev,
return ret;
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)
Expand Down

0 comments on commit 7673088

Please sign in to comment.