[PATCH 02/15] staging: comedi: ni_daq_700: use 8253.h helpers for timer operations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Clarify the timer operations by using the helper functions in 8253.h.

For aesthetics, factor the "ai start conversion" code out of daq700_ai_rinsn().

Signed-off-by: H Hartley Sweeten <hsweeten@xxxxxxxxxxxxxxxxxxx>
Cc: Ian Abbott <abbotti@xxxxxxxxx>
Cc: Greg Kroah-Hartman <gregk@xxxxxxxxxxxxxxxxxxx>
---
 drivers/staging/comedi/drivers/ni_daq_700.c | 35 ++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/comedi/drivers/ni_daq_700.c b/drivers/staging/comedi/drivers/ni_daq_700.c
index 4d5cb5a..16b52b6 100644
--- a/drivers/staging/comedi/drivers/ni_daq_700.c
+++ b/drivers/staging/comedi/drivers/ni_daq_700.c
@@ -51,11 +51,18 @@
 #include <linux/delay.h>
 #include <linux/interrupt.h>
 
-#include "../comedidev.h"
-
 #include <pcmcia/cistpl.h>
 #include <pcmcia/ds.h>
 
+#include "../comedidev.h"
+
+#include "8253.h"
+
+/*
+ * Regsiter I/O map
+ */
+#define DAQ700_TIMER_BASE		0x08
+
 /* daqcard700 registers */
 #define DIO_W		0x04	/* WO 8bit */
 #define DIO_R		0x05	/* RO 8bit */
@@ -66,10 +73,6 @@
 #define STA_R2		0x01	/* RO 8bit */
 #define ADFIFO_R	0x02	/* RO 16bit */
 #define ADCLEAR_R	0x01	/* WO 8bit */
-#define CDA_R0		0x08	/* RW 8bit */
-#define CDA_R1		0x09	/* RW 8bit */
-#define CDA_R2		0x0A	/* RW 8bit */
-#define CMO_R		0x0B	/* RO 8bit */
 #define TIC_R		0x06	/* WO 8bit */
 /* daqcard700 modes */
 #define CMD_R3_DIFF     0x04    /* diff mode */
@@ -122,6 +125,18 @@ static int daq700_dio_insn_config(struct comedi_device *dev,
 	return insn->n;
 }
 
+static void daq700_ai_start_conv(struct comedi_device *dev)
+{
+	/*
+	 * Manually trigger an A/D conversion with a low-to-high
+	 * transition of OUT0.
+	 */
+	i8254_set_mode(dev->iobase + DAQ700_TIMER_BASE, 0,
+		       0, I8254_MODE0 | I8254_BINARY);	/* OUT0 low */
+	i8254_set_mode(dev->iobase + DAQ700_TIMER_BASE, 0,
+		       0, I8254_MODE1 | I8254_BINARY);	/* OUT0 high */
+}
+
 static int daq700_ai_eoc(struct comedi_device *dev,
 			 struct comedi_subdevice *s,
 			 struct comedi_insn *insn,
@@ -168,10 +183,7 @@ static int daq700_ai_rinsn(struct comedi_device *dev,
 
 	/* convert n samples */
 	for (n = 0; n < insn->n; n++) {
-		/* trigger conversion with out0 L to H */
-		outb(0x30, dev->iobase + CMO_R); /* mode 0 out0 L, from H */
-		/* mode 1 out0 H, L to H, start conversion */
-		outb(0x32, dev->iobase + CMO_R);
+		daq700_ai_start_conv(dev);
 
 		/* wait for conversion to end */
 		ret = comedi_timeout(dev, s, insn, daq700_ai_eoc, 0);
@@ -208,7 +220,8 @@ static void daq700_ai_config(struct comedi_device *dev,
 	outb(0x80, iobase + CMD_R1);	/* disable scanning, ADC to chan 0 */
 	outb(0x00, iobase + CMD_R2);	/* clear all bits */
 	outb(0x00, iobase + CMD_R3);	/* set +-10 range */
-	outb(0x32, iobase + CMO_R);	/* config counter mode1, out0 to H */
+	i8254_set_mode(iobase + DAQ700_TIMER_BASE, 0,
+		       0, I8254_MODE1 | I8254_BINARY);	/* OUT0 high */
 	outb(0x00, iobase + TIC_R);	/* clear counter interrupt */
 	outb(0x00, iobase + ADCLEAR_R);	/* clear the ADC FIFO */
 	inw(iobase + ADFIFO_R);		/* read 16bit junk from FIFO to clear */
-- 
1.9.3

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




[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux