linux/drivers/staging/comedi
Ian Abbott b248fcf1ce staging: comedi: usbduxsigma: don't clobber ao_timer in command test
commit c04a1f1780 upstream.

`devpriv->ao_timer` is used while an asynchronous command is running on
the AO subdevice.  It also gets modified by the subdevice's `cmdtest`
handler for checking new asynchronous commands,
`usbduxsigma_ao_cmdtest()`, which is not correct as it's allowed to
check new commands while an old command is still running.  Fix it by
moving the code which sets up `devpriv->ao_timer` into the subdevice's
`cmd` handler, `usbduxsigma_ao_cmd()`.

Note that the removed code in `usbduxsigma_ao_cmdtest()` checked that
`devpriv->ao_timer` did not end up less that 1, but that could not
happen due because `cmd->scan_begin_arg` or `cmd->convert_arg` had
already been range-checked.

Also note that we tested the `high_speed` variable in the old code, but
that is currently always 0 and means that we always use "scan" timing
(`cmd->scan_begin_src == TRIG_TIMER` and `cmd->convert_src == TRIG_NOW`)
and never "convert" (individual sample) timing (`cmd->scan_begin_src ==
TRIG_FOLLOW` and `cmd->convert_src == TRIG_TIMER`).  The moved code
tests `cmd->convert_src` instead to decide whether "scan" or "convert"
timing is being used, although currently only "scan" timing is
supported.

Fixes: fb1ef622e7 ("staging: comedi: usbduxsigma: tidy up analog output command support")
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Reviewed-by: Bernd Porr <mail@berndporr.me.uk>
Reviewed-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2015-09-21 10:05:30 -07:00
..
drivers staging: comedi: usbduxsigma: don't clobber ao_timer in command test 2015-09-21 10:05:30 -07:00
kcomedilib staging: comedi: kcomedilib_main: (!foo) preferred over (foo == NULL) 2015-03-06 16:01:30 -08:00
comedi.h staging: comedi: add ioctls to set per-file read and write subdevice 2014-11-05 14:52:18 -08:00
comedi_buf.c staging: comedi: comedidev.h: add 'scans_done' member to comedi_async 2014-11-05 14:59:46 -08:00
comedi_compat32.c staging: comedi: comedi_compat32.c: absorb raw_ioctl() 2015-01-28 11:19:34 -08:00
comedi_compat32.h staging: comedi: comedi_compat32.h: reformat copyright comment 2015-01-28 11:19:34 -08:00
comedi_fops.c staging: comedi: comedi_fops: extend spin-lock scope in comedi_event() 2015-04-03 13:11:54 +02:00
comedi_internal.h staging: comedi: make comedi_internal.h self-reliant 2015-04-03 13:12:28 +02:00
comedi_pci.c staging: comedi: comedi_pci.c: include new "comedi_pci.h" header 2015-03-20 14:08:09 +01:00
comedi_pci.h staging: comedi: comedi_pci.h: move PCI stuff out of comedidev.h 2015-03-20 14:08:18 +01:00
comedi_pcmcia.c staging: comedi: comedi_pcmcia.c: include new "comedi_pcmcia.h" header 2015-02-07 17:05:50 +08:00
comedi_pcmcia.h staging: comedi: comedi_pcmcia.h: move PCMCIA stuff out of comedidev.h 2015-02-07 17:05:51 +08:00
comedi_usb.c staging: comedi: comedi_usb.c: include new "comedi_usb.h" header 2015-01-28 11:18:50 -08:00
comedi_usb.h staging: comedi: comedi_usb.h: move USB stuff out of comedidev.h 2015-01-28 11:18:51 -08:00
comedidev.h staging: comedi: comedi_fc.h: begin migration to comedidev.h 2015-04-03 13:13:59 +02:00
comedilib.h staging: comedi: comedi_bond: handle base channel for insn_bits 2013-08-26 06:41:56 -07:00
drivers.c staging: comedi: drivers: (!foo) preferred over (foo == NULL) 2015-03-06 16:01:28 -08:00
Kconfig staging: comedi: cb_pcimdas: add 8254 timer (pacer) support 2015-03-01 18:56:31 -08:00
Makefile staging: comedi: split out PCI support into new module 2014-11-07 09:24:33 -08:00
proc.c Staging: comedi: proc: title block update 2014-03-19 04:41:04 +00:00
range.c staging: comedi: range.c: reformat copyright comment 2015-02-07 17:04:22 +08:00
TODO staging: comedi: TODO: remove item "reserve major number" 2014-05-28 14:18:11 -07:00