Index: comedi_rt_timer.c
===================================================================
RCS file: /var/cvs/comedi/comedi/drivers/comedi_rt_timer.c,v
retrieving revision 1.58
diff -u -r1.58 comedi_rt_timer.c
--- comedi_rt_timer.c	17 Feb 2005 22:42:09 -0000	1.58
+++ comedi_rt_timer.c	23 Feb 2005 14:16:49 -0000
@@ -153,6 +153,7 @@
 	volatile int rt_task_active;	// indicates rt_task is servicing a comedi_cmd
 	volatile int scan_task_active;	// indicates scan_task is servicing a comedi_cmd
 	unsigned timer_running : 1;
+	unsigned follow_flag : 1;
 }timer_private;
 #define devpriv ((timer_private *)dev->private)
 
@@ -242,9 +243,13 @@
 
 	if(num_bytes == 0)
 	{
+		if (cmd->start_src == TRIG_FOLLOW && devpriv->follow_flag == 0)
+			return 0;
+		
 		comedi_error(dev, "buffer underrun");
 		return -EAGAIN;
 	}
+	devpriv->follow_flag = 1;
 	ret = comedi_data_write(devpriv->device, devpriv->subd,
 		CR_CHAN(cmd->chanlist[index]),
 		CR_RANGE(cmd->chanlist[index]),
@@ -434,7 +439,7 @@
 	unsigned int start_src = 0;
 
 	if(s->type == COMEDI_SUBD_AO)
-		start_src = TRIG_INT;
+		start_src = TRIG_INT | TRIG_FOLLOW;
 	else
 		start_src = TRIG_NOW;
 
@@ -450,8 +455,9 @@
 	 * compatible */
 
 	if(cmd->start_src != TRIG_NOW &&
-		cmd->start_src != TRIG_INT)
-		err++;
+		cmd->start_src != TRIG_INT &&
+		cmd->start_src != TRIG_FOLLOW)
+ 		err++;
 	if(cmd->scan_begin_src != TRIG_TIMER &&
 		cmd->scan_begin_src != TRIG_FOLLOW)
 		err++;
@@ -540,7 +546,9 @@
 			break;
 	}
 
-	if(cmd->start_src == TRIG_NOW)
+	devpriv->follow_flag = 0;
+
+	if(cmd->start_src == TRIG_NOW || cmd->start_src == TRIG_FOLLOW)
 		return timer_start_cmd(dev, s);
 
 	s->async->inttrig = timer_inttrig;

