}
 
 static int dio_callback_4020(struct comedi_device *dev,
-                            int dir, int port, int data, unsigned long arg)
+                            int dir, int port, int data, unsigned long iobase)
 {
-       void __iomem *iobase = (void __iomem *)arg;
+       struct pcidas64_private *devpriv = dev->private;
 
        if (dir) {
-               writew(data, iobase + 2 * port);
+               writew(data, devpriv->main_iobase + iobase + 2 * port);
                return 0;
        }
-       return readw(iobase + 2 * port);
+       return readw(devpriv->main_iobase + iobase + 2 * port);
 }
 
 static int di_rbits(struct comedi_device *dev, struct comedi_subdevice *s,
        const struct pcidas64_board *thisboard = comedi_board(dev);
        struct pcidas64_private *devpriv = dev->private;
        struct comedi_subdevice *s;
-       void __iomem *dio_8255_iobase;
        int i;
        int ret;
 
        s = &dev->subdevices[4];
        if (thisboard->has_8255) {
                if (thisboard->layout == LAYOUT_4020) {
-                       dio_8255_iobase = devpriv->main_iobase + I8255_4020_REG;
                        ret = subdev_8255_init(dev, s, dio_callback_4020,
-                                              (unsigned long)dio_8255_iobase);
+                                              I8255_4020_REG);
                } else {
                        ret = subdev_8255_init(dev, s, dio_callback,
                                               DIO_8255_OFFSET);