aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIan Abbott <abbotti@mev.co.uk>2012-09-19 14:37:37 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-09-21 12:29:53 -0400
commit6f73fbcec27be8b074555e18d9f50c3013e4d802 (patch)
tree5aed61214370749969876c145378036bff5cb441
parent5743aaac2938eb841e14879b0f73afb7fca6f0ad (diff)
staging: comedi: ni_labpc: pass ai scan mode through various functions
Pass the `enum scan_mode` value calculated by `labpc_ai_scan_mode()` as a parameter to various other functions so they don't have to call it themselves. Amongst others, the affected functions include `labpc_adc_timing()`, `labpc_ai_convert_period()` and `labpc_ai_scan_period()`. `labpc_adc_timing()` calls `labpc_ai_convert_period()` and `labpc_ai_scan_period()` in several places, but the returned values are the same each time, so change it to just call those functions once and re-use the return values. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/staging/comedi/drivers/ni_labpc.c124
1 files changed, 61 insertions, 63 deletions
diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c
index 2d060b5cc1b7..200099e4c220 100644
--- a/drivers/staging/comedi/drivers/ni_labpc.c
+++ b/drivers/staging/comedi/drivers/ni_labpc.c
@@ -206,6 +206,13 @@ NI manuals:
206#define INIT_A1_BITS 0x70 206#define INIT_A1_BITS 0x70
207#define COUNTER_B_BASE_REG 0x18 207#define COUNTER_B_BASE_REG 0x18
208 208
209enum scan_mode {
210 MODE_SINGLE_CHAN,
211 MODE_SINGLE_CHAN_INTERVAL,
212 MODE_MULT_CHAN_UP,
213 MODE_MULT_CHAN_DOWN,
214};
215
209static int labpc_cancel(struct comedi_device *dev, struct comedi_subdevice *s); 216static int labpc_cancel(struct comedi_device *dev, struct comedi_subdevice *s);
210static irqreturn_t labpc_interrupt(int irq, void *d); 217static irqreturn_t labpc_interrupt(int irq, void *d);
211static int labpc_drain_fifo(struct comedi_device *dev); 218static int labpc_drain_fifo(struct comedi_device *dev);
@@ -236,7 +243,8 @@ static int labpc_eeprom_write_insn(struct comedi_device *dev,
236 struct comedi_subdevice *s, 243 struct comedi_subdevice *s,
237 struct comedi_insn *insn, 244 struct comedi_insn *insn,
238 unsigned int *data); 245 unsigned int *data);
239static void labpc_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd); 246static void labpc_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd,
247 enum scan_mode scan_mode);
240#ifdef CONFIG_ISA_DMA_API 248#ifdef CONFIG_ISA_DMA_API
241static unsigned int labpc_suggest_transfer_size(struct comedi_cmd cmd); 249static unsigned int labpc_suggest_transfer_size(struct comedi_cmd cmd);
242#endif 250#endif
@@ -254,13 +262,6 @@ static int labpc_eeprom_write(struct comedi_device *dev,
254static void write_caldac(struct comedi_device *dev, unsigned int channel, 262static void write_caldac(struct comedi_device *dev, unsigned int channel,
255 unsigned int value); 263 unsigned int value);
256 264
257enum scan_mode {
258 MODE_SINGLE_CHAN,
259 MODE_SINGLE_CHAN_INTERVAL,
260 MODE_MULT_CHAN_UP,
261 MODE_MULT_CHAN_DOWN,
262};
263
264/* analog input ranges */ 265/* analog input ranges */
265#define NUM_LABPC_PLUS_AI_RANGES 16 266#define NUM_LABPC_PLUS_AI_RANGES 16
266/* indicates unipolar ranges */ 267/* indicates unipolar ranges */
@@ -839,15 +840,14 @@ static enum scan_mode labpc_ai_scan_mode(const struct comedi_cmd *cmd)
839} 840}
840 841
841static int labpc_ai_chanlist_invalid(const struct comedi_device *dev, 842static int labpc_ai_chanlist_invalid(const struct comedi_device *dev,
842 const struct comedi_cmd *cmd) 843 const struct comedi_cmd *cmd,
844 enum scan_mode mode)
843{ 845{
844 int mode, channel, range, aref, i; 846 int channel, range, aref, i;
845 847
846 if (cmd->chanlist == NULL) 848 if (cmd->chanlist == NULL)
847 return 0; 849 return 0;
848 850
849 mode = labpc_ai_scan_mode(cmd);
850
851 if (mode == MODE_SINGLE_CHAN) 851 if (mode == MODE_SINGLE_CHAN)
852 return 0; 852 return 0;
853 853
@@ -911,9 +911,10 @@ static int labpc_ai_chanlist_invalid(const struct comedi_device *dev,
911 return 0; 911 return 0;
912} 912}
913 913
914static int labpc_use_continuous_mode(const struct comedi_cmd *cmd) 914static int labpc_use_continuous_mode(const struct comedi_cmd *cmd,
915 enum scan_mode mode)
915{ 916{
916 if (labpc_ai_scan_mode(cmd) == MODE_SINGLE_CHAN) 917 if (mode == MODE_SINGLE_CHAN)
917 return 1; 918 return 1;
918 919
919 if (cmd->scan_begin_src == TRIG_FOLLOW) 920 if (cmd->scan_begin_src == TRIG_FOLLOW)
@@ -922,24 +923,25 @@ static int labpc_use_continuous_mode(const struct comedi_cmd *cmd)
922 return 0; 923 return 0;
923} 924}
924 925
925static unsigned int labpc_ai_convert_period(const struct comedi_cmd *cmd) 926static unsigned int labpc_ai_convert_period(const struct comedi_cmd *cmd,
927 enum scan_mode mode)
926{ 928{
927 if (cmd->convert_src != TRIG_TIMER) 929 if (cmd->convert_src != TRIG_TIMER)
928 return 0; 930 return 0;
929 931
930 if (labpc_ai_scan_mode(cmd) == MODE_SINGLE_CHAN && 932 if (mode == MODE_SINGLE_CHAN && cmd->scan_begin_src == TRIG_TIMER)
931 cmd->scan_begin_src == TRIG_TIMER)
932 return cmd->scan_begin_arg; 933 return cmd->scan_begin_arg;
933 934
934 return cmd->convert_arg; 935 return cmd->convert_arg;
935} 936}
936 937
937static void labpc_set_ai_convert_period(struct comedi_cmd *cmd, unsigned int ns) 938static void labpc_set_ai_convert_period(struct comedi_cmd *cmd,
939 enum scan_mode mode, unsigned int ns)
938{ 940{
939 if (cmd->convert_src != TRIG_TIMER) 941 if (cmd->convert_src != TRIG_TIMER)
940 return; 942 return;
941 943
942 if (labpc_ai_scan_mode(cmd) == MODE_SINGLE_CHAN && 944 if (mode == MODE_SINGLE_CHAN &&
943 cmd->scan_begin_src == TRIG_TIMER) { 945 cmd->scan_begin_src == TRIG_TIMER) {
944 cmd->scan_begin_arg = ns; 946 cmd->scan_begin_arg = ns;
945 if (cmd->convert_arg > cmd->scan_begin_arg) 947 if (cmd->convert_arg > cmd->scan_begin_arg)
@@ -948,25 +950,25 @@ static void labpc_set_ai_convert_period(struct comedi_cmd *cmd, unsigned int ns)
948 cmd->convert_arg = ns; 950 cmd->convert_arg = ns;
949} 951}
950 952
951static unsigned int labpc_ai_scan_period(const struct comedi_cmd *cmd) 953static unsigned int labpc_ai_scan_period(const struct comedi_cmd *cmd,
954 enum scan_mode mode)
952{ 955{
953 if (cmd->scan_begin_src != TRIG_TIMER) 956 if (cmd->scan_begin_src != TRIG_TIMER)
954 return 0; 957 return 0;
955 958
956 if (labpc_ai_scan_mode(cmd) == MODE_SINGLE_CHAN && 959 if (mode == MODE_SINGLE_CHAN && cmd->convert_src == TRIG_TIMER)
957 cmd->convert_src == TRIG_TIMER)
958 return 0; 960 return 0;
959 961
960 return cmd->scan_begin_arg; 962 return cmd->scan_begin_arg;
961} 963}
962 964
963static void labpc_set_ai_scan_period(struct comedi_cmd *cmd, unsigned int ns) 965static void labpc_set_ai_scan_period(struct comedi_cmd *cmd,
966 enum scan_mode mode, unsigned int ns)
964{ 967{
965 if (cmd->scan_begin_src != TRIG_TIMER) 968 if (cmd->scan_begin_src != TRIG_TIMER)
966 return; 969 return;
967 970
968 if (labpc_ai_scan_mode(cmd) == MODE_SINGLE_CHAN && 971 if (mode == MODE_SINGLE_CHAN && cmd->convert_src == TRIG_TIMER)
969 cmd->convert_src == TRIG_TIMER)
970 return; 972 return;
971 973
972 cmd->scan_begin_arg = ns; 974 cmd->scan_begin_arg = ns;
@@ -978,6 +980,7 @@ static int labpc_ai_cmdtest(struct comedi_device *dev,
978 int err = 0; 980 int err = 0;
979 int tmp, tmp2; 981 int tmp, tmp2;
980 int stop_mask; 982 int stop_mask;
983 enum scan_mode mode;
981 984
982 /* step 1: make sure trigger sources are trivially valid */ 985 /* step 1: make sure trigger sources are trivially valid */
983 986
@@ -1099,14 +1102,15 @@ static int labpc_ai_cmdtest(struct comedi_device *dev,
1099 1102
1100 tmp = cmd->convert_arg; 1103 tmp = cmd->convert_arg;
1101 tmp2 = cmd->scan_begin_arg; 1104 tmp2 = cmd->scan_begin_arg;
1102 labpc_adc_timing(dev, cmd); 1105 mode = labpc_ai_scan_mode(cmd);
1106 labpc_adc_timing(dev, cmd, mode);
1103 if (tmp != cmd->convert_arg || tmp2 != cmd->scan_begin_arg) 1107 if (tmp != cmd->convert_arg || tmp2 != cmd->scan_begin_arg)
1104 err++; 1108 err++;
1105 1109
1106 if (err) 1110 if (err)
1107 return 4; 1111 return 4;
1108 1112
1109 if (labpc_ai_chanlist_invalid(dev, cmd)) 1113 if (labpc_ai_chanlist_invalid(dev, cmd, mode))
1110 return 5; 1114 return 5;
1111 1115
1112 return 0; 1116 return 0;
@@ -1122,6 +1126,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
1122 struct comedi_async *async = s->async; 1126 struct comedi_async *async = s->async;
1123 struct comedi_cmd *cmd = &async->cmd; 1127 struct comedi_cmd *cmd = &async->cmd;
1124 enum transfer_type xfer; 1128 enum transfer_type xfer;
1129 enum scan_mode mode;
1125 unsigned long flags; 1130 unsigned long flags;
1126 1131
1127 if (!dev->irq) { 1132 if (!dev->irq) {
@@ -1187,6 +1192,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
1187 } else 1192 } else
1188 xfer = fifo_not_empty_transfer; 1193 xfer = fifo_not_empty_transfer;
1189 devpriv->current_transfer = xfer; 1194 devpriv->current_transfer = xfer;
1195 mode = labpc_ai_scan_mode(cmd);
1190 1196
1191 /* setup command6 register for 1200 boards */ 1197 /* setup command6 register for 1200 boards */
1192 if (thisboard->register_layout == labpc_1200_layout) { 1198 if (thisboard->register_layout == labpc_1200_layout) {
@@ -1211,7 +1217,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
1211 else 1217 else
1212 devpriv->command6_bits &= ~A1_INTR_EN_BIT; 1218 devpriv->command6_bits &= ~A1_INTR_EN_BIT;
1213 /* are we scanning up or down through channels? */ 1219 /* are we scanning up or down through channels? */
1214 if (labpc_ai_scan_mode(cmd) == MODE_MULT_CHAN_UP) 1220 if (mode == MODE_MULT_CHAN_UP)
1215 devpriv->command6_bits |= ADC_SCAN_UP_BIT; 1221 devpriv->command6_bits |= ADC_SCAN_UP_BIT;
1216 else 1222 else
1217 devpriv->command6_bits &= ~ADC_SCAN_UP_BIT; 1223 devpriv->command6_bits &= ~ADC_SCAN_UP_BIT;
@@ -1222,19 +1228,18 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
1222 1228
1223 /* setup channel list, etc (command1 register) */ 1229 /* setup channel list, etc (command1 register) */
1224 devpriv->command1_bits = 0; 1230 devpriv->command1_bits = 0;
1225 if (labpc_ai_scan_mode(cmd) == MODE_MULT_CHAN_UP) 1231 if (mode == MODE_MULT_CHAN_UP)
1226 channel = CR_CHAN(cmd->chanlist[cmd->chanlist_len - 1]); 1232 channel = CR_CHAN(cmd->chanlist[cmd->chanlist_len - 1]);
1227 else 1233 else
1228 channel = CR_CHAN(cmd->chanlist[0]); 1234 channel = CR_CHAN(cmd->chanlist[0]);
1229 /* munge channel bits for differential / scan disabled mode */ 1235 /* munge channel bits for differential / scan disabled mode */
1230 if (labpc_ai_scan_mode(cmd) != MODE_SINGLE_CHAN && aref == AREF_DIFF) 1236 if (mode != MODE_SINGLE_CHAN && aref == AREF_DIFF)
1231 channel *= 2; 1237 channel *= 2;
1232 devpriv->command1_bits |= ADC_CHAN_BITS(channel); 1238 devpriv->command1_bits |= ADC_CHAN_BITS(channel);
1233 devpriv->command1_bits |= thisboard->ai_range_code[range]; 1239 devpriv->command1_bits |= thisboard->ai_range_code[range];
1234 devpriv->write_byte(devpriv->command1_bits, dev->iobase + COMMAND1_REG); 1240 devpriv->write_byte(devpriv->command1_bits, dev->iobase + COMMAND1_REG);
1235 /* manual says to set scan enable bit on second pass */ 1241 /* manual says to set scan enable bit on second pass */
1236 if (labpc_ai_scan_mode(cmd) == MODE_MULT_CHAN_UP || 1242 if (mode == MODE_MULT_CHAN_UP || mode == MODE_MULT_CHAN_DOWN) {
1237 labpc_ai_scan_mode(cmd) == MODE_MULT_CHAN_DOWN) {
1238 devpriv->command1_bits |= ADC_SCAN_EN_BIT; 1243 devpriv->command1_bits |= ADC_SCAN_EN_BIT;
1239 /* need a brief delay before enabling scan, or scan 1244 /* need a brief delay before enabling scan, or scan
1240 * list will get screwed when you switch 1245 * list will get screwed when you switch
@@ -1249,7 +1254,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
1249 devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT; 1254 devpriv->command4_bits |= EXT_CONVERT_DISABLE_BIT;
1250 /* XXX should discard first scan when using interval scanning 1255 /* XXX should discard first scan when using interval scanning
1251 * since manual says it is not synced with scan clock */ 1256 * since manual says it is not synced with scan clock */
1252 if (labpc_use_continuous_mode(cmd) == 0) { 1257 if (labpc_use_continuous_mode(cmd, mode) == 0) {
1253 devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT; 1258 devpriv->command4_bits |= INTERVAL_SCAN_EN_BIT;
1254 if (cmd->scan_begin_src == TRIG_EXT) 1259 if (cmd->scan_begin_src == TRIG_EXT)
1255 devpriv->command4_bits |= EXT_SCAN_EN_BIT; 1260 devpriv->command4_bits |= EXT_SCAN_EN_BIT;
@@ -1267,7 +1272,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
1267 1272
1268 if (cmd->convert_src == TRIG_TIMER || cmd->scan_begin_src == TRIG_TIMER) { 1273 if (cmd->convert_src == TRIG_TIMER || cmd->scan_begin_src == TRIG_TIMER) {
1269 /* set up pacing */ 1274 /* set up pacing */
1270 labpc_adc_timing(dev, cmd); 1275 labpc_adc_timing(dev, cmd, mode);
1271 /* load counter b0 in mode 3 */ 1276 /* load counter b0 in mode 3 */
1272 ret = labpc_counter_load(dev, dev->iobase + COUNTER_B_BASE_REG, 1277 ret = labpc_counter_load(dev, dev->iobase + COUNTER_B_BASE_REG,
1273 0, devpriv->divisor_b0, 3); 1278 0, devpriv->divisor_b0, 3);
@@ -1277,7 +1282,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
1277 } 1282 }
1278 } 1283 }
1279 /* set up conversion pacing */ 1284 /* set up conversion pacing */
1280 if (labpc_ai_convert_period(cmd)) { 1285 if (labpc_ai_convert_period(cmd, mode)) {
1281 /* load counter a0 in mode 2 */ 1286 /* load counter a0 in mode 2 */
1282 ret = labpc_counter_load(dev, dev->iobase + COUNTER_A_BASE_REG, 1287 ret = labpc_counter_load(dev, dev->iobase + COUNTER_A_BASE_REG,
1283 0, devpriv->divisor_a0, 2); 1288 0, devpriv->divisor_a0, 2);
@@ -1290,7 +1295,7 @@ static int labpc_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
1290 dev->iobase + COUNTER_A_CONTROL_REG); 1295 dev->iobase + COUNTER_A_CONTROL_REG);
1291 1296
1292 /* set up scan pacing */ 1297 /* set up scan pacing */
1293 if (labpc_ai_scan_period(cmd)) { 1298 if (labpc_ai_scan_period(cmd, mode)) {
1294 /* load counter b1 in mode 2 */ 1299 /* load counter b1 in mode 2 */
1295 ret = labpc_counter_load(dev, dev->iobase + COUNTER_B_BASE_REG, 1300 ret = labpc_counter_load(dev, dev->iobase + COUNTER_B_BASE_REG,
1296 1, devpriv->divisor_b1, 2); 1301 1, devpriv->divisor_b1, 2);
@@ -1791,24 +1796,29 @@ static unsigned int labpc_suggest_transfer_size(struct comedi_cmd cmd)
1791#endif 1796#endif
1792 1797
1793/* figures out what counter values to use based on command */ 1798/* figures out what counter values to use based on command */
1794static void labpc_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd) 1799static void labpc_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd,
1800 enum scan_mode mode)
1795{ 1801{
1796 /* max value for 16 bit counter in mode 2 */ 1802 /* max value for 16 bit counter in mode 2 */
1797 const int max_counter_value = 0x10000; 1803 const int max_counter_value = 0x10000;
1798 /* min value for 16 bit counter in mode 2 */ 1804 /* min value for 16 bit counter in mode 2 */
1799 const int min_counter_value = 2; 1805 const int min_counter_value = 2;
1800 unsigned int base_period; 1806 unsigned int base_period;
1807 unsigned int scan_period;
1808 unsigned int convert_period;
1801 1809
1802 /* 1810 /*
1803 * if both convert and scan triggers are TRIG_TIMER, then they 1811 * if both convert and scan triggers are TRIG_TIMER, then they
1804 * both rely on counter b0 1812 * both rely on counter b0
1805 */ 1813 */
1806 if (labpc_ai_convert_period(cmd) && labpc_ai_scan_period(cmd)) { 1814 convert_period = labpc_ai_convert_period(cmd, mode);
1815 scan_period = labpc_ai_scan_period(cmd, mode);
1816 if (convert_period && scan_period) {
1807 /* 1817 /*
1808 * pick the lowest b0 divisor value we can (for maximum input 1818 * pick the lowest b0 divisor value we can (for maximum input
1809 * clock speed on convert and scan counters) 1819 * clock speed on convert and scan counters)
1810 */ 1820 */
1811 devpriv->divisor_b0 = (labpc_ai_scan_period(cmd) - 1) / 1821 devpriv->divisor_b0 = (scan_period - 1) /
1812 (LABPC_TIMER_BASE * max_counter_value) + 1; 1822 (LABPC_TIMER_BASE * max_counter_value) + 1;
1813 if (devpriv->divisor_b0 < min_counter_value) 1823 if (devpriv->divisor_b0 < min_counter_value)
1814 devpriv->divisor_b0 = min_counter_value; 1824 devpriv->divisor_b0 = min_counter_value;
@@ -1822,25 +1832,19 @@ static void labpc_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd)
1822 default: 1832 default:
1823 case TRIG_ROUND_NEAREST: 1833 case TRIG_ROUND_NEAREST:
1824 devpriv->divisor_a0 = 1834 devpriv->divisor_a0 =
1825 (labpc_ai_convert_period(cmd) + 1835 (convert_period + (base_period / 2)) / base_period;
1826 (base_period / 2)) / base_period;
1827 devpriv->divisor_b1 = 1836 devpriv->divisor_b1 =
1828 (labpc_ai_scan_period(cmd) + 1837 (scan_period + (base_period / 2)) / base_period;
1829 (base_period / 2)) / base_period;
1830 break; 1838 break;
1831 case TRIG_ROUND_UP: 1839 case TRIG_ROUND_UP:
1832 devpriv->divisor_a0 = 1840 devpriv->divisor_a0 =
1833 (labpc_ai_convert_period(cmd) + (base_period - 1841 (convert_period + (base_period - 1)) / base_period;
1834 1)) / base_period;
1835 devpriv->divisor_b1 = 1842 devpriv->divisor_b1 =
1836 (labpc_ai_scan_period(cmd) + (base_period - 1843 (scan_period + (base_period - 1)) / base_period;
1837 1)) / base_period;
1838 break; 1844 break;
1839 case TRIG_ROUND_DOWN: 1845 case TRIG_ROUND_DOWN:
1840 devpriv->divisor_a0 = 1846 devpriv->divisor_a0 = convert_period / base_period;
1841 labpc_ai_convert_period(cmd) / base_period; 1847 devpriv->divisor_b1 = scan_period / base_period;
1842 devpriv->divisor_b1 =
1843 labpc_ai_scan_period(cmd) / base_period;
1844 break; 1848 break;
1845 } 1849 }
1846 /* make sure a0 and b1 values are acceptable */ 1850 /* make sure a0 and b1 values are acceptable */
@@ -1853,18 +1857,15 @@ static void labpc_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd)
1853 if (devpriv->divisor_b1 > max_counter_value) 1857 if (devpriv->divisor_b1 > max_counter_value)
1854 devpriv->divisor_b1 = max_counter_value; 1858 devpriv->divisor_b1 = max_counter_value;
1855 /* write corrected timings to command */ 1859 /* write corrected timings to command */
1856 labpc_set_ai_convert_period(cmd, 1860 labpc_set_ai_convert_period(cmd, mode,
1857 base_period * devpriv->divisor_a0); 1861 base_period * devpriv->divisor_a0);
1858 labpc_set_ai_scan_period(cmd, 1862 labpc_set_ai_scan_period(cmd, mode,
1859 base_period * devpriv->divisor_b1); 1863 base_period * devpriv->divisor_b1);
1860 /* 1864 /*
1861 * if only one TRIG_TIMER is used, we can employ the generic 1865 * if only one TRIG_TIMER is used, we can employ the generic
1862 * cascaded timing functions 1866 * cascaded timing functions
1863 */ 1867 */
1864 } else if (labpc_ai_scan_period(cmd)) { 1868 } else if (scan_period) {
1865 unsigned int scan_period;
1866
1867 scan_period = labpc_ai_scan_period(cmd);
1868 /* 1869 /*
1869 * calculate cascaded counter values 1870 * calculate cascaded counter values
1870 * that give desired scan timing 1871 * that give desired scan timing
@@ -1874,11 +1875,8 @@ static void labpc_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd)
1874 &(devpriv->divisor_b0), 1875 &(devpriv->divisor_b0),
1875 &scan_period, 1876 &scan_period,
1876 cmd->flags & TRIG_ROUND_MASK); 1877 cmd->flags & TRIG_ROUND_MASK);
1877 labpc_set_ai_scan_period(cmd, scan_period); 1878 labpc_set_ai_scan_period(cmd, mode, scan_period);
1878 } else if (labpc_ai_convert_period(cmd)) { 1879 } else if (convert_period) {
1879 unsigned int convert_period;
1880
1881 convert_period = labpc_ai_convert_period(cmd);
1882 /* 1880 /*
1883 * calculate cascaded counter values 1881 * calculate cascaded counter values
1884 * that give desired conversion timing 1882 * that give desired conversion timing
@@ -1888,7 +1886,7 @@ static void labpc_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd)
1888 &(devpriv->divisor_b0), 1886 &(devpriv->divisor_b0),
1889 &convert_period, 1887 &convert_period,
1890 cmd->flags & TRIG_ROUND_MASK); 1888 cmd->flags & TRIG_ROUND_MASK);
1891 labpc_set_ai_convert_period(cmd, convert_period); 1889 labpc_set_ai_convert_period(cmd, mode, convert_period);
1892 } 1890 }
1893} 1891}
1894 1892