diff options
author | H Hartley Sweeten <hsweeten@visionengravers.com> | 2013-07-25 16:10:25 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-07-26 15:10:08 -0700 |
commit | c769f85e2740ebe7e4c726632fed52818640faba (patch) | |
tree | f4fa15a6db1ced4ced4e4d2e416179245e742215 /drivers/staging/comedi/drivers/usbdux.c | |
parent | a998a3db530bff8094476e82e28c801b09f7aa9e (diff) | |
download | linux-c769f85e2740ebe7e4c726632fed52818640faba.tar.bz2 |
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: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi/drivers/usbdux.c')
-rw-r--r-- | drivers/staging/comedi/drivers/usbdux.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/staging/comedi/drivers/usbdux.c b/drivers/staging/comedi/drivers/usbdux.c index 1399305d739f..cb94964cc9ba 100644 --- a/drivers/staging/comedi/drivers/usbdux.c +++ b/drivers/staging/comedi/drivers/usbdux.c @@ -425,8 +425,10 @@ static void usbduxsub_ao_isoc_irq(struct urb *urb) struct comedi_device *dev = urb->context; struct comedi_subdevice *s = dev->write_subdev; struct usbdux_private *devpriv = dev->private; - int i, ret; int8_t *datap; + int len; + int ret; + int i; switch (urb->status) { case 0: @@ -484,9 +486,11 @@ static void usbduxsub_ao_isoc_irq(struct urb *urb) return; } } + /* transmit data to the USB bus */ - ((uint8_t *) (urb->transfer_buffer))[0] = - s->async->cmd.chanlist_len; + datap = urb->transfer_buffer; + len = s->async->cmd.chanlist_len; + *datap++ = len; for (i = 0; i < s->async->cmd.chanlist_len; i++) { unsigned int chan = devpriv->dac_commands[i]; short val; @@ -498,12 +502,9 @@ static void usbduxsub_ao_isoc_irq(struct urb *urb) COMEDI_CB_OVERFLOW); } /* pointer to the DA */ - datap = - (&(((int8_t *) urb->transfer_buffer)[i * 3 + 1])); - /* get the data from comedi */ - datap[0] = val; - datap[1] = val >> 8; - datap[2] = chan; + *datap++ = val & 0xff; + *datap++ = (val >> 8) & 0xff; + *datap++ = chan; devpriv->ao_readback[chan] = val; s->async->events |= COMEDI_CB_BLOCK; |