[PATCH 21/30] staging: comedi: addi_apci_3501: start defining i/o map

H Hartley Sweeten hsweeten at visionengravers.com
Wed Jan 23 19:43:35 UTC 2013


Create, and use, defines for the analog output and digital i/o
registers.

Signed-off-by: H Hartley Sweeten <hsweeten at visionengravers.com>
Cc: Ian Abbott <abbotti at mev.co.uk>
Cc: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
---
 .../comedi/drivers/addi-data/hwdrv_apci3501.c      | 24 +++--------------
 drivers/staging/comedi/drivers/addi_apci_3501.c    | 30 ++++++++++++++--------
 2 files changed, 23 insertions(+), 31 deletions(-)

diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.c
index f709853..bbdda4e 100644
--- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.c
+++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.c
@@ -46,19 +46,7 @@ You should also find the complete GPL in the COPYING file accompanying this sour
   +----------+-----------+------------------------------------------------+
 */
 
-/* Card Specific information */
-#define APCI3501_ADDRESS_RANGE		255
-
-#define APCI3501_DIGITAL_IP		0x50
-#define APCI3501_DIGITAL_OP		0x40
-#define APCI3501_ANALOG_OUTPUT		0x00
-
 /* Analog Output related Defines */
-#define APCI3501_AO_VOLT_MODE		0
-#define APCI3501_AO_PROG		4
-#define APCI3501_AO_TRIG_SCS		8
-#define UNIPOLAR			0
-#define BIPOLAR				1
 #define MODE0				0
 #define MODE1				1
 
@@ -117,9 +105,7 @@ static int i_APCI3501_ConfigAnalogOutput(struct comedi_device *dev,
 {
 	struct apci3501_private *devpriv = dev->private;
 
-	outl(data[0],
-		dev->iobase + APCI3501_ANALOG_OUTPUT +
-		APCI3501_AO_VOLT_MODE);
+	outl(data[0], dev->iobase + APCI3501_AO_CTRL_STATUS_REG);
 
 	if (data[0]) {
 		devpriv->b_InterruptMode = MODE1;
@@ -181,10 +167,10 @@ static int i_APCI3501_WriteAnalogOutput(struct comedi_device *dev,
 		printk("\nIn WriteAnalogOutput :: Not Valid Channel\n");
 	}			/*  end if((ul_Channel_no<0)||(ul_Channel_no>7)) */
 
-	ul_DAC_Ready = inl(dev->iobase + APCI3501_ANALOG_OUTPUT);
+	ul_DAC_Ready = inl(dev->iobase + APCI3501_AO_CTRL_STATUS_REG);
 
 	while (ul_DAC_Ready == 0) {
-		ul_DAC_Ready = inl(dev->iobase + APCI3501_ANALOG_OUTPUT);
+		ul_DAC_Ready = inl(dev->iobase + APCI3501_AO_CTRL_STATUS_REG);
 		ul_DAC_Ready = (ul_DAC_Ready >> 8) & 1;
 	}
 
@@ -194,9 +180,7 @@ static int i_APCI3501_WriteAnalogOutput(struct comedi_device *dev,
 			(unsigned int) ((unsigned int) (ul_Channel_no & 0xFF) |
 			(unsigned int) ((*data << 0x8) & 0x7FFFFF00L) |
 			(unsigned int) (ul_Polarity));
-		outl(ul_Command1,
-			dev->iobase + APCI3501_ANALOG_OUTPUT +
-			APCI3501_AO_PROG);
+		outl(ul_Command1, dev->iobase + APCI3501_AO_DATA_REG);
 	}
 
 	return insn->n;
diff --git a/drivers/staging/comedi/drivers/addi_apci_3501.c b/drivers/staging/comedi/drivers/addi_apci_3501.c
index d345daa..6207622 100644
--- a/drivers/staging/comedi/drivers/addi_apci_3501.c
+++ b/drivers/staging/comedi/drivers/addi_apci_3501.c
@@ -2,6 +2,17 @@
 #include "comedi_fc.h"
 #include "amcc_s5933.h"
 
+/*
+ * PCI bar 1 register I/O map
+ */
+#define APCI3501_AO_CTRL_STATUS_REG		0x00
+#define APCI3501_AO_CTRL_BIPOLAR		(1 << 0)
+#define APCI3501_AO_STATUS_READY		(1 << 8)
+#define APCI3501_AO_DATA_REG			0x04
+#define APCI3501_AO_TRIG_SCS_REG		0x08
+#define APCI3501_DO_REG				0x40
+#define APCI3501_DI_REG				0x50
+
 struct apci3501_private {
 	int i_IobaseAmcc;
 	struct task_struct *tsk_Current;
@@ -36,7 +47,7 @@ static int apci3501_di_insn_bits(struct comedi_device *dev,
 				 struct comedi_insn *insn,
 				 unsigned int *data)
 {
-	data[1] = inl(dev->iobase + APCI3501_DIGITAL_IP) & 0x3;
+	data[1] = inl(dev->iobase + APCI3501_DI_REG) & 0x3;
 
 	return insn->n;
 }
@@ -49,12 +60,12 @@ static int apci3501_do_insn_bits(struct comedi_device *dev,
 	unsigned int mask = data[0];
 	unsigned int bits = data[1];
 
-	s->state = inl(dev->iobase + APCI3501_DIGITAL_OP);
+	s->state = inl(dev->iobase + APCI3501_DO_REG);
 	if (mask) {
 		s->state &= ~mask;
 		s->state |= (bits & mask);
 
-		outl(s->state, dev->iobase + APCI3501_DIGITAL_OP);
+		outl(s->state, dev->iobase + APCI3501_DO_REG);
 	}
 
 	data[1] = s->state;
@@ -193,18 +204,17 @@ static int apci3501_reset(struct comedi_device *dev)
 	int i_Count = 0, i_temp = 0;
 	unsigned int ul_Command1 = 0, ul_Polarity, ul_DAC_Ready = 0;
 
-	outl(0x0, dev->iobase + APCI3501_DIGITAL_OP);
-	outl(1, dev->iobase + APCI3501_ANALOG_OUTPUT +
-		APCI3501_AO_VOLT_MODE);
+	outl(0x0, dev->iobase + APCI3501_DO_REG);
+	outl(1, dev->iobase + APCI3501_AO_CTRL_STATUS_REG);
 
 	ul_Polarity = 0x80000000;
 
 	for (i_Count = 0; i_Count <= 7; i_Count++) {
-		ul_DAC_Ready = inl(dev->iobase + APCI3501_ANALOG_OUTPUT);
+		ul_DAC_Ready = inl(dev->iobase + APCI3501_AO_CTRL_STATUS_REG);
 
 		while (ul_DAC_Ready == 0) {
 			ul_DAC_Ready =
-				inl(dev->iobase + APCI3501_ANALOG_OUTPUT);
+				inl(dev->iobase + APCI3501_AO_CTRL_STATUS_REG);
 			ul_DAC_Ready = (ul_DAC_Ready >> 8) & 1;
 		}
 
@@ -214,9 +224,7 @@ static int apci3501_reset(struct comedi_device *dev)
 				(unsigned int) ((unsigned int) (i_Count & 0xFF) |
 				(unsigned int) ((i_temp << 0x8) & 0x7FFFFF00L) |
 				(unsigned int) (ul_Polarity));
-			outl(ul_Command1,
-				dev->iobase + APCI3501_ANALOG_OUTPUT +
-				APCI3501_AO_PROG);
+			outl(ul_Command1, dev->iobase + APCI3501_AO_DATA_REG);
 		}
 	}
 
-- 
1.8.1.1.293.gfe73786




More information about the devel mailing list