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

staging: comedi: usbdux: tidy up usbdux_dio_insn_bits()

Rename the local variable used for the private data pointer to the
comedi "norm".

Remove the unnecessary sanity check of the private data pointer. This
function can only be called is the private data was allocated during
the attach.

Tidy up the exit path using goto to ensure that the semaphore is
released.
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 fc110df6
...@@ -1302,40 +1302,40 @@ static int usbdux_dio_insn_config(struct comedi_device *dev, ...@@ -1302,40 +1302,40 @@ static int usbdux_dio_insn_config(struct comedi_device *dev,
static int usbdux_dio_insn_bits(struct comedi_device *dev, static int usbdux_dio_insn_bits(struct comedi_device *dev,
struct comedi_subdevice *s, struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data) struct comedi_insn *insn,
unsigned int *data)
{ {
struct usbdux_private *this_usbduxsub = dev->private; struct usbdux_private *devpriv = dev->private;
int err; unsigned int mask = data[0];
unsigned int bits = data[1];
int ret;
if (!this_usbduxsub) down(&devpriv->sem);
return -EFAULT;
down(&this_usbduxsub->sem); s->state &= ~mask;
s->state |= (bits & mask);
/* The insn data is a mask in data[0] and the new data devpriv->dux_commands[1] = s->io_bits;
* in data[1], each channel cooresponding to a bit. */ devpriv->dux_commands[2] = s->state;
s->state &= ~data[0];
s->state |= data[0] & data[1];
this_usbduxsub->dux_commands[1] = s->io_bits;
this_usbduxsub->dux_commands[2] = s->state;
/* This command also tells the firmware to return */ /*
/* the digital input lines */ * This command also tells the firmware to return
err = send_dux_commands(dev, SENDDIOBITSCOMMAND); * the digital input lines.
if (err < 0) { */
up(&this_usbduxsub->sem); ret = send_dux_commands(dev, SENDDIOBITSCOMMAND);
return err; if (ret < 0)
} goto dio_exit;
err = receive_dux_commands(dev, SENDDIOBITSCOMMAND); ret = receive_dux_commands(dev, SENDDIOBITSCOMMAND);
if (err < 0) { if (ret < 0)
up(&this_usbduxsub->sem); goto dio_exit;
return err;
}
data[1] = le16_to_cpu(this_usbduxsub->insn_buffer[1]); data[1] = le16_to_cpu(devpriv->insn_buffer[1]);
up(&this_usbduxsub->sem);
return insn->n; dio_exit:
up(&devpriv->sem);
return ret ? ret : insn->n;
} }
/* reads the 4 counters, only two are used just now */ /* reads the 4 counters, only two are used just now */
......
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