Define the register map for the board and remove the magic values.

Signed-off-by: H Hartley Sweeten <hswee...@visionengravers.com>
Cc: Ian Abbott <abbo...@mev.co.uk>
Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 drivers/staging/comedi/drivers/ke_counter.c | 43 +++++++++++++++++++----------
 1 file changed, 28 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/comedi/drivers/ke_counter.c 
b/drivers/staging/comedi/drivers/ke_counter.c
index 53687fb..17cba90 100644
--- a/drivers/staging/comedi/drivers/ke_counter.c
+++ b/drivers/staging/comedi/drivers/ke_counter.c
@@ -34,6 +34,21 @@ Kolter Electronic PCI Counter Card.
 
 #include "../comedidev.h"
 
+/*
+ * PCI BAR 0 Register I/O map
+ */
+#define KE_RESET_REG(x)                        (0x00 + ((x) * 0x20))
+#define KE_LATCH_REG(x)                        (0x00 + ((x) * 0x20))
+#define KE_LSB_REG(x)                  (0x04 + ((x) * 0x20))
+#define KE_MID_REG(x)                  (0x08 + ((x) * 0x20))
+#define KE_MSB_REG(x)                  (0x0c + ((x) * 0x20))
+#define KE_SIGN_REG(x)                 (0x10 + ((x) * 0x20))
+#define KE_OSC_SEL_REG                 0xf8
+#define KE_OSC_SEL_EXT                 (1 << 0)
+#define KE_OSC_SEL_4MHZ                        (2 << 0)
+#define KE_OSC_SEL_20MHZ               (3 << 0)
+#define KE_DO_REG                      0xfc
+
 /*-- counter write ----------------------------------------------------------*/
 
 /* This should be used only for resetting the counters; maybe it is better
@@ -45,13 +60,13 @@ static int cnt_winsn(struct comedi_device *dev,
        int chan = CR_CHAN(insn->chanspec);
 
        outb((unsigned char)((data[0] >> 24) & 0xff),
-            dev->iobase + chan * 0x20 + 0x10);
+            dev->iobase + KE_SIGN_REG(chan));
        outb((unsigned char)((data[0] >> 16) & 0xff),
-            dev->iobase + chan * 0x20 + 0x0c);
+            dev->iobase + KE_MSB_REG(chan));
        outb((unsigned char)((data[0] >> 8) & 0xff),
-            dev->iobase + chan * 0x20 + 0x08);
+            dev->iobase + KE_MID_REG(chan));
        outb((unsigned char)((data[0] >> 0) & 0xff),
-            dev->iobase + chan * 0x20 + 0x04);
+            dev->iobase + KE_LSB_REG(chan));
 
        /* return the number of samples written */
        return 1;
@@ -67,11 +82,11 @@ static int cnt_rinsn(struct comedi_device *dev,
        int chan = CR_CHAN(insn->chanspec);
        int result;
 
-       a0 = inb(dev->iobase + chan * 0x20);
-       a1 = inb(dev->iobase + chan * 0x20 + 0x04);
-       a2 = inb(dev->iobase + chan * 0x20 + 0x08);
-       a3 = inb(dev->iobase + chan * 0x20 + 0x0c);
-       a4 = inb(dev->iobase + chan * 0x20 + 0x10);
+       a0 = inb(dev->iobase + KE_LATCH_REG(chan));
+       a1 = inb(dev->iobase + KE_LSB_REG(chan));
+       a2 = inb(dev->iobase + KE_MID_REG(chan));
+       a3 = inb(dev->iobase + KE_MSB_REG(chan));
+       a4 = inb(dev->iobase + KE_SIGN_REG(chan));
 
        result = (a1 + (a2 * 256) + (a3 * 65536));
        if (a4 > 0)
@@ -109,13 +124,11 @@ static int cnt_auto_attach(struct comedi_device *dev,
        s->insn_read = cnt_rinsn;
        s->insn_write = cnt_winsn;
 
-       /*  select 20MHz clock */
-       outb(3, dev->iobase + 248);
+       outb(KE_OSC_SEL_20MHZ, dev->iobase + KE_OSC_SEL_REG);
 
-       /*  reset all counters */
-       outb(0, dev->iobase);
-       outb(0, dev->iobase + 0x20);
-       outb(0, dev->iobase + 0x40);
+       outb(0, dev->iobase + KE_RESET_REG(0));
+       outb(0, dev->iobase + KE_RESET_REG(1));
+       outb(0, dev->iobase + KE_RESET_REG(2));
 
        return 0;
 }
-- 
1.8.5.2

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

Reply via email to