staging: comedi: amplc_dio200: add register shift to board info
authorIan Abbott <abbotti@mev.co.uk>
Wed, 24 Oct 2012 15:48:04 +0000 (16:48 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 24 Oct 2012 22:25:21 +0000 (15:25 -0700)
Add `mainshift` member to `struct dio200_board` to hold the amount of
left-shift required for main register offsets.  This is 0 for all the
boards currently supported so it doesn't need initializing explicitly in
any current element of `dio200_boards[]`.  It will be non-zero for some
new boards to be supported by this driver.

Modify the register access functions `dio200_read8()` and
`dio200_write8()` to take the shift into account.

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/amplc_dio200.c

index ace218abae08b424d057618829d3899aa8c44d6e..2e6ea759914e47effb5ea09e3b8797e19696ca4c 100644 (file)
@@ -309,6 +309,7 @@ struct dio200_board {
        enum dio200_model model;
        enum dio200_layout_idx layout;
        unsigned char mainbar;
+       unsigned char mainshift;
        unsigned int mainsize;
 };
 
@@ -504,8 +505,10 @@ static inline bool is_isa_board(const struct dio200_board *board)
 static unsigned char dio200_read8(struct comedi_device *dev,
                                  unsigned int offset)
 {
+       const struct dio200_board *thisboard = comedi_board(dev);
        struct dio200_private *devpriv = dev->private;
 
+       offset <<= thisboard->mainshift;
        if (devpriv->io.regtype == io_regtype)
                return inb(devpriv->io.u.iobase + offset);
        else
@@ -518,8 +521,10 @@ static unsigned char dio200_read8(struct comedi_device *dev,
 static void dio200_write8(struct comedi_device *dev, unsigned int offset,
                          unsigned char val)
 {
+       const struct dio200_board *thisboard = comedi_board(dev);
        struct dio200_private *devpriv = dev->private;
 
+       offset <<= thisboard->mainshift;
        if (devpriv->io.regtype == io_regtype)
                outb(val, devpriv->io.u.iobase + offset);
        else