From f9d208d3eaffcf4e014592fa3a004e8c3f4a4a13 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 9 Sep 2014 13:05:40 -0700 Subject: [PATCH] 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 Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/adl_pci9118.c | 11 +++++------ 1 file 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); } } -- 2.20.1