Skip to content

Commit

Permalink
staging: comedi: usbduxsigma: tidy up usbdux_ai_insn_read()
Browse files Browse the repository at this point in the history
Rename the function so it has namespace associated with the driver.
Rename the local variable used for the private data pointer.

Return -EBUSY if an asynchronous command is running and the read cannot
be completed.

Propagate the errno if the receive_dux_command() fails.

Tidy up the function to make it more concise.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
bigguiness authored and gregkh committed May 30, 2013
1 parent 44d3fca commit c5db3b7
Showing 1 changed file with 39 additions and 45 deletions.
84 changes: 39 additions & 45 deletions drivers/staging/comedi/drivers/usbduxsigma.c
Original file line number Diff line number Diff line change
Expand Up @@ -791,67 +791,61 @@ static int usbdux_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
return 0;
}

/* Mode 0 is used to get a single conversion on demand */
static int usbdux_ai_insn_read(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn, unsigned int *data)
static int usbduxsigma_ai_insn_read(struct comedi_device *dev,
struct comedi_subdevice *s,
struct comedi_insn *insn,
unsigned int *data)
{
struct usbduxsigma_private *this_usbduxsub = dev->private;
int i;
int32_t one = 0;
int chan;
int err;
struct usbduxsigma_private *devpriv = dev->private;
unsigned int chan = CR_CHAN(insn->chanspec);
uint8_t muxsg0 = 0;
uint8_t muxsg1 = 0;
uint8_t sysred = 0;
int ret;
int i;

down(&this_usbduxsub->sem);
if (this_usbduxsub->ai_cmd_running) {
up(&this_usbduxsub->sem);
return 0;
down(&devpriv->sem);
if (devpriv->ai_cmd_running) {
up(&devpriv->sem);
return -EBUSY;
}

/* sample one channel */
/* CONFIG0: chopper on */
this_usbduxsub->dux_commands[1] = 0x16;

/* CONFIG1: 2kHz sampling rate */
this_usbduxsub->dux_commands[2] = 0x80;

/* CONFIG3: differential channels off */
this_usbduxsub->dux_commands[3] = 0x00;

chan = CR_CHAN(insn->chanspec);
create_adc_command(chan, &muxsg0, &muxsg1);

this_usbduxsub->dux_commands[4] = muxsg0;
this_usbduxsub->dux_commands[5] = muxsg1;
this_usbduxsub->dux_commands[6] = sysred;
/* Mode 0 is used to get a single conversion on demand */
devpriv->dux_commands[1] = 0x16; /* CONFIG0: chopper on */
devpriv->dux_commands[2] = 0x80; /* CONFIG1: 2kHz sampling rate */
devpriv->dux_commands[3] = 0x00; /* CONFIG3: diff. channels off */
devpriv->dux_commands[4] = muxsg0;
devpriv->dux_commands[5] = muxsg1;
devpriv->dux_commands[6] = sysred;

/* adc commands */
err = send_dux_commands(dev, SENDSINGLEAD);
if (err < 0) {
up(&this_usbduxsub->sem);
return err;
ret = send_dux_commands(dev, SENDSINGLEAD);
if (ret < 0) {
up(&devpriv->sem);
return ret;
}

for (i = 0; i < insn->n; i++) {
err = receive_dux_commands(dev, SENDSINGLEAD);
if (err < 0) {
up(&this_usbduxsub->sem);
return 0;
int32_t val;

ret = receive_dux_commands(dev, SENDSINGLEAD);
if (ret < 0) {
up(&devpriv->sem);
return ret;
}

/* 32 bits big endian from the A/D converter */
one = be32_to_cpu(*((int32_t *)
((this_usbduxsub->insnBuffer)+1)));
/* mask out the status byte */
one = one & 0x00ffffff;
/* turn it into an unsigned integer */
one = one ^ 0x00800000;
data[i] = one;
val = be32_to_cpu(*((int32_t *)((devpriv->insnBuffer) + 1)));
val &= 0x00ffffff; /* strip status byte */
val ^= 0x00800000; /* convert to unsigned */

data[i] = val;
}
up(&this_usbduxsub->sem);
return i;
up(&devpriv->sem);

return insn->n;
}

static int usbduxsigma_ao_insn_read(struct comedi_device *dev,
Expand Down Expand Up @@ -1453,7 +1447,7 @@ static int usbduxsigma_attach_common(struct comedi_device *dev)
s->len_chanlist = NUMCHANNELS;
s->maxdata = 0x00ffffff;
s->range_table = &range_usbdux_ai_range;
s->insn_read = usbdux_ai_insn_read;
s->insn_read = usbduxsigma_ai_insn_read;
s->do_cmdtest = usbdux_ai_cmdtest;
s->do_cmd = usbdux_ai_cmd;
s->cancel = usbdux_ai_cancel;
Expand Down

0 comments on commit c5db3b7

Please sign in to comment.