summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH Hartley Sweeten <hsweeten@visionengravers.com>2014-11-04 10:55:14 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-11-07 09:34:04 -0800
commit15cf0617c0186c24f8d6ff7fcf2bf505878f351e (patch)
treeb9ba326ad535a43c89be455263d97e5eb6a38938
parentdcb5e2c4dfa66aea823e37956ed0389491ed35ab (diff)
staging: comedi: addi_apci_3120: fix timer (*insn_read)
The timer subdevice in this driver does not follow the comedi API. Fix the (*insn_read) to work correctly. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Reviewed-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c35
-rw-r--r--drivers/staging/comedi/drivers/addi_apci_3120.c15
2 files changed, 14 insertions, 36 deletions
diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c
index 0c9a6550f644..7c6dec1aaa45 100644
--- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c
+++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c
@@ -608,38 +608,3 @@ static int apci3120_write_insn_timer(struct comedi_device *dev,
return insn->n;
}
-
-/*
- * Read the Timer value
- *
- * for Timer: data[0]= Timer constant
- *
- * for watchdog: data[0] = 0 (still running)
- * = 1 (run down)
- */
-static int apci3120_read_insn_timer(struct comedi_device *dev,
- struct comedi_subdevice *s,
- struct comedi_insn *insn,
- unsigned int *data)
-{
- struct apci3120_private *devpriv = dev->private;
- unsigned int status;
-
- if ((devpriv->b_Timer2Mode != APCI3120_WATCHDOG)
- && (devpriv->b_Timer2Mode != APCI3120_TIMER)) {
- dev_err(dev->class_dev, "timer2 not configured\n");
- }
- if (devpriv->b_Timer2Mode == APCI3120_TIMER) {
- data[0] = apci3120_timer_read(dev, 2);
- } else {
- /* Read watch dog status */
- status = inw(dev->iobase + APCI3120_STATUS_REG);
- if (status & APCI3120_STATUS_TIMER2_INT) {
- apci3120_clr_timer2_interrupt(dev);
- data[0] = 1;
- } else {
- data[0] = 0;
- }
- }
- return insn->n;
-}
diff --git a/drivers/staging/comedi/drivers/addi_apci_3120.c b/drivers/staging/comedi/drivers/addi_apci_3120.c
index ec2077cb68f0..c67c10fc7d66 100644
--- a/drivers/staging/comedi/drivers/addi_apci_3120.c
+++ b/drivers/staging/comedi/drivers/addi_apci_3120.c
@@ -447,6 +447,19 @@ static int apci3120_do_insn_bits(struct comedi_device *dev,
return insn->n;
}
+static int apci3120_timer_insn_read(struct comedi_device *dev,
+ struct comedi_subdevice *s,
+ struct comedi_insn *insn,
+ unsigned int *data)
+{
+ int i;
+
+ for (i = 0; i < insn->n; i++)
+ data[i] = apci3120_timer_read(dev, 2);
+
+ return insn->n;
+}
+
static void apci3120_dma_alloc(struct comedi_device *dev)
{
struct apci3120_private *devpriv = dev->private;
@@ -618,8 +631,8 @@ static int apci3120_auto_attach(struct comedi_device *dev,
s->n_chan = 1;
s->maxdata = 0x00ffffff;
s->insn_write = apci3120_write_insn_timer;
- s->insn_read = apci3120_read_insn_timer;
s->insn_config = apci3120_config_insn_timer;
+ s->insn_read = apci3120_timer_insn_read;
return 0;
}