From 15cf0617c0186c24f8d6ff7fcf2bf505878f351e Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 4 Nov 2014 10:55:14 -0700 Subject: [PATCH] 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 Reviewed-by: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- .../comedi/drivers/addi-data/hwdrv_apci3120.c | 35 ---------------------- drivers/staging/comedi/drivers/addi_apci_3120.c | 15 +++++++++- 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 0c9a655..7c6dec1 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 ec2077c..c67c10f 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; } -- 2.7.4