summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Abbott <abbotti@mev.co.uk>2013-03-18 17:19:08 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-03-25 11:30:06 -0700
commit8d688377867410428b21789e815f28a4631ee8f5 (patch)
tree303a76ece70ca6188a7f7b4ee2408fa200d916e4
parent5afb56cda90c100e6f9d62747d1b8cf94d0936a4 (diff)
staging: comedi: amplc_dio200: refactor dio200_handle_read_intr()
Refactor `dio200_handle_read_intr()` to fix checkpatch warning about too many leading tabs. Factor out the part that puts the scan data into the asynchronous command data buffer and checks for end of acquisition into new function `dio200_read_scan_intr()`. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/staging/comedi/drivers/amplc_dio200.c77
1 files changed, 40 insertions, 37 deletions
diff --git a/drivers/staging/comedi/drivers/amplc_dio200.c b/drivers/staging/comedi/drivers/amplc_dio200.c
index 38026781b931..e00dda1170cf 100644
--- a/drivers/staging/comedi/drivers/amplc_dio200.c
+++ b/drivers/staging/comedi/drivers/amplc_dio200.c
@@ -791,6 +791,44 @@ dio200_inttrig_start_intr(struct comedi_device *dev, struct comedi_subdevice *s,
return 1;
}
+static void dio200_read_scan_intr(struct comedi_device *dev,
+ struct comedi_subdevice *s,
+ unsigned int triggered)
+{
+ struct dio200_subdev_intr *subpriv = s->private;
+ unsigned short val;
+ unsigned int n, ch, len;
+
+ val = 0;
+ len = s->async->cmd.chanlist_len;
+ for (n = 0; n < len; n++) {
+ ch = CR_CHAN(s->async->cmd.chanlist[n]);
+ if (triggered & (1U << ch))
+ val |= (1U << n);
+ }
+ /* Write the scan to the buffer. */
+ if (comedi_buf_put(s->async, val)) {
+ s->async->events |= (COMEDI_CB_BLOCK | COMEDI_CB_EOS);
+ } else {
+ /* Error! Stop acquisition. */
+ dio200_stop_intr(dev, s);
+ s->async->events |= COMEDI_CB_ERROR | COMEDI_CB_OVERFLOW;
+ comedi_error(dev, "buffer overflow");
+ }
+
+ /* Check for end of acquisition. */
+ if (!subpriv->continuous) {
+ /* stop_src == TRIG_COUNT */
+ if (subpriv->stopcount > 0) {
+ subpriv->stopcount--;
+ if (subpriv->stopcount == 0) {
+ s->async->events |= COMEDI_CB_EOA;
+ dio200_stop_intr(dev, s);
+ }
+ }
+ }
+}
+
/*
* This is called from the interrupt service routine to handle a read
* scan on an 'INTERRUPT' subdevice.
@@ -855,44 +893,9 @@ static int dio200_handle_read_intr(struct comedi_device *dev,
* interested in (just in case there's a race
* condition).
*/
- if (triggered & subpriv->enabled_isns) {
+ if (triggered & subpriv->enabled_isns)
/* Collect scan data. */
- short val;
- unsigned int n, ch, len;
-
- val = 0;
- len = s->async->cmd.chanlist_len;
- for (n = 0; n < len; n++) {
- ch = CR_CHAN(s->async->cmd.chanlist[n]);
- if (triggered & (1U << ch))
- val |= (1U << n);
- }
- /* Write the scan to the buffer. */
- if (comedi_buf_put(s->async, val)) {
- s->async->events |= (COMEDI_CB_BLOCK |
- COMEDI_CB_EOS);
- } else {
- /* Error! Stop acquisition. */
- dio200_stop_intr(dev, s);
- s->async->events |= COMEDI_CB_ERROR
- | COMEDI_CB_OVERFLOW;
- comedi_error(dev, "buffer overflow");
- }
-
- /* Check for end of acquisition. */
- if (!subpriv->continuous) {
- /* stop_src == TRIG_COUNT */
- if (subpriv->stopcount > 0) {
- subpriv->stopcount--;
- if (subpriv->stopcount == 0) {
- s->async->events |=
- COMEDI_CB_EOA;
- dio200_stop_intr(dev,
- s);
- }
- }
- }
- }
+ dio200_read_scan_intr(dev, s, triggered);
}
}
spin_unlock_irqrestore(&subpriv->spinlock, flags);