Commit 95194590 authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman

staging: comedi: usbduxfast: fix the cmd->start_arg validation and use

This driver supports cmd->start_src values of TRIG_NOW, TRIG_EXT, and
TRIG_INT. Currently the cmd->start_arg is only validated for TRIG_NOW.

For TRIG_EXT sources, the cmd->start_src is driver specific. For a
TRIG_INT source, the cmd->start_arg is actually the valid trig_num
that is used by the async (*inttrig) callback.

The cmd->start_arg is currently not use in the driver. Just trivially
validate it to be 0 for all cmd->start_src values.

Refactor the (*inttrig) function so that the cmd->start_arg is used
to check the trig_num instead of the open coded value.

For aesthetics, remove some unnecessary comments in the (*do_cmd)
function.
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b9b5b74e
...@@ -398,7 +398,6 @@ static int usbduxfast_ai_cmdtest(struct comedi_device *dev, ...@@ -398,7 +398,6 @@ static int usbduxfast_ai_cmdtest(struct comedi_device *dev,
/* Step 3: check if arguments are trivially valid */ /* Step 3: check if arguments are trivially valid */
if (cmd->start_src == TRIG_NOW)
err |= cfc_check_trigger_arg_is(&cmd->start_arg, 0); err |= cfc_check_trigger_arg_is(&cmd->start_arg, 0);
if (!cmd->chanlist_len) if (!cmd->chanlist_len)
...@@ -451,21 +450,20 @@ static int usbduxfast_ai_cmdtest(struct comedi_device *dev, ...@@ -451,21 +450,20 @@ static int usbduxfast_ai_cmdtest(struct comedi_device *dev,
static int usbduxfast_ai_inttrig(struct comedi_device *dev, static int usbduxfast_ai_inttrig(struct comedi_device *dev,
struct comedi_subdevice *s, struct comedi_subdevice *s,
unsigned int trignum) unsigned int trig_num)
{ {
struct usbduxfast_private *devpriv = dev->private; struct usbduxfast_private *devpriv = dev->private;
struct comedi_cmd *cmd = &s->async->cmd;
int ret; int ret;
if (!devpriv) if (!devpriv)
return -EFAULT; return -EFAULT;
if (trig_num != cmd->start_arg)
return -EINVAL;
down(&devpriv->sem); down(&devpriv->sem);
if (trignum != 0) {
dev_err(dev->class_dev, "invalid trignum\n");
up(&devpriv->sem);
return -EINVAL;
}
if (!devpriv->ai_cmd_running) { if (!devpriv->ai_cmd_running) {
devpriv->ai_cmd_running = 1; devpriv->ai_cmd_running = 1;
ret = usbduxfast_submit_urb(dev); ret = usbduxfast_submit_urb(dev);
...@@ -837,12 +835,7 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev, ...@@ -837,12 +835,7 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
return ret; return ret;
} }
s->async->inttrig = NULL; s->async->inttrig = NULL;
} else { } else { /* TRIG_INT */
/*
* TRIG_INT
* don't enable the acquision operation
* wait for an internal signal
*/
s->async->inttrig = usbduxfast_ai_inttrig; s->async->inttrig = usbduxfast_ai_inttrig;
} }
up(&devpriv->sem); up(&devpriv->sem);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment