]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
staging: comedi: addi_apci_3120: remove scanning from ai (*insn_read)
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Tue, 4 Nov 2014 17:54:28 +0000 (10:54 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 7 Nov 2014 17:34:01 +0000 (09:34 -0800)
(*insn_read) functions are supposed to do simple polled reads of a single
channel. This driver tries to be tricky and allow passing a chanlist in
the analog input (*insn_config) to allow the (*insn_read) to do chanlist
scanning with or without interrupts.

The (*insn_config) doesn't follow the comedi API and this operation mode
is not part of the API.

Remove the scanning support from the (*insn_read) as well as the support
code in the (*insn_config) and interrupt handler.

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>
drivers/staging/comedi/drivers/addi-data/hwdrv_apci3120.c

index 0e76b656035dad559f4a31b0e6b3f278d12a572a..2656e53999f8ea386c7dc0029351a582ac6beb34 100644 (file)
@@ -110,43 +110,18 @@ static int apci3120_ai_insn_config(struct comedi_device *dev,
                                   unsigned int *data)
 {
        struct apci3120_private *devpriv = dev->private;
-       unsigned int i;
 
-       if ((data[0] != APCI3120_EOC_MODE) && (data[0] != APCI3120_EOS_MODE))
+       if (data[0] != APCI3120_EOC_MODE)
                return -1;
 
        /*  Check for Conversion time to be added */
        devpriv->ui_EocEosConversionTime = data[2];
 
-       if (data[0] == APCI3120_EOS_MODE) {
-
-               /* Test the number of the channel */
-               for (i = 0; i < data[3]; i++) {
-
-                       if (CR_CHAN(data[4 + i]) >= s->n_chan) {
-                               dev_err(dev->class_dev, "bad channel list\n");
-                               return -2;
-                       }
-               }
-
-               devpriv->b_InterruptMode = APCI3120_EOS_MODE;
-
-               if (data[1])
-                       devpriv->b_EocEosInterrupt = APCI3120_ENABLE;
-               else
-                       devpriv->b_EocEosInterrupt = APCI3120_DISABLE;
-               /*  Copy channel list and Range List to devpriv */
-               devpriv->ui_AiNbrofChannels = data[3];
-               for (i = 0; i < devpriv->ui_AiNbrofChannels; i++)
-                       devpriv->ui_AiChannelList[i] = data[4 + i];
-
-       } else {                        /*  EOC */
-               devpriv->b_InterruptMode = APCI3120_EOC_MODE;
-               if (data[1])
-                       devpriv->b_EocEosInterrupt = APCI3120_ENABLE;
-               else
-                       devpriv->b_EocEosInterrupt = APCI3120_DISABLE;
-       }
+       devpriv->b_InterruptMode = APCI3120_EOC_MODE;
+       if (data[1])
+               devpriv->b_EocEosInterrupt = APCI3120_ENABLE;
+       else
+               devpriv->b_EocEosInterrupt = APCI3120_DISABLE;
 
        return insn->n;
 }
@@ -186,11 +161,6 @@ static int apci3120_setup_chan_list(struct comedi_device *dev,
        return 1;               /*  we can serve this with scan logic */
 }
 
-/*
- * Reads analog input in synchronous mode EOC and EOS is selected
- * as per configured if no conversion time is set uses default
- * conversion time 10 microsec.
- */
 static int apci3120_ai_insn_read(struct comedi_device *dev,
                                 struct comedi_subdevice *s,
                                 struct comedi_insn *insn,
@@ -266,60 +236,6 @@ static int apci3120_ai_insn_read(struct comedi_device *dev,
                        }
 
                        break;
-
-               case APCI3120_EOS_MODE:
-                       apci3120_ai_reset_fifo(dev);
-
-                       if (!apci3120_setup_chan_list(dev, s,
-                                       devpriv->ui_AiNbrofChannels,
-                                       devpriv->ui_AiChannelList))
-                               return -EINVAL;
-
-                       /* Initialize Timer 0 mode 2 */
-                       apci3120_timer_set_mode(dev, 0, APCI3120_TIMER_MODE2);
-
-                       /* Set the conversion time */
-                       apci3120_timer_write(dev, 0, divisor);
-
-                       /* Set the scan bit */
-                       devpriv->mode |= APCI3120_MODE_SCAN_ENA;
-                       outb(devpriv->mode, dev->iobase + APCI3120_MODE_REG);
-
-                       /* If Interrupt function is loaded */
-                       if (devpriv->b_EocEosInterrupt == APCI3120_ENABLE) {
-                               devpriv->mode |= APCI3120_MODE_EOS_IRQ_ENA;
-                               inw(dev->iobase + 0);
-                       }
-
-                       outb(devpriv->mode, dev->iobase + APCI3120_MODE_REG);
-
-                       inw(dev->iobase + APCI3120_RD_STATUS);
-
-                       apci3120_timer_enable(dev, 0, true);
-
-                       /* Start conversion */
-                       outw(0, dev->iobase + APCI3120_START_CONVERSION);
-
-                       /* Waiting of end of conversion if interrupt is not installed */
-                       if (devpriv->b_EocEosInterrupt == APCI3120_DISABLE) {
-                               /* Waiting the end of conversion */
-                               do {
-                                       us_TmpValue = inw(dev->iobase +
-                                                         APCI3120_RD_STATUS);
-                               } while ((us_TmpValue & APCI3120_EOS) !=
-                                        APCI3120_EOS);
-
-                               for (i = 0; i < devpriv->ui_AiNbrofChannels;
-                                       i++) {
-                                       /* Read the result in FIFO and write them in shared memory */
-                                       us_TmpValue = inw(dev->iobase);
-                                       data[i] = (unsigned int) us_TmpValue;
-                               }
-
-                               devpriv->b_InterruptMode = APCI3120_EOC_MODE;   /*  Restore defaults */
-                       }
-                       break;
-
                default:
                        dev_err(dev->class_dev, "inputs wrong\n");
 
@@ -908,8 +824,7 @@ static irqreturn_t apci3120_interrupt(int irq, void *d)
        struct apci3120_private *devpriv = dev->private;
        struct comedi_subdevice *s = dev->read_subdev;
        unsigned short int_daq;
-       unsigned int int_amcc, ui_Check, i;
-       unsigned short us_TmpValue;
+       unsigned int int_amcc, ui_Check;
 
        ui_Check = 1;
 
@@ -964,21 +879,7 @@ static irqreturn_t apci3120_interrupt(int irq, void *d)
                                devpriv->mode |= APCI3120_MODE_EOS_IRQ_ENA;
                                outb(devpriv->mode,
                                     dev->iobase + APCI3120_MODE_REG);
-                       } else {
-                               ui_Check = 0;
-                               for (i = 0; i < devpriv->ui_AiNbrofChannels;
-                                       i++) {
-                                       us_TmpValue = inw(dev->iobase + 0);
-                                       devpriv->ui_AiReadData[i] =
-                                               (unsigned int) us_TmpValue;
-                               }
-                               devpriv->b_EocEosInterrupt = APCI3120_DISABLE;
-                               devpriv->b_InterruptMode = APCI3120_EOC_MODE;
-
-                               send_sig(SIGIO, devpriv->tsk_Current, 0);       /*  send signal to the sample */
-
                        }
-
                } else {
                        devpriv->mode &= ~APCI3120_MODE_EOS_IRQ_ENA;
                        outb(devpriv->mode, dev->iobase + APCI3120_MODE_REG);