unsigned int ao_cmd_running:1;
        unsigned int pwm_cmd_running:1;
 
-       /* number of samples to acquire */
-       int ai_sample_count;
        /* time between samples in units of the timer */
        unsigned int ai_timer;
        unsigned int ao_timer;
        if (devpriv->ai_counter == 0) {
                devpriv->ai_counter = devpriv->ai_timer;
 
-               if (cmd->stop_src == TRIG_COUNT) {
-                       devpriv->ai_sample_count--;
-                       if (devpriv->ai_sample_count < 0) {
-                               async->events |= COMEDI_CB_EOA;
-                               return;
-                       }
-               }
-
                /* get the data from the USB bus and hand it over to comedi */
                for (i = 0; i < cmd->chanlist_len; i++) {
                        unsigned int range = CR_RANGE(cmd->chanlist[i]);
                        if (!comedi_buf_write_samples(s, &val, 1))
                                return;
                }
+
+               if (cmd->stop_src == TRIG_COUNT &&
+                   async->scans_done >= cmd->stop_arg)
+                       async->events |= COMEDI_CB_EOA;
        }
 
        /* if command is still running, resubmit urb */
 
        devpriv->ai_counter = devpriv->ai_timer;
 
-       if (cmd->stop_src == TRIG_COUNT) {
-               /* data arrives as one packet */
-               devpriv->ai_sample_count = cmd->stop_arg;
-       } else {
-               /* continous acquisition */
-               devpriv->ai_sample_count = 0;
-       }
-
        if (cmd->start_src == TRIG_NOW) {
                /* enable this acquisition operation */
                devpriv->ai_cmd_running = 1;