summaryrefslogtreecommitdiffstats
path: root/drivers/staging/comedi
diff options
context:
space:
mode:
authorH Hartley Sweeten2014-09-09 22:05:40 +0200
committerGreg Kroah-Hartman2014-09-11 23:34:24 +0200
commitf9d208d3eaffcf4e014592fa3a004e8c3f4a4a13 (patch)
tree60ccdd98c488b75ab283c027e686a73742b8d28c /drivers/staging/comedi
parentstaging: comedi: adl_pci9118: change type of pci9118_dmabuf 'virt' member (diff)
downloadkernel-qcow2-linux-f9d208d3eaffcf4e014592fa3a004e8c3f4a4a13.tar.gz
kernel-qcow2-linux-f9d208d3eaffcf4e014592fa3a004e8c3f4a4a13.tar.xz
kernel-qcow2-linux-f9d208d3eaffcf4e014592fa3a004e8c3f4a4a13.zip
staging: comedi: adl_pci9118: fix interrupt_pci9118_ai_mode4_switch()
This function modifies the analog input acquistion programming after the first DMA cycle to continue a "mode4" acqusition. Part of this programs timer 0 based on the hardware address of the next buffer. When double buffering is not used for DMA the "next" buffer is always the first, and only, buffer. Add a parameter to this function to indicate what the "next" buffer actually is and fix the callers. 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>
Diffstat (limited to 'drivers/staging/comedi')
-rw-r--r--drivers/staging/comedi/drivers/adl_pci9118.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c
index 3e3405ccdede..7781d8786372 100644
--- a/drivers/staging/comedi/drivers/adl_pci9118.c
+++ b/drivers/staging/comedi/drivers/adl_pci9118.c
@@ -449,12 +449,11 @@ static int setup_channel_list(struct comedi_device *dev,
return 1; /* we can serve this with scan logic */
}
-static void interrupt_pci9118_ai_mode4_switch(struct comedi_device *dev)
+static void interrupt_pci9118_ai_mode4_switch(struct comedi_device *dev,
+ unsigned int next_buf)
{
struct pci9118_private *devpriv = dev->private;
- struct pci9118_dmabuf *dmabuf;
-
- dmabuf = &devpriv->dmabuf[1 - devpriv->dma_actbuf];
+ struct pci9118_dmabuf *dmabuf = &devpriv->dmabuf[next_buf];
devpriv->ai_cfg = PCI9118_AI_CFG_PDTRG | PCI9118_AI_CFG_PETRG |
PCI9118_AI_CFG_AM;
@@ -700,7 +699,7 @@ static void interrupt_pci9118_ai_dma(struct comedi_device *dev,
next_dma_buf = 1 - devpriv->dma_actbuf;
pci9118_amcc_setup_dma(dev, next_dma_buf);
if (devpriv->ai_do == 4)
- interrupt_pci9118_ai_mode4_switch(dev);
+ interrupt_pci9118_ai_mode4_switch(dev, next_dma_buf);
}
if (samplesinbuf) {
@@ -724,7 +723,7 @@ static void interrupt_pci9118_ai_dma(struct comedi_device *dev,
/* restart DMA if is not used double buffering */
pci9118_amcc_setup_dma(dev, 0);
if (devpriv->ai_do == 4)
- interrupt_pci9118_ai_mode4_switch(dev);
+ interrupt_pci9118_ai_mode4_switch(dev, 0);
}
}