@@ -124,7 +124,6 @@ struct pcl816_private {
124124 unsigned int divisor2 ;
125125 unsigned int ai_cmd_running :1 ;
126126 unsigned int irq_was_now_closed :1 ;
127- unsigned int ai_neverending :1 ;
128127};
129128
130129static int check_channel_list (struct comedi_device * dev ,
@@ -247,13 +246,12 @@ static irqreturn_t interrupt_pcl816_ai_mode13_int(int irq, void *d)
247246 devpriv -> ai_act_scan ++ ;
248247 }
249248
250- if (!devpriv -> ai_neverending )
251- /* all data sampled */
252- if (devpriv -> ai_act_scan >= cmd -> stop_arg ) {
253- /* all data sampled */
254- s -> cancel (dev , s );
255- s -> async -> events |= COMEDI_CB_EOA ;
256- }
249+ if (cmd -> stop_src == TRIG_COUNT &&
250+ devpriv -> ai_act_scan >= cmd -> stop_arg ) {
251+ /* all data sampled */
252+ s -> cancel (dev , s );
253+ s -> async -> events |= COMEDI_CB_EOA ;
254+ }
257255 comedi_event (dev , s );
258256 return IRQ_HANDLED ;
259257}
@@ -279,14 +277,14 @@ static void transfer_from_dma_buf(struct comedi_device *dev,
279277 devpriv -> ai_act_scan ++ ;
280278 }
281279
282- if (! devpriv -> ai_neverending )
283- /* all data sampled */
284- if ( devpriv -> ai_act_scan >= cmd -> stop_arg ) {
285- s -> cancel (dev , s );
286- s -> async -> events |= COMEDI_CB_EOA ;
287- s -> async -> events |= COMEDI_CB_BLOCK ;
288- break ;
289- }
280+ if (cmd -> stop_src == TRIG_COUNT &&
281+ devpriv -> ai_act_scan >= cmd -> stop_arg ) {
282+ /* all data sampled */
283+ s -> cancel (dev , s );
284+ s -> async -> events |= COMEDI_CB_EOA ;
285+ s -> async -> events |= COMEDI_CB_BLOCK ;
286+ break ;
287+ }
290288 }
291289
292290 comedi_event (dev , s );
@@ -297,16 +295,16 @@ static irqreturn_t interrupt_pcl816_ai_mode13_dma(int irq, void *d)
297295 struct comedi_device * dev = d ;
298296 struct pcl816_private * devpriv = dev -> private ;
299297 struct comedi_subdevice * s = dev -> read_subdev ;
298+ struct comedi_cmd * cmd = & s -> async -> cmd ;
300299 int len , bufptr , this_dma_buf ;
301300 unsigned long dma_flags ;
302301 unsigned short * ptr ;
303302
304303 disable_dma (devpriv -> dma );
305304 this_dma_buf = devpriv -> next_dma_buf ;
306305
307- /* switch dma bufs */
308- if ((devpriv -> dma_runs_to_end > -1 ) || devpriv -> ai_neverending ) {
309-
306+ if (devpriv -> dma_runs_to_end > -1 || cmd -> stop_src == TRIG_NONE ) {
307+ /* switch dma bufs */
310308 devpriv -> next_dma_buf = 1 - devpriv -> next_dma_buf ;
311309 set_dma_mode (devpriv -> dma , DMA_MODE_READ );
312310 dma_flags = claim_dma_lock ();
@@ -469,14 +467,9 @@ static int pcl816_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
469467 devpriv -> ai_poll_ptr = 0 ;
470468 devpriv -> irq_was_now_closed = 0 ;
471469
472- if (cmd -> stop_src == TRIG_COUNT )
473- devpriv -> ai_neverending = 0 ;
474- else
475- devpriv -> ai_neverending = 1 ;
476-
477470 if (devpriv -> dma ) {
478471 bytes = devpriv -> hwdmasize ;
479- if (! devpriv -> ai_neverending ) {
472+ if (cmd -> stop_src == TRIG_COUNT ) {
480473 /* how many */
481474 bytes = s -> async -> cmd .chanlist_len *
482475 s -> async -> cmd .chanlist_len *
0 commit comments