static void ni_sync_ai_dma(struct comedi_device *dev)
 {
        struct ni_private *devpriv = dev->private;
-       struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV];
+       struct comedi_subdevice *s = dev->read_subdev;
        unsigned long flags;
 
        spin_lock_irqsave(&devpriv->mite_channel_lock, flags);
 static void ni_handle_fifo_half_full(struct comedi_device *dev)
 {
        const struct ni_board_struct *board = comedi_board(dev);
-       struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV];
+       struct comedi_subdevice *s = dev->read_subdev;
        int n;
 
        n = board->ai_fifo_depth / 2;
 {
        const struct ni_board_struct *board = comedi_board(dev);
        struct ni_private *devpriv = dev->private;
-       struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV];
+       struct comedi_subdevice *s = dev->read_subdev;
        unsigned short data[2];
        u32 dl;
        unsigned short fifo_empty;
 {
        const struct ni_board_struct *board = comedi_board(dev);
        struct ni_private *devpriv __maybe_unused = dev->private;
-       struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV];
+       struct comedi_subdevice *s = dev->read_subdev;
        unsigned short data;
        u32 dl;
 
 {
        const struct ni_board_struct *board = comedi_board(dev);
        struct ni_private *devpriv __maybe_unused = dev->private;
-       struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV];
+       struct comedi_subdevice *s = dev->read_subdev;
        unsigned short data;
        u32 dl;
 
 
 static void shutdown_ai_command(struct comedi_device *dev)
 {
-       struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV];
+       struct comedi_subdevice *s = dev->read_subdev;
 
 #ifdef PCIDMA
        ni_ai_drain_dma(dev);
                               unsigned ai_mite_status)
 {
        struct ni_private *devpriv = dev->private;
-       struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV];
+       struct comedi_subdevice *s = dev->read_subdev;
 
        /* 67xx boards don't have ai subdevice, but their gpct0 might generate an a interrupt */
        if (s->type == COMEDI_SUBD_UNUSED)
 {
        const struct ni_board_struct *board = comedi_board(dev);
        struct ni_private *devpriv = dev->private;
-       struct comedi_subdevice *s = &dev->subdevices[NI_AI_SUBDEV];
+       struct comedi_subdevice *s = dev->read_subdev;
        int retval;
        unsigned long flags;