A dummy read of APCI3120_TIMER_MODE_REG resets the analog input FIFO. Introduce
a helper function to clarify this.

It's not necessary to do a dummy read of the FIFO (base + 0) before reseting it.
Remove the unnecessary dummy reads.

The APCI3120_TIMER_MODE_REG is a 16-bit register. This fixes a couple 8-bit 
reads.

Signed-off-by: H Hartley Sweeten <hswee...@visionengravers.com>
Cc: Ian Abbott <abbo...@mev.co.uk>
Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 .../comedi/drivers/addi-data/hwdrv_apci3120.c      | 30 +++++-----------------
 drivers/staging/comedi/drivers/addi_apci_3120.c    |  6 +++++
 2 files changed, 13 insertions(+), 23 deletions(-)

diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c 
b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c
index 44a3fcd..0673e4f 100644
--- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c
+++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c
@@ -84,8 +84,6 @@ This program is distributed in the hope that it will be 
useful, but WITHOUT ANY
 #define APCI3120_RD_STATUS             0x02
 #define APCI3120_RD_FIFO               0x00
 
-#define APCI3120_RESET_FIFO            0x0c
-
 /* nWrMode_Select */
 #define APCI3120_ENABLE_SCAN           0x8
 #define APCI3120_DISABLE_SCAN          (~APCI3120_ENABLE_SCAN)
@@ -261,11 +259,7 @@ static int apci3120_ai_insn_read(struct comedi_device *dev,
                switch (us_TmpValue) {
 
                case APCI3120_EOC_MODE:
-
-                       /*
-                        * Testing the interrupt flag and set the EOC bit 
Clears the FIFO
-                        */
-                       inw(dev->iobase + APCI3120_RESET_FIFO);
+                       apci3120_ai_reset_fifo(dev);
 
                        /*  Initialize the sequence array */
                        if (!apci3120_setup_chan_list(dev, s, 1,
@@ -321,16 +315,13 @@ static int apci3120_ai_insn_read(struct comedi_device 
*dev,
                                us_TmpValue = inw(dev->iobase + 0);
                                *data = us_TmpValue;
 
-                               inw(dev->iobase + APCI3120_RESET_FIFO);
+                               apci3120_ai_reset_fifo(dev);
                        }
 
                        break;
 
                case APCI3120_EOS_MODE:
-
-                       inw(dev->iobase + 0);
-                       /*  Clears the FIFO */
-                       inw(dev->iobase + APCI3120_RESET_FIFO);
+                       apci3120_ai_reset_fifo(dev);
 
                        if (!apci3120_setup_chan_list(dev, s,
                                        devpriv->ui_AiNbrofChannels,
@@ -430,8 +421,7 @@ static int apci3120_reset(struct comedi_device *dev)
        devpriv->ctrl = 0;
        outw(devpriv->ctrl, dev->iobase + APCI3120_CTRL_REG);
 
-       inw(dev->iobase + 0);   /* make a dummy read */
-       inb(dev->iobase + APCI3120_RESET_FIFO); /*  flush FIFO */
+       apci3120_ai_reset_fifo(dev);
        inw(dev->iobase + APCI3120_RD_STATUS);  /*  flush A/D status register */
 
        return 0;
@@ -461,8 +451,8 @@ static int apci3120_cancel(struct comedi_device *dev,
        /* DISABLE_ALL_INTERRUPT */
        outb(APCI3120_DISABLE_ALL_INTERRUPT,
                dev->iobase + APCI3120_WRITE_MODE_SELECT);
-       /* Flush FIFO */
-       inb(dev->iobase + APCI3120_RESET_FIFO);
+
+       apci3120_ai_reset_fifo(dev);
        inw(dev->iobase + APCI3120_RD_STATUS);
        devpriv->ui_DmaActualBuffer = 0;
 
@@ -559,9 +549,6 @@ static int apci3120_cyclic_ai(int mode,
        unsigned int dmalen1 = 0;
        unsigned int divisor0;
 
-       /* Resets the FIFO */
-       inb(dev->iobase + APCI3120_RESET_FIFO);
-
        devpriv->ai_running = 1;
 
        /*  clear software  registers */
@@ -572,10 +559,7 @@ static int apci3120_cyclic_ai(int mode,
        outl(APCI3120_CLEAR_WRITE_TC_INT,
             devpriv->amcc + APCI3120_AMCC_OP_REG_INTCSR);
 
-       /* Resets the FIFO */
-       /* BEGIN JK 07.05.04: Comparison between WIN32 and Linux driver */
-       inb(dev->iobase + APCI3120_RESET_FIFO);
-       /* END JK 07.05.04: Comparison between WIN32 and Linux driver */
+       apci3120_ai_reset_fifo(dev);
 
        devpriv->ui_DmaActualBuffer = 0;
 
diff --git a/drivers/staging/comedi/drivers/addi_apci_3120.c 
b/drivers/staging/comedi/drivers/addi_apci_3120.c
index 45add76..8dfee45 100644
--- a/drivers/staging/comedi/drivers/addi_apci_3120.c
+++ b/drivers/staging/comedi/drivers/addi_apci_3120.c
@@ -242,6 +242,12 @@ static void apci3120_exttrig_enable(struct comedi_device 
*dev, bool enable)
        outw(devpriv->ctrl, dev->iobase + APCI3120_CTRL_REG);
 }
 
+static void apci3120_ai_reset_fifo(struct comedi_device *dev)
+{
+       /* a dummy read of APCI3120_TIMER_MODE_REG resets the ai FIFO */
+       inw(dev->iobase + APCI3120_TIMER_MODE_REG);
+}
+
 #include "addi-data/hwdrv_apci3120.c"
 
 static void apci3120_dma_alloc(struct comedi_device *dev)
-- 
2.0.3

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to