staging: comedi: drivers: use comedi_fc.h cmdtest helpers
[pandora-kernel.git] / drivers / staging / comedi / drivers / adl_pci9111.c
index ebd819e..a87192a 100644 (file)
@@ -130,11 +130,8 @@ static const struct comedi_lrange pci9111_ai_range = {
        }
 };
 
-/*  Private data structure */
-
 struct pci9111_private_data {
-       unsigned long lcr_io_base; /* Local configuration register base
-                                   * address */
+       unsigned long lcr_io_base;
 
        int stop_counter;
        int stop_is_none;
@@ -144,7 +141,7 @@ struct pci9111_private_data {
        unsigned int chunk_counter;
        unsigned int chunk_num_samples;
 
-       int ao_readback;        /*  Last written analog output data */
+       int ao_readback;
 
        unsigned int div1;
        unsigned int div2;
@@ -152,10 +149,6 @@ struct pci9111_private_data {
        short ai_bounce_buffer[2 * PCI9111_FIFO_HALF_SIZE];
 };
 
-/*  ------------------------------------------------------------------ */
-/*  PLX9050 SECTION */
-/*  ------------------------------------------------------------------ */
-
 #define PLX9050_REGISTER_INTERRUPT_CONTROL 0x4c
 
 #define PLX9050_LINTI1_ENABLE          (1 << 0)
@@ -191,12 +184,6 @@ static void plx9050_interrupt_control(unsigned long io_base,
        outb(flags, io_base + PLX9050_REGISTER_INTERRUPT_CONTROL);
 }
 
-/*  ------------------------------------------------------------------ */
-/*  MISCELLANEOUS SECTION */
-/*  ------------------------------------------------------------------ */
-
-/*  8254 timer */
-
 static void pci9111_timer_set(struct comedi_device *dev)
 {
        struct pci9111_private_data *dev_private = dev->private;
@@ -317,19 +304,12 @@ static void pci9111_fifo_reset(struct comedi_device *dev)
        outb(0, int_ctrl_reg);
 }
 
-/*  ------------------------------------------------------------------ */
-/*  HARDWARE TRIGGERED ANALOG INPUT SECTION */
-/*  ------------------------------------------------------------------ */
-
-/*  Cancel analog input autoscan */
-
 static int pci9111_ai_cancel(struct comedi_device *dev,
                             struct comedi_subdevice *s)
 {
        struct pci9111_private_data *dev_private = dev->private;
 
        /*  Disable interrupts */
-
        plx9050_interrupt_control(dev_private->lcr_io_base, true, true, true,
                                  true, false);
 
@@ -352,7 +332,7 @@ static int pci9111_ai_do_cmd_test(struct comedi_device *dev,
        int range, reference;
        int i;
 
-       /* Step 1 : check if trigger are trivialy valid */
+       /* Step 1 : check if triggers are trivially valid */
 
        error |= cfc_check_trigger_src(&cmd->start_src, TRIG_NOW);
        error |= cfc_check_trigger_src(&cmd->scan_begin_src,
@@ -366,33 +346,22 @@ static int pci9111_ai_do_cmd_test(struct comedi_device *dev,
        if (error)
                return 1;
 
-       /*  step 2 : make sure trigger sources are unique and mutually
-        *  compatible */
+       /* Step 2a : make sure trigger sources are unique */
 
-       if (cmd->start_src != TRIG_NOW)
-               error++;
+       error |= cfc_check_trigger_is_unique(cmd->scan_begin_src);
+       error |= cfc_check_trigger_is_unique(cmd->convert_src);
+       error |= cfc_check_trigger_is_unique(cmd->stop_src);
 
-       if ((cmd->scan_begin_src != TRIG_TIMER) &&
-           (cmd->scan_begin_src != TRIG_FOLLOW) &&
-           (cmd->scan_begin_src != TRIG_EXT))
-               error++;
+       /* Step 2b : and mutually compatible */
 
-       if ((cmd->convert_src != TRIG_TIMER) && (cmd->convert_src != TRIG_EXT))
-               error++;
        if ((cmd->convert_src == TRIG_TIMER) &&
            !((cmd->scan_begin_src == TRIG_TIMER) ||
              (cmd->scan_begin_src == TRIG_FOLLOW)))
-               error++;
+               error |= -EINVAL;
        if ((cmd->convert_src == TRIG_EXT) &&
            !((cmd->scan_begin_src == TRIG_EXT) ||
              (cmd->scan_begin_src == TRIG_FOLLOW)))
-               error++;
-
-
-       if (cmd->scan_end_src != TRIG_COUNT)
-               error++;
-       if ((cmd->stop_src != TRIG_COUNT) && (cmd->stop_src != TRIG_NONE))
-               error++;
+               error |= -EINVAL;
 
        if (error)
                return 2;
@@ -454,7 +423,7 @@ static int pci9111_ai_do_cmd_test(struct comedi_device *dev,
                i8253_cascade_ns_to_timer_2div(PCI9111_8254_CLOCK_PERIOD_NS,
                                               &dev_private->div1,
                                               &dev_private->div2,
-                                              &(cmd->convert_arg),
+                                              &cmd->convert_arg,
                                               cmd->flags & TRIG_ROUND_MASK);
                if (tmp != cmd->convert_arg)
                        error++;
@@ -525,8 +494,6 @@ static int pci9111_ai_do_cmd_test(struct comedi_device *dev,
 
 }
 
-/*  Analog input command */
-
 static int pci9111_ai_do_cmd(struct comedi_device *dev,
                             struct comedi_subdevice *s)
 {
@@ -582,13 +549,6 @@ static int pci9111_ai_do_cmd(struct comedi_device *dev,
        dev_private->scan_delay = 0;
        switch (async_cmd->convert_src) {
        case TRIG_TIMER:
-               i8253_cascade_ns_to_timer_2div(PCI9111_8254_CLOCK_PERIOD_NS,
-                                              &dev_private->div1,
-                                              &dev_private->div2,
-                                              &(async_cmd->convert_arg),
-                                              async_cmd->
-                                              flags & TRIG_ROUND_MASK);
-
                pci9111_trigger_source_set(dev, software);
                pci9111_timer_set(dev);
                pci9111_fifo_reset(dev);
@@ -648,10 +608,6 @@ static void pci9111_ai_munge(struct comedi_device *dev,
                array[i] = ((array[i] >> shift) & maxdata) ^ invert;
 }
 
-/*  ------------------------------------------------------------------ */
-/*  INTERRUPT SECTION */
-/*  ------------------------------------------------------------------ */
-
 static irqreturn_t pci9111_interrupt(int irq, void *p_device)
 {
        struct comedi_device *dev = p_device;
@@ -791,12 +747,6 @@ static irqreturn_t pci9111_interrupt(int irq, void *p_device)
        return IRQ_HANDLED;
 }
 
-/*  ------------------------------------------------------------------ */
-/*  INSTANT ANALOG INPUT OUTPUT SECTION */
-/*  ------------------------------------------------------------------ */
-
-/*  analog instant input */
-
 static int pci9111_ai_insn_read(struct comedi_device *dev,
                                struct comedi_subdevice *s,
                                struct comedi_insn *insn, unsigned int *data)
@@ -909,18 +859,11 @@ static int pci9111_do_insn_bits(struct comedi_device *dev,
        return insn->n;
 }
 
-/*  ------------------------------------------------------------------ */
-/*  INITIALISATION SECTION */
-/*  ------------------------------------------------------------------ */
-
-/*  Reset device */
-
 static int pci9111_reset(struct comedi_device *dev)
 {
        struct pci9111_private_data *dev_private = dev->private;
 
        /*  Set trigger source to software */
-
        plx9050_interrupt_control(dev_private->lcr_io_base, true, true, true,
                                  true, false);
 
@@ -1027,7 +970,6 @@ static void pci9111_detach(struct comedi_device *dev)
        if (pcidev) {
                if (dev->iobase)
                        comedi_pci_disable(pcidev);
-               pci_dev_put(pcidev);
        }
 }