mirror of https://github.com/torvalds/linux.git
For the s626 driver, there is a bug in the handling of asynchronous
commands on the AI subdevice when the stop source is `TRIG_NONE`. The
command should run continuously until cancelled, but the interrupt
handler stops the command running after the first scan.
The command set-up function `s626_ai_cmd()` contains this code:
switch (cmd->stop_src) {
case TRIG_COUNT:
/* data arrives as one packet */
devpriv->ai_sample_count = cmd->stop_arg;
devpriv->ai_continous = 0;
break;
case TRIG_NONE:
/* continous acquisition */
devpriv->ai_continous = 1;
devpriv->ai_sample_count = 0;
break;
}
The interrupt handler `s626_irq_handler()` contains this code:
if (!(devpriv->ai_continous))
devpriv->ai_sample_count--;
if (devpriv->ai_sample_count <= 0) {
devpriv->ai_cmd_running = 0;
/* ... */
}
So `devpriv->ai_sample_count` is only decremented for the `TRIG_COUNT`
case, but `devpriv->ai_cmd_running` is set to 0 (and the command
stopped) regardless.
Fix this in `s626_ai_cmd()` by setting `devpriv->ai_sample_count = 1`
for the `TRIG_NONE` case. The interrupt handler will not decrement it
so it will remain greater than 0 and the check for stopping the
acquisition will fail.
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||
|---|---|---|
| .. | ||
| android | ||
| asus_oled | ||
| bcm | ||
| ccg | ||
| ced1401 | ||
| comedi | ||
| cptm1217 | ||
| crystalhd | ||
| csr | ||
| cxt1e1 | ||
| dgrp | ||
| echo | ||
| et131x | ||
| frontier | ||
| ft1000 | ||
| fwserial | ||
| gdm72xx | ||
| goldfish | ||
| iio | ||
| imx-drm | ||
| keucr | ||
| line6 | ||
| media | ||
| net | ||
| nvec | ||
| octeon | ||
| olpc_dcon | ||
| omap-thermal | ||
| ozwpan | ||
| panel | ||
| phison | ||
| quickstart | ||
| rtl8187se | ||
| rtl8192e | ||
| rtl8192u | ||
| rtl8712 | ||
| rts5139 | ||
| sb105x | ||
| sbe-2t3e3 | ||
| sep | ||
| serqt_usb2 | ||
| silicom | ||
| slicoss | ||
| sm7xxfb | ||
| speakup | ||
| ste_rmi4 | ||
| tidspbridge | ||
| usbip | ||
| vme | ||
| vt6655 | ||
| vt6656 | ||
| winbond | ||
| wlags49_h2 | ||
| wlags49_h25 | ||
| wlan-ng | ||
| xgifb | ||
| zcache | ||
| zram | ||
| zsmalloc | ||
| Kconfig | ||
| Makefile | ||
| staging.c | ||