[PATCH v3 19/24] staging: comedi: quatech_daqp_cs: remove 'interrupt_mode'

H Hartley Sweeten hsweeten at visionengravers.com
Mon Oct 5 21:23:06 UTC 2015


The interrupt handler is now only used for the ai async command.
Remove the unnecessary 'interrupt_mode' from the private data and
tidy up the interrupt handler.

Signed-off-by: H Hartley Sweeten <hsweeten at visionengravers.com>
Cc: Ian Abbott <abbotti at mev.co.uk>
Cc: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
---
 drivers/staging/comedi/drivers/quatech_daqp_cs.c | 66 ++++++++++--------------
 1 file changed, 26 insertions(+), 40 deletions(-)

diff --git a/drivers/staging/comedi/drivers/quatech_daqp_cs.c b/drivers/staging/comedi/drivers/quatech_daqp_cs.c
index bab3293..7432e57 100644
--- a/drivers/staging/comedi/drivers/quatech_daqp_cs.c
+++ b/drivers/staging/comedi/drivers/quatech_daqp_cs.c
@@ -143,8 +143,6 @@
 
 struct daqp_private {
 	int stop;
-
-	enum { semaphore, buffer } interrupt_mode;
 };
 
 static const struct comedi_lrange range_daqp_ai = {
@@ -187,8 +185,6 @@ static int daqp_ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s)
 	/* flush any linguring data in FIFO - superfluous here */
 	/* outb(DAQP_CMD_RSTF, dev->iobase + DAQP_CMD_REG); */
 
-	devpriv->interrupt_mode = semaphore;
-
 	return 0;
 }
 
@@ -206,10 +202,9 @@ static unsigned int daqp_ai_get_sample(struct comedi_device *dev,
 	return comedi_offset_munge(s, val);
 }
 
-static enum irqreturn daqp_interrupt(int irq, void *dev_id)
+static irqreturn_t daqp_interrupt(int irq, void *dev_id)
 {
 	struct comedi_device *dev = dev_id;
-	struct daqp_private *devpriv = dev->private;
 	struct comedi_subdevice *s = dev->read_subdev;
 	struct comedi_cmd *cmd = &s->async->cmd;
 	int loop_limit = 10000;
@@ -218,46 +213,39 @@ static enum irqreturn daqp_interrupt(int irq, void *dev_id)
 	if (!dev->attached)
 		return IRQ_NONE;
 
-	switch (devpriv->interrupt_mode) {
-	case semaphore:
-		break;
+	status = inb(dev->iobase + DAQP_STATUS_REG);
+	while (!(status & DAQP_STATUS_FIFO_EMPTY)) {
+		unsigned short data;
 
-	case buffer:
-		while (!((status = inb(dev->iobase + DAQP_STATUS_REG))
-			 & DAQP_STATUS_FIFO_EMPTY)) {
-			unsigned short data;
+		if (status & DAQP_STATUS_DATA_LOST) {
+			s->async->events |= COMEDI_CB_OVERFLOW;
+			dev_warn(dev->class_dev, "data lost\n");
+			break;
+		}
 
-			if (status & DAQP_STATUS_DATA_LOST) {
-				s->async->events |= COMEDI_CB_OVERFLOW;
-				dev_warn(dev->class_dev, "data lost\n");
-				break;
-			}
+		data = daqp_ai_get_sample(dev, s);
+		comedi_buf_write_samples(s, &data, 1);
 
-			data = daqp_ai_get_sample(dev, s);
-			comedi_buf_write_samples(s, &data, 1);
+		if (cmd->stop_src == TRIG_COUNT &&
+		    s->async->scans_done >= cmd->stop_arg) {
+			s->async->events |= COMEDI_CB_EOA;
+			break;
+		}
 
-			/* If there's a limit, decrement it
-			 * and stop conversion if zero
-			 */
+		if ((loop_limit--) <= 0)
+			break;
 
-			if (cmd->stop_src == TRIG_COUNT &&
-			    s->async->scans_done >= cmd->stop_arg) {
-				s->async->events |= COMEDI_CB_EOA;
-				break;
-			}
+		status = inb(dev->iobase + DAQP_STATUS_REG);
+	}
 
-			if ((loop_limit--) <= 0)
-				break;
-		}
+	if (loop_limit <= 0) {
+		dev_warn(dev->class_dev,
+			 "loop_limit reached in daqp_interrupt()\n");
+		s->async->events |= COMEDI_CB_ERROR;
+	}
 
-		if (loop_limit <= 0) {
-			dev_warn(dev->class_dev,
-				 "loop_limit reached in daqp_interrupt()\n");
-			s->async->events |= COMEDI_CB_ERROR;
-		}
+	comedi_handle_events(dev, s);
 
-		comedi_handle_events(dev, s);
-	}
 	return IRQ_HANDLED;
 }
 
@@ -624,8 +612,6 @@ static int daqp_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
 	if (ret)
 		return ret;
 
-	devpriv->interrupt_mode = buffer;
-
 	/* Start conversion */
 	outb(DAQP_CMD_ARM | DAQP_CMD_FIFO_DATA, dev->iobase + DAQP_CMD_REG);
 
-- 
2.5.1



More information about the devel mailing list