staging: comedi: pcl711: add AI cancel handler
authorIan Abbott <abbotti@mev.co.uk>
Thu, 26 Sep 2013 09:16:37 +0000 (10:16 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 26 Sep 2013 16:34:44 +0000 (09:34 -0700)
Comedi subdevices that support asynchronous commands should have a
'cancel' handler to stop an in-progress command.  Add such a handler to
the pcl711 driver module.  I think merely setting the acquisition mode
to "software-triggered" would be sufficient, but also clear the
interrupt status for good luck.

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Reviewed-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/pcl711.c

index eb800bef88524587c07ca9dda0531429e3163f65..939a11f4e3c86b210c7c40de68a61947bb25d462 100644 (file)
@@ -189,6 +189,14 @@ static unsigned int pcl711_ai_get_sample(struct comedi_device *dev,
        return val & s->maxdata;
 }
 
+static int pcl711_ai_cancel(struct comedi_device *dev,
+                           struct comedi_subdevice *s)
+{
+       outb(PCL711_INT_STAT_CLR, dev->iobase + PCL711_INT_STAT_REG);
+       pcl711_ai_set_mode(dev, PCL711_MODE_SOFTTRIG);
+       return 0;
+}
+
 static irqreturn_t pcl711_interrupt(int irq, void *d)
 {
        struct comedi_device *dev = d;
@@ -493,6 +501,7 @@ static int pcl711_attach(struct comedi_device *dev, struct comedi_devconfig *it)
                s->len_chanlist = 1;
                s->do_cmdtest   = pcl711_ai_cmdtest;
                s->do_cmd       = pcl711_ai_cmd;
+               s->cancel       = pcl711_ai_cancel;
        }
 
        /* Analog Output subdevice */