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

staging: comedi: usbdux: simplify initializing the ao urb transfer_buffer

Remove the ugly casting of datap to the ao urb->transfer_buffer. The format
of the data in the buffer is simply.

  [0] = # of channels to update (s->async->cmd.chanlist.len)
  [1] = lsb of value for 1st channel to update
  [2] = msb of value for 1st channel to update
  [3] = 1st channel to update (depvriv->dac_commands[0])

If more than 1 channel is to be updated they are simply added to the buffer:

  [4] = lsb of value for 2st channel to update
  [5] = msb of value for 2st channel to update
  [6] = 1st channel to update (depvriv->dac_commands[1])

etc.
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 a998a3db
...@@ -425,8 +425,10 @@ static void usbduxsub_ao_isoc_irq(struct urb *urb) ...@@ -425,8 +425,10 @@ static void usbduxsub_ao_isoc_irq(struct urb *urb)
struct comedi_device *dev = urb->context; struct comedi_device *dev = urb->context;
struct comedi_subdevice *s = dev->write_subdev; struct comedi_subdevice *s = dev->write_subdev;
struct usbdux_private *devpriv = dev->private; struct usbdux_private *devpriv = dev->private;
int i, ret;
int8_t *datap; int8_t *datap;
int len;
int ret;
int i;
switch (urb->status) { switch (urb->status) {
case 0: case 0:
...@@ -484,9 +486,11 @@ static void usbduxsub_ao_isoc_irq(struct urb *urb) ...@@ -484,9 +486,11 @@ static void usbduxsub_ao_isoc_irq(struct urb *urb)
return; return;
} }
} }
/* transmit data to the USB bus */ /* transmit data to the USB bus */
((uint8_t *) (urb->transfer_buffer))[0] = datap = urb->transfer_buffer;
s->async->cmd.chanlist_len; len = s->async->cmd.chanlist_len;
*datap++ = len;
for (i = 0; i < s->async->cmd.chanlist_len; i++) { for (i = 0; i < s->async->cmd.chanlist_len; i++) {
unsigned int chan = devpriv->dac_commands[i]; unsigned int chan = devpriv->dac_commands[i];
short val; short val;
...@@ -498,12 +502,9 @@ static void usbduxsub_ao_isoc_irq(struct urb *urb) ...@@ -498,12 +502,9 @@ static void usbduxsub_ao_isoc_irq(struct urb *urb)
COMEDI_CB_OVERFLOW); COMEDI_CB_OVERFLOW);
} }
/* pointer to the DA */ /* pointer to the DA */
datap = *datap++ = val & 0xff;
(&(((int8_t *) urb->transfer_buffer)[i * 3 + 1])); *datap++ = (val >> 8) & 0xff;
/* get the data from comedi */ *datap++ = chan;
datap[0] = val;
datap[1] = val >> 8;
datap[2] = chan;
devpriv->ao_readback[chan] = val; devpriv->ao_readback[chan] = val;
s->async->events |= COMEDI_CB_BLOCK; s->async->events |= COMEDI_CB_BLOCK;
......
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