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@xxxxxxxxx> --- drivers/staging/comedi/drivers/amplc_dio200.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/staging/comedi/drivers/amplc_dio200.c b/drivers/staging/comedi/drivers/amplc_dio200.c index ace218a..2e6ea75 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200.c +++ b/drivers/staging/comedi/drivers/amplc_dio200.c @@ -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 -- 1.7.12.4 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel