}
 
        DPRINTK("comedi%i subd %d buffer resized to %i bytes\n",
-               dev->minor, (int)(s - dev->subdevices), async->prealloc_bufsz);
+               dev->minor, s->index, async->prealloc_bufsz);
        return 0;
 }
 
 
        s = comedi_read_subdevice(info);
        if (s)
-               devinfo.read_subdevice = s - dev->subdevices;
+               devinfo.read_subdevice = s->index;
        else
                devinfo.read_subdevice = -1;
 
        s = comedi_write_subdevice(info);
        if (s)
-               devinfo.write_subdevice = s - dev->subdevices;
+               devinfo.write_subdevice = s->index;
        else
                devinfo.write_subdevice = -1;
 
        s->minor = i;
        csdev = device_create(comedi_class, dev->class_dev,
                              MKDEV(COMEDI_MAJOR, i), NULL, "comedi%i_subd%i",
-                             dev->minor, (int)(s - dev->subdevices));
+                             dev->minor, s->index);
        if (!IS_ERR(csdev))
                s->class_dev = csdev;
        dev_set_drvdata(csdev, info);
 
 #define INTR_PORTS_PER_SUBDEV (INTR_CHANS_PER_ASIC/CHANS_PER_PORT)
 #define MAX_DIO_CHANS   (PORTS_PER_ASIC*1*CHANS_PER_PORT)
 #define MAX_ASICS       (MAX_DIO_CHANS/CHANS_PER_ASIC)
-#define SDEV_NO ((int)(s - dev->subdevices))
 #define CALC_N_DIO_SUBDEVS(nchans) ((nchans)/MAX_CHANS_PER_SUBDEV + (!!((nchans)%MAX_CHANS_PER_SUBDEV)) /*+ (nchans > INTR_CHANS_PER_ASIC ? 2 : 1)*/)
 /* IO Memory sizes */
 #define ASIC_IOSIZE (0x0B)
 
 #define INTR_PORTS_PER_SUBDEV (INTR_CHANS_PER_ASIC/CHANS_PER_PORT)
 #define MAX_DIO_CHANS   (PORTS_PER_ASIC*2*CHANS_PER_PORT)
 #define MAX_ASICS       (MAX_DIO_CHANS/CHANS_PER_ASIC)
-#define SDEV_NO ((int)(s - dev->subdevices))
 #define CALC_N_SUBDEVS(nchans) ((nchans)/MAX_CHANS_PER_SUBDEV + (!!((nchans)%MAX_CHANS_PER_SUBDEV)) /*+ (nchans > INTR_CHANS_PER_ASIC ? 2 : 1)*/)
 /* IO Memory sizes */
 #define ASIC_IOSIZE (0x10)