Use comedi_handle_events() to automatically (*cancel) the async command for an end-of-acquisition or if an error/overflow occurs. The s626_mc_disable() call when the end-of-acquisition is detected can then be removed. The (*cancel) does the same thing. For aesthetics, also remove the 'finished' local variable and just return the ai_cmd_running state. Signed-off-by: H Hartley Sweeten <hsweeten@xxxxxxxxxxxxxxxxxxx> Cc: Ian Abbott <abbotti@xxxxxxxxx> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- drivers/staging/comedi/drivers/s626.c | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c index 0e7621e..82510be 100644 --- a/drivers/staging/comedi/drivers/s626.c +++ b/drivers/staging/comedi/drivers/s626.c @@ -1480,7 +1480,6 @@ static bool s626_handle_eos_interrupt(struct comedi_device *dev) * from the final ADC of the previous poll list scan. */ uint32_t *readaddr = (uint32_t *)devpriv->ana_buf.logical_base + 1; - bool finished = false; int i; /* get the data and hand it over to comedi */ @@ -1505,25 +1504,16 @@ static bool s626_handle_eos_interrupt(struct comedi_device *dev) devpriv->ai_sample_count--; if (devpriv->ai_sample_count <= 0) { devpriv->ai_cmd_running = 0; - - /* Stop RPS program */ - s626_mc_disable(dev, S626_MC1_ERPS1, S626_P_MC1); - - /* send end of acquisition */ async->events |= COMEDI_CB_EOA; - - /* disable master interrupt */ - finished = true; } } if (devpriv->ai_cmd_running && cmd->scan_begin_src == TRIG_EXT) s626_dio_set_irq(dev, cmd->scan_begin_arg); - /* tell comedi that data is there */ - comedi_event(dev, s); + comedi_handle_events(dev, s); - return finished; + return !devpriv->ai_cmd_running; } static irqreturn_t s626_irq_handler(int irq, void *d) -- 2.0.3 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel