mirror of https://gitee.com/openkylin/linux.git
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:
parent
fa3cb21910
commit
767308842b
|
@ -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)
|
||||||
|
|
|
@ -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[];
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue