summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorH Hartley Sweeten <hsweeten@visionengravers.com>2014-11-05 18:21:05 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-11-05 23:59:47 +0100
commit88340999de06facf5f4ae1b9f5b620ee04715a00 (patch)
treee836ed9c0e925431242701b88cb7d96571e228f4
parentstaging: comedi: usbdux: use comedi_async 'scans_done' to detect AO EOA (diff)
downloadlinux-88340999de06facf5f4ae1b9f5b620ee04715a00.tar.xz
linux-88340999de06facf5f4ae1b9f5b620ee04715a00.zip
staging: comedi: usbdux: use comedi_async 'scans_done' to detect AI EOA
Remove the private data member 'ai_sample_count' and use the comedi_async 'scans_done' member to detect the analog input end-of-acquisition. Move the EOA check so it happens after adding the samples from the current urb to the async buffer. This prevents the unnecessary resubmit of the urb when the EOA occurs. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Reviewed-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/staging/comedi/drivers/usbdux.c22
1 files changed, 4 insertions, 18 deletions
diff --git a/drivers/staging/comedi/drivers/usbdux.c b/drivers/staging/comedi/drivers/usbdux.c
index 778201596d69..4737dbf8e01d 100644
--- a/drivers/staging/comedi/drivers/usbdux.c
+++ b/drivers/staging/comedi/drivers/usbdux.c
@@ -202,8 +202,6 @@ struct usbdux_private {
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;
@@ -263,14 +261,6 @@ static void usbduxsub_ai_handle_urb(struct comedi_device *dev,
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]);
@@ -284,6 +274,10 @@ static void usbduxsub_ai_handle_urb(struct comedi_device *dev,
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 */
@@ -732,14 +726,6 @@ static int usbdux_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
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;