summaryrefslogtreecommitdiff
path: root/drivers/staging/comedi/drivers/ni_mio_cs.c
diff options
context:
space:
mode:
authorH Hartley Sweeten <hsweeten@visionengravers.com>2014-05-29 10:56:32 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-06-18 14:56:45 -0700
commit9c340ac934dbbfd46e776465b08391baac32d486 (patch)
tree35dab4ac9042f21f091f59a9ab5954f67a3e9f63 /drivers/staging/comedi/drivers/ni_mio_cs.c
parent9588fa8fe908c5501de5076de9a0c9d44ef737ec (diff)
staging: comedi: ni_stc.h: add read/write callbacks to struct ni_private
The {read,write}[bwl] macros used to access the registers in the ni_atmio, ni_mio_cs, and ni_pcimio drivers and the included ni_mio_common.c file all rely on a local variable having a specific name. They also require some of the ni_mio_common code to need a __maybe_unused tag on the devpriv local variable. Remove all the macros by converting them into private functions and storing the callbacks in the private data. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Reviewed-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi/drivers/ni_mio_cs.c')
-rw-r--r--drivers/staging/comedi/drivers/ni_mio_cs.c55
1 files changed, 43 insertions, 12 deletions
diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c
index e0945f72a869..d61baffb4bf0 100644
--- a/drivers/staging/comedi/drivers/ni_mio_cs.c
+++ b/drivers/staging/comedi/drivers/ni_mio_cs.c
@@ -143,12 +143,35 @@ static const struct ni_board_struct ni_boards[] = {
/* How we access registers */
-#define ni_writel(a, b) (outl((a), (b)+dev->iobase))
-#define ni_readl(a) (inl((a)+dev->iobase))
-#define ni_writew(a, b) (outw((a), (b)+dev->iobase))
-#define ni_readw(a) (inw((a)+dev->iobase))
-#define ni_writeb(a, b) (outb((a), (b)+dev->iobase))
-#define ni_readb(a) (inb((a)+dev->iobase))
+static uint8_t mio_cs_inb(struct comedi_device *dev, int reg)
+{
+ return inb(dev->iobase + reg);
+}
+
+static uint16_t mio_cs_inw(struct comedi_device *dev, int reg)
+{
+ return inw(dev->iobase + reg);
+}
+
+static uint32_t mio_cs_inl(struct comedi_device *dev, int reg)
+{
+ return inl(dev->iobase + reg);
+}
+
+static void mio_cs_outb(struct comedi_device *dev, uint8_t val, int reg)
+{
+ outb(val, dev->iobase + reg);
+}
+
+static void mio_cs_outw(struct comedi_device *dev, uint16_t val, int reg)
+{
+ outw(val, dev->iobase + reg);
+}
+
+static void mio_cs_outl(struct comedi_device *dev, uint32_t val, int reg)
+{
+ outl(val, dev->iobase + reg);
+}
/* How we access windowed registers */
@@ -163,10 +186,10 @@ static void mio_cs_win_out(struct comedi_device *dev, uint16_t data, int addr)
spin_lock_irqsave(&devpriv->window_lock, flags);
if (addr < 8) {
- ni_writew(data, addr * 2);
+ devpriv->writew(dev, data, addr * 2);
} else {
- ni_writew(addr, Window_Address);
- ni_writew(data, Window_Data);
+ devpriv->writew(dev, addr, Window_Address);
+ devpriv->writew(dev, data, Window_Data);
}
spin_unlock_irqrestore(&devpriv->window_lock, flags);
}
@@ -179,10 +202,10 @@ static uint16_t mio_cs_win_in(struct comedi_device *dev, int addr)
spin_lock_irqsave(&devpriv->window_lock, flags);
if (addr < 8) {
- ret = ni_readw(addr * 2);
+ ret = devpriv->readw(dev, addr * 2);
} else {
- ni_writew(addr, Window_Address);
- ret = ni_readw(Window_Data);
+ devpriv->writew(dev, addr, Window_Address);
+ ret = devpriv->readw(dev, Window_Data);
}
spin_unlock_irqrestore(&devpriv->window_lock, flags);
@@ -252,6 +275,14 @@ static int mio_cs_auto_attach(struct comedi_device *dev,
return ret;
devpriv = dev->private;
+
+ devpriv->readb = mio_cs_inb;
+ devpriv->readw = mio_cs_inw;
+ devpriv->readl = mio_cs_inl;
+ devpriv->writeb = mio_cs_outb;
+ devpriv->writew = mio_cs_outw;
+ devpriv->writel = mio_cs_outl;
+
devpriv->stc_writew = mio_cs_win_out;
devpriv->stc_readw = mio_cs_win_in;
devpriv->stc_writel = win_out2;