Commit 4761fb4e authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman

staging: comedi: ke_counter: define the register map

Define the register map for the board and remove the magic values.
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8fff5ac6
......@@ -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;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment