aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/comedi/drivers/ni_labpc.c')
-rw-r--r--drivers/staging/comedi/drivers/ni_labpc.c35
1 files changed, 19 insertions, 16 deletions
diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c
index ab8f37022a3..897359d79e5 100644
--- a/drivers/staging/comedi/drivers/ni_labpc.c
+++ b/drivers/staging/comedi/drivers/ni_labpc.c
@@ -1241,7 +1241,9 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
1241 else 1241 else
1242 channel = CR_CHAN(cmd->chanlist[0]); 1242 channel = CR_CHAN(cmd->chanlist[0]);
1243 /* munge channel bits for differential / scan disabled mode */ 1243 /* munge channel bits for differential / scan disabled mode */
1244 if (labpc_ai_scan_mode(cmd) != MODE_SINGLE_CHAN && aref == AREF_DIFF) 1244 if ((labpc_ai_scan_mode(cmd) == MODE_SINGLE_CHAN ||
1245 labpc_ai_scan_mode(cmd) == MODE_SINGLE_CHAN_INTERVAL) &&
1246 aref == AREF_DIFF)
1245 channel *= 2; 1247 channel *= 2;
1246 devpriv->command1_bits |= ADC_CHAN_BITS(channel); 1248 devpriv->command1_bits |= ADC_CHAN_BITS(channel);
1247 devpriv->command1_bits |= thisboard->ai_range_code[range]; 1249 devpriv->command1_bits |= thisboard->ai_range_code[range];
@@ -1257,21 +1259,6 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
1257 devpriv->write_byte(devpriv->command1_bits, 1259 devpriv->write_byte(devpriv->command1_bits,
1258 dev->iobase + COMMAND1_REG); 1260 dev->iobase + COMMAND1_REG);
1259 } 1261 }
1260 /* setup any external triggering/pacing (command4 register) */
1261 devpriv->command4_bits = 0;
1262 if (cmd->convert_src != TRIG_EXT)
1263 devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT;
1264 /* XXX should discard first scan when using interval scanning
1265 * since manual says it is not synced with scan clock */
1266 if (labpc_use_continuous_mode(cmd) == 0) {
1267 devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT;
1268 if (cmd->scan_begin_src == TRIG_EXT)
1269 devpriv->command4_bits |= EXT_SCAN_EN_BIT;
1270 }
1271 /* single-ended/differential */
1272 if (aref == AREF_DIFF)
1273 devpriv->command4_bits |= ADC_DIFF_BIT;
1274 devpriv->write_byte(devpriv->command4_bits, dev->iobase + COMMAND4_REG);
1275 1262
1276 devpriv->write_byte(cmd->chanlist_len, 1263 devpriv->write_byte(cmd->chanlist_len,
1277 dev->iobase + INTERVAL_COUNT_REG); 1264 dev->iobase + INTERVAL_COUNT_REG);
@@ -1349,6 +1336,22 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
1349 devpriv->command3_bits &= ~ADC_FNE_INTR_EN_BIT; 1336 devpriv->command3_bits &= ~ADC_FNE_INTR_EN_BIT;
1350 devpriv->write_byte(devpriv->command3_bits, dev->iobase + COMMAND3_REG); 1337 devpriv->write_byte(devpriv->command3_bits, dev->iobase + COMMAND3_REG);
1351 1338
1339 /* setup any external triggering/pacing (command4 register) */
1340 devpriv->command4_bits = 0;
1341 if (cmd->convert_src != TRIG_EXT)
1342 devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT;
1343 /* XXX should discard first scan when using interval scanning
1344 * since manual says it is not synced with scan clock */
1345 if (labpc_use_continuous_mode(cmd) == 0) {
1346 devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT;
1347 if (cmd->scan_begin_src == TRIG_EXT)
1348 devpriv->command4_bits |= EXT_SCAN_EN_BIT;
1349 }
1350 /* single-ended/differential */
1351 if (aref == AREF_DIFF)
1352 devpriv->command4_bits |= ADC_DIFF_BIT;
1353 devpriv->write_byte(devpriv->command4_bits, dev->iobase + COMMAND4_REG);
1354
1352 /* startup acquisition */ 1355 /* startup acquisition */
1353 1356
1354 /* command2 reg */ 1357 /* command2 reg */