3 #include "../comedidev.h"
5 #include "amcc_s5933.h"
7 #include "addi-data/addi_common.h"
9 #include "addi-data/addi_eeprom.c"
10 #include "addi-data/hwdrv_apci3xxx.c"
11 #include "addi-data/addi_common.c"
13 enum apci3xxx_boardid {
41 static const struct addi_board apci3xxx_boardtypes[] = {
42 [BOARD_APCI3000_16] = {
43 .pc_DriverName = "apci3000-16",
44 .i_IorangeBase1 = 256,
45 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
46 .pc_EepromChip = ADDIDATA_9054,
48 .i_NbrAiChannelDiff = 8,
49 .i_AiChannelList = 16,
51 .pr_AiRangelist = &range_apci3XXX_ai,
52 .i_NbrTTLChannel = 24,
53 .b_AvailableConvertUnit = 6,
54 .ui_MinAcquisitiontimeNs = 10000,
55 .interrupt = v_APCI3XXX_Interrupt,
56 .reset = i_APCI3XXX_Reset,
57 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
58 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
59 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
60 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
61 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
62 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
64 [BOARD_APCI3000_8] = {
65 .pc_DriverName = "apci3000-8",
66 .i_IorangeBase1 = 256,
67 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
68 .pc_EepromChip = ADDIDATA_9054,
70 .i_NbrAiChannelDiff = 4,
73 .pr_AiRangelist = &range_apci3XXX_ai,
74 .i_NbrTTLChannel = 24,
75 .b_AvailableConvertUnit = 6,
76 .ui_MinAcquisitiontimeNs = 10000,
77 .interrupt = v_APCI3XXX_Interrupt,
78 .reset = i_APCI3XXX_Reset,
79 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
80 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
81 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
82 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
83 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
84 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
86 [BOARD_APCI3000_4] = {
87 .pc_DriverName = "apci3000-4",
88 .i_IorangeBase1 = 256,
89 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
90 .pc_EepromChip = ADDIDATA_9054,
92 .i_NbrAiChannelDiff = 2,
95 .pr_AiRangelist = &range_apci3XXX_ai,
96 .i_NbrTTLChannel = 24,
97 .b_AvailableConvertUnit = 6,
98 .ui_MinAcquisitiontimeNs = 10000,
99 .interrupt = v_APCI3XXX_Interrupt,
100 .reset = i_APCI3XXX_Reset,
101 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
102 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
103 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
104 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
105 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
106 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
108 [BOARD_APCI3006_16] = {
109 .pc_DriverName = "apci3006-16",
110 .i_IorangeBase1 = 256,
111 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
112 .pc_EepromChip = ADDIDATA_9054,
113 .i_NbrAiChannel = 16,
114 .i_NbrAiChannelDiff = 8,
115 .i_AiChannelList = 16,
116 .i_AiMaxdata = 65535,
117 .pr_AiRangelist = &range_apci3XXX_ai,
118 .i_NbrTTLChannel = 24,
119 .b_AvailableConvertUnit = 6,
120 .ui_MinAcquisitiontimeNs = 10000,
121 .interrupt = v_APCI3XXX_Interrupt,
122 .reset = i_APCI3XXX_Reset,
123 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
124 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
125 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
126 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
127 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
128 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
130 [BOARD_APCI3006_8] = {
131 .pc_DriverName = "apci3006-8",
132 .i_IorangeBase1 = 256,
133 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
134 .pc_EepromChip = ADDIDATA_9054,
136 .i_NbrAiChannelDiff = 4,
137 .i_AiChannelList = 8,
138 .i_AiMaxdata = 65535,
139 .pr_AiRangelist = &range_apci3XXX_ai,
140 .i_NbrTTLChannel = 24,
141 .b_AvailableConvertUnit = 6,
142 .ui_MinAcquisitiontimeNs = 10000,
143 .interrupt = v_APCI3XXX_Interrupt,
144 .reset = i_APCI3XXX_Reset,
145 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
146 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
147 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
148 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
149 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
150 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
152 [BOARD_APCI3006_4] = {
153 .pc_DriverName = "apci3006-4",
154 .i_IorangeBase1 = 256,
155 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
156 .pc_EepromChip = ADDIDATA_9054,
158 .i_NbrAiChannelDiff = 2,
159 .i_AiChannelList = 4,
160 .i_AiMaxdata = 65535,
161 .pr_AiRangelist = &range_apci3XXX_ai,
162 .i_NbrTTLChannel = 24,
163 .b_AvailableConvertUnit = 6,
164 .ui_MinAcquisitiontimeNs = 10000,
165 .interrupt = v_APCI3XXX_Interrupt,
166 .reset = i_APCI3XXX_Reset,
167 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
168 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
169 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
170 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
171 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
172 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
174 [BOARD_APCI3010_16] = {
175 .pc_DriverName = "apci3010-16",
176 .i_IorangeBase1 = 256,
177 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
178 .pc_EepromChip = ADDIDATA_9054,
179 .i_NbrAiChannel = 16,
180 .i_NbrAiChannelDiff = 8,
181 .i_AiChannelList = 16,
183 .pr_AiRangelist = &range_apci3XXX_ai,
187 .i_NbrTTLChannel = 24,
188 .b_AvailableConvertUnit = 6,
189 .ui_MinAcquisitiontimeNs = 5000,
190 .interrupt = v_APCI3XXX_Interrupt,
191 .reset = i_APCI3XXX_Reset,
192 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
193 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
194 .di_bits = apci3xxx_di_insn_bits,
195 .do_bits = apci3xxx_do_insn_bits,
196 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
197 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
198 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
199 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
201 [BOARD_APCI3010_8] = {
202 .pc_DriverName = "apci3010-8",
203 .i_IorangeBase1 = 256,
204 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
205 .pc_EepromChip = ADDIDATA_9054,
207 .i_NbrAiChannelDiff = 4,
208 .i_AiChannelList = 8,
210 .pr_AiRangelist = &range_apci3XXX_ai,
214 .i_NbrTTLChannel = 24,
215 .b_AvailableConvertUnit = 6,
216 .ui_MinAcquisitiontimeNs = 5000,
217 .interrupt = v_APCI3XXX_Interrupt,
218 .reset = i_APCI3XXX_Reset,
219 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
220 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
221 .di_bits = apci3xxx_di_insn_bits,
222 .do_bits = apci3xxx_do_insn_bits,
223 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
224 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
225 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
226 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
228 [BOARD_APCI3010_4] = {
229 .pc_DriverName = "apci3010-4",
230 .i_IorangeBase1 = 256,
231 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
232 .pc_EepromChip = ADDIDATA_9054,
234 .i_NbrAiChannelDiff = 2,
235 .i_AiChannelList = 4,
237 .pr_AiRangelist = &range_apci3XXX_ai,
241 .i_NbrTTLChannel = 24,
242 .b_AvailableConvertUnit = 6,
243 .ui_MinAcquisitiontimeNs = 5000,
244 .interrupt = v_APCI3XXX_Interrupt,
245 .reset = i_APCI3XXX_Reset,
246 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
247 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
248 .di_bits = apci3xxx_di_insn_bits,
249 .do_bits = apci3xxx_do_insn_bits,
250 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
251 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
252 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
253 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
255 [BOARD_APCI3016_16] = {
256 .pc_DriverName = "apci3016-16",
257 .i_IorangeBase1 = 256,
258 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
259 .pc_EepromChip = ADDIDATA_9054,
260 .i_NbrAiChannel = 16,
261 .i_NbrAiChannelDiff = 8,
262 .i_AiChannelList = 16,
263 .i_AiMaxdata = 65535,
264 .pr_AiRangelist = &range_apci3XXX_ai,
268 .i_NbrTTLChannel = 24,
269 .b_AvailableConvertUnit = 6,
270 .ui_MinAcquisitiontimeNs = 5000,
271 .interrupt = v_APCI3XXX_Interrupt,
272 .reset = i_APCI3XXX_Reset,
273 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
274 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
275 .di_bits = apci3xxx_di_insn_bits,
276 .do_bits = apci3xxx_do_insn_bits,
277 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
278 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
279 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
280 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
282 [BOARD_APCI3016_8] = {
283 .pc_DriverName = "apci3016-8",
284 .i_IorangeBase1 = 256,
285 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
286 .pc_EepromChip = ADDIDATA_9054,
288 .i_NbrAiChannelDiff = 4,
289 .i_AiChannelList = 8,
290 .i_AiMaxdata = 65535,
291 .pr_AiRangelist = &range_apci3XXX_ai,
295 .i_NbrTTLChannel = 24,
296 .b_AvailableConvertUnit = 6,
297 .ui_MinAcquisitiontimeNs = 5000,
298 .interrupt = v_APCI3XXX_Interrupt,
299 .reset = i_APCI3XXX_Reset,
300 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
301 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
302 .di_bits = apci3xxx_di_insn_bits,
303 .do_bits = apci3xxx_do_insn_bits,
304 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
305 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
306 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
307 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
309 [BOARD_APCI3016_4] = {
310 .pc_DriverName = "apci3016-4",
311 .i_IorangeBase1 = 256,
312 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
313 .pc_EepromChip = ADDIDATA_9054,
315 .i_NbrAiChannelDiff = 2,
316 .i_AiChannelList = 4,
317 .i_AiMaxdata = 65535,
318 .pr_AiRangelist = &range_apci3XXX_ai,
322 .i_NbrTTLChannel = 24,
323 .b_AvailableConvertUnit = 6,
324 .ui_MinAcquisitiontimeNs = 5000,
325 .interrupt = v_APCI3XXX_Interrupt,
326 .reset = i_APCI3XXX_Reset,
327 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
328 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
329 .di_bits = apci3xxx_di_insn_bits,
330 .do_bits = apci3xxx_do_insn_bits,
331 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
332 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
333 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
334 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
336 [BOARD_APCI3100_16_4] = {
337 .pc_DriverName = "apci3100-16-4",
338 .i_IorangeBase1 = 256,
339 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
340 .pc_EepromChip = ADDIDATA_9054,
341 .i_NbrAiChannel = 16,
342 .i_NbrAiChannelDiff = 8,
343 .i_AiChannelList = 16,
347 .pr_AiRangelist = &range_apci3XXX_ai,
348 .pr_AoRangelist = &range_apci3XXX_ao,
349 .i_NbrTTLChannel = 24,
350 .b_AvailableConvertUnit = 6,
351 .ui_MinAcquisitiontimeNs = 10000,
352 .interrupt = v_APCI3XXX_Interrupt,
353 .reset = i_APCI3XXX_Reset,
354 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
355 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
356 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
357 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
358 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
359 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
360 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
362 [BOARD_APCI3100_8_4] = {
363 .pc_DriverName = "apci3100-8-4",
364 .i_IorangeBase1 = 256,
365 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
366 .pc_EepromChip = ADDIDATA_9054,
368 .i_NbrAiChannelDiff = 4,
369 .i_AiChannelList = 8,
373 .pr_AiRangelist = &range_apci3XXX_ai,
374 .pr_AoRangelist = &range_apci3XXX_ao,
375 .i_NbrTTLChannel = 24,
376 .b_AvailableConvertUnit = 6,
377 .ui_MinAcquisitiontimeNs = 10000,
378 .interrupt = v_APCI3XXX_Interrupt,
379 .reset = i_APCI3XXX_Reset,
380 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
381 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
382 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
383 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
384 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
385 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
386 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
388 [BOARD_APCI3106_16_4] = {
389 .pc_DriverName = "apci3106-16-4",
390 .i_IorangeBase1 = 256,
391 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
392 .pc_EepromChip = ADDIDATA_9054,
393 .i_NbrAiChannel = 16,
394 .i_NbrAiChannelDiff = 8,
395 .i_AiChannelList = 16,
397 .i_AiMaxdata = 65535,
399 .pr_AiRangelist = &range_apci3XXX_ai,
400 .pr_AoRangelist = &range_apci3XXX_ao,
401 .i_NbrTTLChannel = 24,
402 .b_AvailableConvertUnit = 6,
403 .ui_MinAcquisitiontimeNs = 10000,
404 .interrupt = v_APCI3XXX_Interrupt,
405 .reset = i_APCI3XXX_Reset,
406 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
407 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
408 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
409 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
410 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
411 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
412 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
414 [BOARD_APCI3106_8_4] = {
415 .pc_DriverName = "apci3106-8-4",
416 .i_IorangeBase1 = 256,
417 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
418 .pc_EepromChip = ADDIDATA_9054,
420 .i_NbrAiChannelDiff = 4,
421 .i_AiChannelList = 8,
423 .i_AiMaxdata = 65535,
425 .pr_AiRangelist = &range_apci3XXX_ai,
426 .pr_AoRangelist = &range_apci3XXX_ao,
427 .i_NbrTTLChannel = 24,
428 .b_AvailableConvertUnit = 6,
429 .ui_MinAcquisitiontimeNs = 10000,
430 .interrupt = v_APCI3XXX_Interrupt,
431 .reset = i_APCI3XXX_Reset,
432 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
433 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
434 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
435 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
436 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
437 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
438 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
440 [BOARD_APCI3110_16_4] = {
441 .pc_DriverName = "apci3110-16-4",
442 .i_IorangeBase1 = 256,
443 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
444 .pc_EepromChip = ADDIDATA_9054,
445 .i_NbrAiChannel = 16,
446 .i_NbrAiChannelDiff = 8,
447 .i_AiChannelList = 16,
451 .pr_AiRangelist = &range_apci3XXX_ai,
452 .pr_AoRangelist = &range_apci3XXX_ao,
456 .i_NbrTTLChannel = 24,
457 .b_AvailableConvertUnit = 6,
458 .ui_MinAcquisitiontimeNs = 5000,
459 .interrupt = v_APCI3XXX_Interrupt,
460 .reset = i_APCI3XXX_Reset,
461 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
462 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
463 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
464 .di_bits = apci3xxx_di_insn_bits,
465 .do_bits = apci3xxx_do_insn_bits,
466 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
467 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
468 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
469 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
471 [BOARD_APCI3110_8_4] = {
472 .pc_DriverName = "apci3110-8-4",
473 .i_IorangeBase1 = 256,
474 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
475 .pc_EepromChip = ADDIDATA_9054,
477 .i_NbrAiChannelDiff = 4,
478 .i_AiChannelList = 8,
482 .pr_AiRangelist = &range_apci3XXX_ai,
483 .pr_AoRangelist = &range_apci3XXX_ao,
487 .i_NbrTTLChannel = 24,
488 .b_AvailableConvertUnit = 6,
489 .ui_MinAcquisitiontimeNs = 5000,
490 .interrupt = v_APCI3XXX_Interrupt,
491 .reset = i_APCI3XXX_Reset,
492 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
493 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
494 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
495 .di_bits = apci3xxx_di_insn_bits,
496 .do_bits = apci3xxx_do_insn_bits,
497 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
498 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
499 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
500 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
502 [BOARD_APCI3116_16_4] = {
503 .pc_DriverName = "apci3116-16-4",
504 .i_IorangeBase1 = 256,
505 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
506 .pc_EepromChip = ADDIDATA_9054,
507 .i_NbrAiChannel = 16,
508 .i_NbrAiChannelDiff = 8,
509 .i_AiChannelList = 16,
511 .i_AiMaxdata = 65535,
513 .pr_AiRangelist = &range_apci3XXX_ai,
514 .pr_AoRangelist = &range_apci3XXX_ao,
518 .i_NbrTTLChannel = 24,
519 .b_AvailableConvertUnit = 6,
520 .ui_MinAcquisitiontimeNs = 5000,
521 .interrupt = v_APCI3XXX_Interrupt,
522 .reset = i_APCI3XXX_Reset,
523 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
524 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
525 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
526 .di_bits = apci3xxx_di_insn_bits,
527 .do_bits = apci3xxx_do_insn_bits,
528 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
529 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
530 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
531 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
533 [BOARD_APCI3116_8_4] = {
534 .pc_DriverName = "apci3116-8-4",
535 .i_IorangeBase1 = 256,
536 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
537 .pc_EepromChip = ADDIDATA_9054,
539 .i_NbrAiChannelDiff = 4,
540 .i_AiChannelList = 8,
542 .i_AiMaxdata = 65535,
544 .pr_AiRangelist = &range_apci3XXX_ai,
545 .pr_AoRangelist = &range_apci3XXX_ao,
549 .i_NbrTTLChannel = 24,
550 .b_AvailableConvertUnit = 6,
551 .ui_MinAcquisitiontimeNs = 5000,
552 .interrupt = v_APCI3XXX_Interrupt,
553 .reset = i_APCI3XXX_Reset,
554 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
555 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
556 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
557 .di_bits = apci3xxx_di_insn_bits,
558 .do_bits = apci3xxx_do_insn_bits,
559 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
560 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
561 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
562 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
565 .pc_DriverName = "apci3003",
566 .i_IorangeBase1 = 256,
567 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
568 .pc_EepromChip = ADDIDATA_9054,
569 .i_NbrAiChannelDiff = 4,
570 .i_AiChannelList = 4,
571 .i_AiMaxdata = 65535,
572 .pr_AiRangelist = &range_apci3XXX_ai,
576 .b_AvailableConvertUnit = 7,
577 .ui_MinAcquisitiontimeNs = 2500,
578 .interrupt = v_APCI3XXX_Interrupt,
579 .reset = i_APCI3XXX_Reset,
580 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
581 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
582 .di_bits = apci3xxx_di_insn_bits,
583 .do_bits = apci3xxx_do_insn_bits,
585 [BOARD_APCI3002_16] = {
586 .pc_DriverName = "apci3002-16",
587 .i_IorangeBase1 = 256,
588 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
589 .pc_EepromChip = ADDIDATA_9054,
590 .i_NbrAiChannelDiff = 16,
591 .i_AiChannelList = 16,
592 .i_AiMaxdata = 65535,
593 .pr_AiRangelist = &range_apci3XXX_ai,
597 .b_AvailableConvertUnit = 6,
598 .ui_MinAcquisitiontimeNs = 5000,
599 .interrupt = v_APCI3XXX_Interrupt,
600 .reset = i_APCI3XXX_Reset,
601 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
602 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
603 .di_bits = apci3xxx_di_insn_bits,
604 .do_bits = apci3xxx_do_insn_bits,
606 [BOARD_APCI3002_8] = {
607 .pc_DriverName = "apci3002-8",
608 .i_IorangeBase1 = 256,
609 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
610 .pc_EepromChip = ADDIDATA_9054,
611 .i_NbrAiChannelDiff = 8,
612 .i_AiChannelList = 8,
613 .i_AiMaxdata = 65535,
614 .pr_AiRangelist = &range_apci3XXX_ai,
618 .b_AvailableConvertUnit = 6,
619 .ui_MinAcquisitiontimeNs = 5000,
620 .interrupt = v_APCI3XXX_Interrupt,
621 .reset = i_APCI3XXX_Reset,
622 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
623 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
624 .di_bits = apci3xxx_di_insn_bits,
625 .do_bits = apci3xxx_do_insn_bits,
627 [BOARD_APCI3002_4] = {
628 .pc_DriverName = "apci3002-4",
629 .i_IorangeBase1 = 256,
630 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
631 .pc_EepromChip = ADDIDATA_9054,
632 .i_NbrAiChannelDiff = 4,
633 .i_AiChannelList = 4,
634 .i_AiMaxdata = 65535,
635 .pr_AiRangelist = &range_apci3XXX_ai,
639 .b_AvailableConvertUnit = 6,
640 .ui_MinAcquisitiontimeNs = 5000,
641 .interrupt = v_APCI3XXX_Interrupt,
642 .reset = i_APCI3XXX_Reset,
643 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
644 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
645 .di_bits = apci3xxx_di_insn_bits,
646 .do_bits = apci3xxx_do_insn_bits,
649 .pc_DriverName = "apci3500",
650 .i_IorangeBase1 = 256,
651 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
652 .pc_EepromChip = ADDIDATA_9054,
655 .pr_AoRangelist = &range_apci3XXX_ao,
656 .i_NbrTTLChannel = 24,
657 .interrupt = v_APCI3XXX_Interrupt,
658 .reset = i_APCI3XXX_Reset,
659 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
660 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
661 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
662 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
663 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
667 static int apci3xxx_auto_attach(struct comedi_device *dev,
668 unsigned long context)
670 const struct addi_board *board = NULL;
672 if (context < ARRAY_SIZE(apci3xxx_boardtypes))
673 board = &apci3xxx_boardtypes[context];
676 dev->board_ptr = board;
678 return addi_auto_attach(dev, context);
681 static struct comedi_driver apci3xxx_driver = {
682 .driver_name = "addi_apci_3xxx",
683 .module = THIS_MODULE,
684 .auto_attach = apci3xxx_auto_attach,
685 .detach = i_ADDI_Detach,
688 static int apci3xxx_pci_probe(struct pci_dev *dev,
689 const struct pci_device_id *id)
691 return comedi_pci_auto_config(dev, &apci3xxx_driver, id->driver_data);
694 static DEFINE_PCI_DEVICE_TABLE(apci3xxx_pci_table) = {
695 { PCI_VDEVICE(ADDIDATA, 0x3010), BOARD_APCI3000_16 },
696 { PCI_VDEVICE(ADDIDATA, 0x300f), BOARD_APCI3000_8 },
697 { PCI_VDEVICE(ADDIDATA, 0x300e), BOARD_APCI3000_4 },
698 { PCI_VDEVICE(ADDIDATA, 0x3013), BOARD_APCI3006_16 },
699 { PCI_VDEVICE(ADDIDATA, 0x3014), BOARD_APCI3006_8 },
700 { PCI_VDEVICE(ADDIDATA, 0x3015), BOARD_APCI3006_4 },
701 { PCI_VDEVICE(ADDIDATA, 0x3016), BOARD_APCI3010_16 },
702 { PCI_VDEVICE(ADDIDATA, 0x3017), BOARD_APCI3010_8 },
703 { PCI_VDEVICE(ADDIDATA, 0x3018), BOARD_APCI3010_4 },
704 { PCI_VDEVICE(ADDIDATA, 0x3019), BOARD_APCI3016_16 },
705 { PCI_VDEVICE(ADDIDATA, 0x301a), BOARD_APCI3016_8 },
706 { PCI_VDEVICE(ADDIDATA, 0x301b), BOARD_APCI3016_4 },
707 { PCI_VDEVICE(ADDIDATA, 0x301c), BOARD_APCI3100_16_4 },
708 { PCI_VDEVICE(ADDIDATA, 0x301d), BOARD_APCI3100_8_4 },
709 { PCI_VDEVICE(ADDIDATA, 0x301e), BOARD_APCI3106_16_4 },
710 { PCI_VDEVICE(ADDIDATA, 0x301f), BOARD_APCI3106_8_4 },
711 { PCI_VDEVICE(ADDIDATA, 0x3020), BOARD_APCI3110_16_4 },
712 { PCI_VDEVICE(ADDIDATA, 0x3021), BOARD_APCI3110_8_4 },
713 { PCI_VDEVICE(ADDIDATA, 0x3022), BOARD_APCI3116_16_4 },
714 { PCI_VDEVICE(ADDIDATA, 0x3023), BOARD_APCI3116_8_4 },
715 { PCI_VDEVICE(ADDIDATA, 0x300B), BOARD_APCI3003 },
716 { PCI_VDEVICE(ADDIDATA, 0x3002), BOARD_APCI3002_16 },
717 { PCI_VDEVICE(ADDIDATA, 0x3003), BOARD_APCI3002_8 },
718 { PCI_VDEVICE(ADDIDATA, 0x3004), BOARD_APCI3002_4 },
719 { PCI_VDEVICE(ADDIDATA, 0x3024), BOARD_APCI3500 },
722 MODULE_DEVICE_TABLE(pci, apci3xxx_pci_table);
724 static struct pci_driver apci3xxx_pci_driver = {
725 .name = "addi_apci_3xxx",
726 .id_table = apci3xxx_pci_table,
727 .probe = apci3xxx_pci_probe,
728 .remove = comedi_pci_auto_unconfig,
730 module_comedi_pci_driver(apci3xxx_driver, apci3xxx_pci_driver);
732 MODULE_AUTHOR("Comedi http://www.comedi.org");
733 MODULE_DESCRIPTION("Comedi low-level driver");
734 MODULE_LICENSE("GPL");