diff options
author | Ian Abbott <abbotti@mev.co.uk> | 2012-09-19 14:37:37 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-09-21 12:29:53 -0400 |
commit | 6f73fbcec27be8b074555e18d9f50c3013e4d802 (patch) | |
tree | 5aed61214370749969876c145378036bff5cb441 | |
parent | 5743aaac2938eb841e14879b0f73afb7fca6f0ad (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.c | 124 |
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 | ||
209 | enum scan_mode { | ||
210 | MODE_SINGLE_CHAN, | ||
211 | MODE_SINGLE_CHAN_INTERVAL, | ||
212 | MODE_MULT_CHAN_UP, | ||
213 | MODE_MULT_CHAN_DOWN, | ||
214 | }; | ||
215 | |||
209 | static int labpc_cancel(struct comedi_device *dev, struct comedi_subdevice *s); | 216 | static int labpc_cancel(struct comedi_device *dev, struct comedi_subdevice *s); |
210 | static irqreturn_t labpc_interrupt(int irq, void *d); | 217 | static irqreturn_t labpc_interrupt(int irq, void *d); |
211 | static int labpc_drain_fifo(struct comedi_device *dev); | 218 | static 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); |
239 | static void labpc_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd); | 246 | static 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 |
241 | static unsigned int labpc_suggest_transfer_size(struct comedi_cmd cmd); | 249 | static 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, | |||
254 | static void write_caldac(struct comedi_device *dev, unsigned int channel, | 262 | static void write_caldac(struct comedi_device *dev, unsigned int channel, |
255 | unsigned int value); | 263 | unsigned int value); |
256 | 264 | ||
257 | enum 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 | ||
841 | static int labpc_ai_chanlist_invalid(const struct comedi_device *dev, | 842 | static 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 | ||
914 | static int labpc_use_continuous_mode(const struct comedi_cmd *cmd) | 914 | static 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 | ||
925 | static unsigned int labpc_ai_convert_period(const struct comedi_cmd *cmd) | 926 | static 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 | ||
937 | static void labpc_set_ai_convert_period(struct comedi_cmd *cmd, unsigned int ns) | 938 | static 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 | ||
951 | static unsigned int labpc_ai_scan_period(const struct comedi_cmd *cmd) | 953 | static 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 | ||
963 | static void labpc_set_ai_scan_period(struct comedi_cmd *cmd, unsigned int ns) | 965 | static 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 */ |
1794 | static void labpc_adc_timing(struct comedi_device *dev, struct comedi_cmd *cmd) | 1799 | static 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 | ||