Staging: comedi: adv_pci1710: Correct AI scan count and channel checks
authorIan Abbott <abbotti@mev.co.uk>
Wed, 20 Jan 2010 13:04:47 +0000 (13:04 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 4 Mar 2010 00:42:47 +0000 (16:42 -0800)
For AI commands, the internal channel list used to check incoming
data was only set up partially if the channel list contained
repeats.  Set it up fully.  Also the current scan position was not
updated properly when moving a block of data from the FIFO unless
a whole number of scans was moved.

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/comedi/drivers/adv_pci1710.c

index 03c73a889048bd8f3c1e8982dff3a53aaf7cd556..82433864094ffea5395f25f0fa33104416a73133 100644 (file)
@@ -724,6 +724,7 @@ static int move_block_from_fifo(struct comedi_device *dev,
                        devpriv->ai_act_scan++;
                }
        }
+       s->async->cur_chan = j;
        DPRINTK("adv_pci1710 EDBG: END: move_block_from_fifo(...)\n");
        return 0;
 }
@@ -1230,6 +1231,12 @@ static void setup_channel_list(struct comedi_device *dev,
                DPRINTK("GS: %2d. [%4x]=%4x %4x\n", i, chanprog, range,
                        devpriv->act_chanlist[i]);
        }
+#ifdef PCI171x_PARANOIDCHECK
+       for ( ; i < n_chan; i++) { /* store remainder of channel list */
+               devpriv->act_chanlist[i] =
+                   (CR_CHAN(chanlist[i]) << 12) & 0xf000;
+       }
+#endif
 
        devpriv->ai_et_MuxVal =
            CR_CHAN(chanlist[0]) | (CR_CHAN(chanlist[seglen - 1]) << 8);