return IRQ_HANDLED;
 }
 
+static void daqp_ai_set_one_scanlist_entry(struct comedi_device *dev,
+                                          unsigned int chanspec,
+                                          int start)
+{
+       unsigned int chan = CR_CHAN(chanspec);
+       unsigned int range = CR_RANGE(chanspec);
+       unsigned int aref = CR_AREF(chanspec);
+       unsigned int val;
+
+       val = DAQP_SCANLIST_CHANNEL(chan) | DAQP_SCANLIST_GAIN(range);
+
+       if (aref == AREF_DIFF)
+               val |= DAQP_SCANLIST_DIFFERENTIAL;
+
+       if (start)
+               val |= DAQP_SCANLIST_START;
+
+       outb(val & 0xff, dev->iobase + DAQP_SCANLIST);
+       outb((val >> 8) & 0xff, dev->iobase + DAQP_SCANLIST);
+}
+
 /* One-shot analog data acquisition routine */
 
 static int daqp_ai_insn_read(struct comedi_device *dev,
        outb(DAQP_COMMAND_RSTQ, dev->iobase + DAQP_COMMAND);
 
        /* Program one scan list entry */
-
-       v = DAQP_SCANLIST_CHANNEL(CR_CHAN(insn->chanspec))
-           | DAQP_SCANLIST_GAIN(CR_RANGE(insn->chanspec));
-
-       if (CR_AREF(insn->chanspec) == AREF_DIFF)
-               v |= DAQP_SCANLIST_DIFFERENTIAL;
-
-
-       v |= DAQP_SCANLIST_START;
-
-       outb(v & 0xff, dev->iobase + DAQP_SCANLIST);
-       outb(v >> 8, dev->iobase + DAQP_SCANLIST);
+       daqp_ai_set_one_scanlist_entry(dev, insn->chanspec, 1);
 
        /* Reset data FIFO (see page 28 of DAQP User's Manual) */
 
        }
 
        /* Program scan list */
-
        for (i = 0; i < cmd->chanlist_len; i++) {
+               int start = (i == 0 || scanlist_start_on_every_entry);
 
-               int chanspec = cmd->chanlist[i];
-
-               /* Program one scan list entry */
-
-               v = DAQP_SCANLIST_CHANNEL(CR_CHAN(chanspec))
-                   | DAQP_SCANLIST_GAIN(CR_RANGE(chanspec));
-
-               if (CR_AREF(chanspec) == AREF_DIFF)
-                       v |= DAQP_SCANLIST_DIFFERENTIAL;
-
-               if (i == 0 || scanlist_start_on_every_entry)
-                       v |= DAQP_SCANLIST_START;
-
-               outb(v & 0xff, dev->iobase + DAQP_SCANLIST);
-               outb(v >> 8, dev->iobase + DAQP_SCANLIST);
+               daqp_ai_set_one_scanlist_entry(dev, cmd->chanlist[i], start);
        }
 
        /* Now it's time to program the FIFO threshold, basically the