Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+7 −14
Original line number Diff line number Diff line
@@ -398,7 +398,6 @@ static int usbduxfast_ai_cmdtest(struct comedi_device *dev,

	/* Step 3: check if arguments are trivially valid */

	if (cmd->start_src == TRIG_NOW)
	err |= cfc_check_trigger_arg_is(&cmd->start_arg, 0);

	if (!cmd->chanlist_len)
@@ -451,21 +450,20 @@ static int usbduxfast_ai_cmdtest(struct comedi_device *dev,

static int usbduxfast_ai_inttrig(struct comedi_device *dev,
				 struct comedi_subdevice *s,
				 unsigned int trignum)
				 unsigned int trig_num)
{
	struct usbduxfast_private *devpriv = dev->private;
	struct comedi_cmd *cmd = &s->async->cmd;
	int ret;

	if (!devpriv)
		return -EFAULT;

	if (trig_num != cmd->start_arg)
		return -EINVAL;

	down(&devpriv->sem);

	if (trignum != 0) {
		dev_err(dev->class_dev, "invalid trignum\n");
		up(&devpriv->sem);
		return -EINVAL;
	}
	if (!devpriv->ai_cmd_running) {
		devpriv->ai_cmd_running = 1;
		ret = usbduxfast_submit_urb(dev);
@@ -837,12 +835,7 @@ static int usbduxfast_ai_cmd(struct comedi_device *dev,
			return ret;
		}
		s->async->inttrig = NULL;
	} else {
		/*
		 * TRIG_INT
		 * don't enable the acquision operation
		 * wait for an internal signal
		 */
	} else {	/* TRIG_INT */
		s->async->inttrig = usbduxfast_ai_inttrig;
	}
	up(&devpriv->sem);