@@ -439,6 +439,29 @@ static const struct comedi_lrange ai_ranges_64xx = {
439
439
}
440
440
};
441
441
442
+ static const uint8_t ai_range_code_64xx [8 ] = {
443
+ 0x0 , 0x1 , 0x2 , 0x3 , /* bipolar 10, 5, 2,5, 1.25 */
444
+ 0x8 , 0x9 , 0xa , 0xb /* unipolar 10, 5, 2.5, 1.25 */
445
+ };
446
+
447
+ /* analog input ranges for 64-Mx boards */
448
+ static const struct comedi_lrange ai_ranges_64_mx = {
449
+ 7 , {
450
+ BIP_RANGE (5 ),
451
+ BIP_RANGE (2.5 ),
452
+ BIP_RANGE (1.25 ),
453
+ BIP_RANGE (0.625 ),
454
+ UNI_RANGE (5 ),
455
+ UNI_RANGE (2.5 ),
456
+ UNI_RANGE (1.25 )
457
+ }
458
+ };
459
+
460
+ static const uint8_t ai_range_code_64_mx [7 ] = {
461
+ 0x0 , 0x1 , 0x2 , 0x3 , /* bipolar 5, 2.5, 1.25, 0.625 */
462
+ 0x9 , 0xa , 0xb /* unipolar 5, 2.5, 1.25 */
463
+ };
464
+
442
465
/* analog input ranges for 60xx boards */
443
466
static const struct comedi_lrange ai_ranges_60xx = {
444
467
4 , {
@@ -449,6 +472,10 @@ static const struct comedi_lrange ai_ranges_60xx = {
449
472
}
450
473
};
451
474
475
+ static const uint8_t ai_range_code_60xx [4 ] = {
476
+ 0x0 , 0x1 , 0x4 , 0x7 /* bipolar 10, 5, 0.5, 0.05 */
477
+ };
478
+
452
479
/* analog input ranges for 6030, etc boards */
453
480
static const struct comedi_lrange ai_ranges_6030 = {
454
481
14 , {
@@ -469,6 +496,11 @@ static const struct comedi_lrange ai_ranges_6030 = {
469
496
}
470
497
};
471
498
499
+ static const uint8_t ai_range_code_6030 [14 ] = {
500
+ 0x0 , 0x1 , 0x2 , 0x3 , 0x4 , 0x5 , 0x6 , /* bip 10, 5, 2, 1, 0.5, 0.2, 0.1 */
501
+ 0x9 , 0xa , 0xb , 0xc , 0xd , 0xe , 0xf /* uni 10, 5, 2, 1, 0.5, 0.2, 0.1 */
502
+ };
503
+
472
504
/* analog input ranges for 6052, etc boards */
473
505
static const struct comedi_lrange ai_ranges_6052 = {
474
506
15 , {
@@ -490,6 +522,11 @@ static const struct comedi_lrange ai_ranges_6052 = {
490
522
}
491
523
};
492
524
525
+ static const uint8_t ai_range_code_6052 [15 ] = {
526
+ 0x0 , 0x1 , 0x2 , 0x3 , 0x4 , 0x5 , 0x6 , 0x7 , /* bipolar 10 ... 0.05 */
527
+ 0x9 , 0xa , 0xb , 0xc , 0xd , 0xe , 0xf /* unipolar 10 ... 0.1 */
528
+ };
529
+
493
530
/* analog input ranges for 4020 board */
494
531
static const struct comedi_lrange ai_ranges_4020 = {
495
532
2 , {
@@ -593,6 +630,7 @@ struct pcidas64_board {
593
630
int ai_bits ; /* analog input resolution */
594
631
int ai_speed ; /* fastest conversion period in ns */
595
632
const struct comedi_lrange * ai_range_table ;
633
+ const uint8_t * ai_range_code ;
596
634
int ao_nchan ; /* number of analog out channels */
597
635
int ao_bits ; /* analog output resolution */
598
636
int ao_scan_speed ; /* analog output scan speed */
@@ -651,6 +689,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
651
689
.ao_scan_speed = 10000 ,
652
690
.layout = LAYOUT_64XX ,
653
691
.ai_range_table = & ai_ranges_64xx ,
692
+ .ai_range_code = ai_range_code_64xx ,
654
693
.ao_range_table = & ao_ranges_64xx ,
655
694
.ao_range_code = ao_range_code_64xx ,
656
695
.ai_fifo = & ai_fifo_64xx ,
@@ -666,6 +705,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
666
705
.ao_scan_speed = 10000 ,
667
706
.layout = LAYOUT_64XX ,
668
707
.ai_range_table = & ai_ranges_64xx ,
708
+ .ai_range_code = ai_range_code_64xx ,
669
709
.ao_range_table = & ao_ranges_64xx ,
670
710
.ao_range_code = ao_range_code_64xx ,
671
711
.ai_fifo = & ai_fifo_64xx ,
@@ -680,7 +720,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
680
720
.ao_bits = 16 ,
681
721
.ao_scan_speed = 10000 ,
682
722
.layout = LAYOUT_64XX ,
683
- .ai_range_table = & ai_ranges_64xx ,
723
+ .ai_range_table = & ai_ranges_64_mx ,
724
+ .ai_range_code = ai_range_code_64_mx ,
684
725
.ao_range_table = & ao_ranges_64xx ,
685
726
.ao_range_code = ao_range_code_64xx ,
686
727
.ai_fifo = & ai_fifo_64xx ,
@@ -695,7 +736,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
695
736
.ao_bits = 16 ,
696
737
.ao_scan_speed = 10000 ,
697
738
.layout = LAYOUT_64XX ,
698
- .ai_range_table = & ai_ranges_64xx ,
739
+ .ai_range_table = & ai_ranges_64_mx ,
740
+ .ai_range_code = ai_range_code_64_mx ,
699
741
.ao_range_table = & ao_ranges_64xx ,
700
742
.ao_range_code = ao_range_code_64xx ,
701
743
.ai_fifo = & ai_fifo_64xx ,
@@ -710,7 +752,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
710
752
.ao_bits = 16 ,
711
753
.ao_scan_speed = 10000 ,
712
754
.layout = LAYOUT_64XX ,
713
- .ai_range_table = & ai_ranges_64xx ,
755
+ .ai_range_table = & ai_ranges_64_mx ,
756
+ .ai_range_code = ai_range_code_64_mx ,
714
757
.ao_range_table = & ao_ranges_64xx ,
715
758
.ao_range_code = ao_range_code_64xx ,
716
759
.ai_fifo = & ai_fifo_64xx ,
@@ -725,6 +768,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
725
768
.ao_bits = 16 ,
726
769
.layout = LAYOUT_60XX ,
727
770
.ai_range_table = & ai_ranges_60xx ,
771
+ .ai_range_code = ai_range_code_60xx ,
728
772
.ao_range_table = & range_bipolar10 ,
729
773
.ao_range_code = ao_range_code_60xx ,
730
774
.ai_fifo = & ai_fifo_60xx ,
@@ -740,6 +784,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
740
784
.ao_scan_speed = 100000 ,
741
785
.layout = LAYOUT_60XX ,
742
786
.ai_range_table = & ai_ranges_60xx ,
787
+ .ai_range_code = ai_range_code_60xx ,
743
788
.ao_range_table = & range_bipolar10 ,
744
789
.ao_range_code = ao_range_code_60xx ,
745
790
.ai_fifo = & ai_fifo_60xx ,
@@ -754,6 +799,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
754
799
.ao_scan_speed = 100000 ,
755
800
.layout = LAYOUT_60XX ,
756
801
.ai_range_table = & ai_ranges_60xx ,
802
+ .ai_range_code = ai_range_code_60xx ,
757
803
.ao_range_table = & range_bipolar10 ,
758
804
.ao_range_code = ao_range_code_60xx ,
759
805
.ai_fifo = & ai_fifo_60xx ,
@@ -769,6 +815,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
769
815
.ao_scan_speed = 100000 ,
770
816
.layout = LAYOUT_60XX ,
771
817
.ai_range_table = & ai_ranges_60xx ,
818
+ .ai_range_code = ai_range_code_60xx ,
772
819
.ao_range_table = & range_bipolar10 ,
773
820
.ao_range_code = ao_range_code_60xx ,
774
821
.ai_fifo = & ai_fifo_60xx ,
@@ -784,6 +831,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
784
831
.ao_scan_speed = 10000 ,
785
832
.layout = LAYOUT_60XX ,
786
833
.ai_range_table = & ai_ranges_6030 ,
834
+ .ai_range_code = ai_range_code_6030 ,
787
835
.ao_range_table = & ao_ranges_6030 ,
788
836
.ao_range_code = ao_range_code_6030 ,
789
837
.ai_fifo = & ai_fifo_60xx ,
@@ -799,6 +847,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
799
847
.ao_scan_speed = 10000 ,
800
848
.layout = LAYOUT_60XX ,
801
849
.ai_range_table = & ai_ranges_6030 ,
850
+ .ai_range_code = ai_range_code_6030 ,
802
851
.ao_range_table = & ao_ranges_6030 ,
803
852
.ao_range_code = ao_range_code_6030 ,
804
853
.ai_fifo = & ai_fifo_60xx ,
@@ -812,6 +861,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
812
861
.ao_nchan = 0 ,
813
862
.layout = LAYOUT_60XX ,
814
863
.ai_range_table = & ai_ranges_6030 ,
864
+ .ai_range_code = ai_range_code_6030 ,
815
865
.ai_fifo = & ai_fifo_60xx ,
816
866
.has_8255 = 0 ,
817
867
},
@@ -823,6 +873,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
823
873
.ao_nchan = 0 ,
824
874
.layout = LAYOUT_60XX ,
825
875
.ai_range_table = & ai_ranges_6030 ,
876
+ .ai_range_code = ai_range_code_6030 ,
826
877
.ai_fifo = & ai_fifo_60xx ,
827
878
.has_8255 = 0 ,
828
879
},
@@ -835,6 +886,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
835
886
.ao_scan_speed = 0 ,
836
887
.layout = LAYOUT_60XX ,
837
888
.ai_range_table = & ai_ranges_60xx ,
889
+ .ai_range_code = ai_range_code_60xx ,
838
890
.ai_fifo = & ai_fifo_60xx ,
839
891
.has_8255 = 0 ,
840
892
},
@@ -848,6 +900,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
848
900
.ao_scan_speed = 100000 ,
849
901
.layout = LAYOUT_60XX ,
850
902
.ai_range_table = & ai_ranges_60xx ,
903
+ .ai_range_code = ai_range_code_60xx ,
851
904
.ao_range_table = & range_bipolar10 ,
852
905
.ao_range_code = ao_range_code_60xx ,
853
906
.ai_fifo = & ai_fifo_60xx ,
@@ -863,6 +916,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
863
916
.ao_scan_speed = 100000 ,
864
917
.layout = LAYOUT_60XX ,
865
918
.ai_range_table = & ai_ranges_60xx ,
919
+ .ai_range_code = ai_range_code_60xx ,
866
920
.ao_range_table = & range_bipolar10 ,
867
921
.ao_range_code = ao_range_code_60xx ,
868
922
.ai_fifo = & ai_fifo_60xx ,
@@ -878,6 +932,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
878
932
.ao_scan_speed = 1000 ,
879
933
.layout = LAYOUT_60XX ,
880
934
.ai_range_table = & ai_ranges_6052 ,
935
+ .ai_range_code = ai_range_code_6052 ,
881
936
.ao_range_table = & ao_ranges_6030 ,
882
937
.ao_range_code = ao_range_code_6030 ,
883
938
.ai_fifo = & ai_fifo_60xx ,
@@ -893,6 +948,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
893
948
.ao_scan_speed = 3333 ,
894
949
.layout = LAYOUT_60XX ,
895
950
.ai_range_table = & ai_ranges_6052 ,
951
+ .ai_range_code = ai_range_code_6052 ,
896
952
.ao_range_table = & ao_ranges_6030 ,
897
953
.ao_range_code = ao_range_code_6030 ,
898
954
.ai_fifo = & ai_fifo_60xx ,
@@ -908,6 +964,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
908
964
.ao_scan_speed = 1000 ,
909
965
.layout = LAYOUT_60XX ,
910
966
.ai_range_table = & ai_ranges_6052 ,
967
+ .ai_range_code = ai_range_code_6052 ,
911
968
.ao_range_table = & ao_ranges_6030 ,
912
969
.ao_range_code = ao_range_code_6030 ,
913
970
.ai_fifo = & ai_fifo_60xx ,
@@ -923,6 +980,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
923
980
.ao_scan_speed = 1000 ,
924
981
.layout = LAYOUT_60XX ,
925
982
.ai_range_table = & ai_ranges_6052 ,
983
+ .ai_range_code = ai_range_code_6052 ,
926
984
.ao_range_table = & ao_ranges_6030 ,
927
985
.ao_range_code = ao_range_code_6030 ,
928
986
.ai_fifo = & ai_fifo_60xx ,
@@ -957,6 +1015,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
957
1015
.ao_scan_speed = 10000 ,
958
1016
.layout = LAYOUT_64XX ,
959
1017
.ai_range_table = & ai_ranges_64xx ,
1018
+ .ai_range_code = ai_range_code_64xx ,
960
1019
.ai_fifo = ai_fifo_64xx ,
961
1020
.has_8255 = 1 ,
962
1021
},
@@ -968,7 +1027,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
968
1027
.ao_nchan = 0 ,
969
1028
.ao_scan_speed = 10000 ,
970
1029
.layout = LAYOUT_64XX ,
971
- .ai_range_table = & ai_ranges_64xx ,
1030
+ .ai_range_table = & ai_ranges_64_mx ,
1031
+ .ai_range_code = ai_range_code_64_mx ,
972
1032
.ai_fifo = ai_fifo_64xx ,
973
1033
.has_8255 = 1 ,
974
1034
},
@@ -980,7 +1040,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
980
1040
.ao_nchan = 0 ,
981
1041
.ao_scan_speed = 10000 ,
982
1042
.layout = LAYOUT_64XX ,
983
- .ai_range_table = & ai_ranges_64xx ,
1043
+ .ai_range_table = & ai_ranges_64_mx ,
1044
+ .ai_range_code = ai_range_code_64_mx ,
984
1045
.ai_fifo = ai_fifo_64xx ,
985
1046
.has_8255 = 1 ,
986
1047
},
@@ -992,7 +1053,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
992
1053
.ao_nchan = 0 ,
993
1054
.ao_scan_speed = 10000 ,
994
1055
.layout = LAYOUT_64XX ,
995
- .ai_range_table = & ai_ranges_64xx ,
1056
+ .ai_range_table = & ai_ranges_64_mx ,
1057
+ .ai_range_code = ai_range_code_64_mx ,
996
1058
.ai_fifo = ai_fifo_64xx ,
997
1059
.has_8255 = 1 ,
998
1060
},
@@ -1004,7 +1066,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
1004
1066
.ao_nchan = 2 ,
1005
1067
.ao_scan_speed = 10000 ,
1006
1068
.layout = LAYOUT_64XX ,
1007
- .ai_range_table = & ai_ranges_64xx ,
1069
+ .ai_range_table = & ai_ranges_64_mx ,
1070
+ .ai_range_code = ai_range_code_64_mx ,
1008
1071
.ai_fifo = ai_fifo_64xx ,
1009
1072
.has_8255 = 1 ,
1010
1073
},
@@ -1016,7 +1079,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
1016
1079
.ao_nchan = 2 ,
1017
1080
.ao_scan_speed = 10000 ,
1018
1081
.layout = LAYOUT_64XX ,
1019
- .ai_range_table = & ai_ranges_64xx ,
1082
+ .ai_range_table = & ai_ranges_64_mx ,
1083
+ .ai_range_code = ai_range_code_64_mx ,
1020
1084
.ai_fifo = ai_fifo_64xx ,
1021
1085
.has_8255 = 1 ,
1022
1086
},
@@ -1028,7 +1092,8 @@ static const struct pcidas64_board pcidas64_boards[] = {
1028
1092
.ao_nchan = 2 ,
1029
1093
.ao_scan_speed = 10000 ,
1030
1094
.layout = LAYOUT_64XX ,
1031
- .ai_range_table = & ai_ranges_64xx ,
1095
+ .ai_range_table = & ai_ranges_64_mx ,
1096
+ .ai_range_code = ai_range_code_64_mx ,
1032
1097
.ai_fifo = ai_fifo_64xx ,
1033
1098
.has_8255 = 1 ,
1034
1099
},
@@ -1115,45 +1180,8 @@ static unsigned int ai_range_bits_6xxx(const struct comedi_device *dev,
1115
1180
unsigned int range_index )
1116
1181
{
1117
1182
const struct pcidas64_board * thisboard = dev -> board_ptr ;
1118
- const struct comedi_krange * range =
1119
- & thisboard -> ai_range_table -> range [range_index ];
1120
- unsigned int bits = 0 ;
1121
1183
1122
- switch (range -> max ) {
1123
- case 10000000 :
1124
- bits = 0x000 ;
1125
- break ;
1126
- case 5000000 :
1127
- bits = 0x100 ;
1128
- break ;
1129
- case 2000000 :
1130
- case 2500000 :
1131
- bits = 0x200 ;
1132
- break ;
1133
- case 1000000 :
1134
- case 1250000 :
1135
- bits = 0x300 ;
1136
- break ;
1137
- case 500000 :
1138
- bits = 0x400 ;
1139
- break ;
1140
- case 200000 :
1141
- case 250000 :
1142
- bits = 0x500 ;
1143
- break ;
1144
- case 100000 :
1145
- bits = 0x600 ;
1146
- break ;
1147
- case 50000 :
1148
- bits = 0x700 ;
1149
- break ;
1150
- default :
1151
- dev_err (dev -> class_dev , "bug! in %s\n" , __func__ );
1152
- break ;
1153
- }
1154
- if (range -> min == 0 )
1155
- bits += 0x900 ;
1156
- return bits ;
1184
+ return thisboard -> ai_range_code [range_index ] << 8 ;
1157
1185
}
1158
1186
1159
1187
static unsigned int hw_revision (const struct comedi_device * dev ,
0 commit comments