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 static const struct addi_board apci3xxx_boardtypes[] = {
15 .pc_DriverName = "apci3000-16",
16 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
18 .i_IorangeBase0 = 256,
19 .i_IorangeBase1 = 256,
20 .i_IorangeBase2 = 256,
21 .i_IorangeBase3 = 256,
22 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
23 .pc_EepromChip = ADDIDATA_9054,
25 .i_NbrAiChannelDiff = 8,
26 .i_AiChannelList = 16,
28 .pr_AiRangelist = &range_apci3XXX_ai,
29 .i_NbrTTLChannel = 24,
30 .b_AvailableConvertUnit = 6,
31 .ui_MinAcquisitiontimeNs = 10000,
32 .interrupt = v_APCI3XXX_Interrupt,
33 .reset = i_APCI3XXX_Reset,
34 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
35 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
36 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
37 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
38 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
39 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
41 .pc_DriverName = "apci3000-8",
42 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
44 .i_IorangeBase0 = 256,
45 .i_IorangeBase1 = 256,
46 .i_IorangeBase2 = 256,
47 .i_IorangeBase3 = 256,
48 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
49 .pc_EepromChip = ADDIDATA_9054,
51 .i_NbrAiChannelDiff = 4,
54 .pr_AiRangelist = &range_apci3XXX_ai,
55 .i_NbrTTLChannel = 24,
56 .b_AvailableConvertUnit = 6,
57 .ui_MinAcquisitiontimeNs = 10000,
58 .interrupt = v_APCI3XXX_Interrupt,
59 .reset = i_APCI3XXX_Reset,
60 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
61 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
62 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
63 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
64 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
65 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
67 .pc_DriverName = "apci3000-4",
68 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
70 .i_IorangeBase0 = 256,
71 .i_IorangeBase1 = 256,
72 .i_IorangeBase2 = 256,
73 .i_IorangeBase3 = 256,
74 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
75 .pc_EepromChip = ADDIDATA_9054,
77 .i_NbrAiChannelDiff = 2,
80 .pr_AiRangelist = &range_apci3XXX_ai,
81 .i_NbrTTLChannel = 24,
82 .b_AvailableConvertUnit = 6,
83 .ui_MinAcquisitiontimeNs = 10000,
84 .interrupt = v_APCI3XXX_Interrupt,
85 .reset = i_APCI3XXX_Reset,
86 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
87 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
88 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
89 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
90 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
91 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
93 .pc_DriverName = "apci3006-16",
94 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
96 .i_IorangeBase0 = 256,
97 .i_IorangeBase1 = 256,
98 .i_IorangeBase2 = 256,
99 .i_IorangeBase3 = 256,
100 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
101 .pc_EepromChip = ADDIDATA_9054,
102 .i_NbrAiChannel = 16,
103 .i_NbrAiChannelDiff = 8,
104 .i_AiChannelList = 16,
105 .i_AiMaxdata = 65535,
106 .pr_AiRangelist = &range_apci3XXX_ai,
107 .i_NbrTTLChannel = 24,
108 .b_AvailableConvertUnit = 6,
109 .ui_MinAcquisitiontimeNs = 10000,
110 .interrupt = v_APCI3XXX_Interrupt,
111 .reset = i_APCI3XXX_Reset,
112 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
113 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
114 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
115 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
116 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
117 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
119 .pc_DriverName = "apci3006-8",
120 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
121 .i_DeviceId = 0x3014,
122 .i_IorangeBase0 = 256,
123 .i_IorangeBase1 = 256,
124 .i_IorangeBase2 = 256,
125 .i_IorangeBase3 = 256,
126 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
127 .pc_EepromChip = ADDIDATA_9054,
129 .i_NbrAiChannelDiff = 4,
130 .i_AiChannelList = 8,
131 .i_AiMaxdata = 65535,
132 .pr_AiRangelist = &range_apci3XXX_ai,
133 .i_NbrTTLChannel = 24,
134 .b_AvailableConvertUnit = 6,
135 .ui_MinAcquisitiontimeNs = 10000,
136 .interrupt = v_APCI3XXX_Interrupt,
137 .reset = i_APCI3XXX_Reset,
138 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
139 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
140 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
141 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
142 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
143 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
145 .pc_DriverName = "apci3006-4",
146 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
147 .i_DeviceId = 0x3015,
148 .i_IorangeBase0 = 256,
149 .i_IorangeBase1 = 256,
150 .i_IorangeBase2 = 256,
151 .i_IorangeBase3 = 256,
152 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
153 .pc_EepromChip = ADDIDATA_9054,
155 .i_NbrAiChannelDiff = 2,
156 .i_AiChannelList = 4,
157 .i_AiMaxdata = 65535,
158 .pr_AiRangelist = &range_apci3XXX_ai,
159 .i_NbrTTLChannel = 24,
160 .b_AvailableConvertUnit = 6,
161 .ui_MinAcquisitiontimeNs = 10000,
162 .interrupt = v_APCI3XXX_Interrupt,
163 .reset = i_APCI3XXX_Reset,
164 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
165 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
166 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
167 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
168 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
169 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
171 .pc_DriverName = "apci3010-16",
172 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
173 .i_DeviceId = 0x3016,
174 .i_IorangeBase0 = 256,
175 .i_IorangeBase1 = 256,
176 .i_IorangeBase2 = 256,
177 .i_IorangeBase3 = 256,
178 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
179 .pc_EepromChip = ADDIDATA_9054,
180 .i_NbrAiChannel = 16,
181 .i_NbrAiChannelDiff = 8,
182 .i_AiChannelList = 16,
184 .pr_AiRangelist = &range_apci3XXX_ai,
188 .i_NbrTTLChannel = 24,
189 .b_AvailableConvertUnit = 6,
190 .ui_MinAcquisitiontimeNs = 5000,
191 .interrupt = v_APCI3XXX_Interrupt,
192 .reset = i_APCI3XXX_Reset,
193 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
194 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
195 .di_bits = apci3xxx_di_insn_bits,
196 .do_bits = apci3xxx_do_insn_bits,
197 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
198 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
199 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
200 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
202 .pc_DriverName = "apci3010-8",
203 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
204 .i_DeviceId = 0x3017,
205 .i_IorangeBase0 = 256,
206 .i_IorangeBase1 = 256,
207 .i_IorangeBase2 = 256,
208 .i_IorangeBase3 = 256,
209 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
210 .pc_EepromChip = ADDIDATA_9054,
212 .i_NbrAiChannelDiff = 4,
213 .i_AiChannelList = 8,
215 .pr_AiRangelist = &range_apci3XXX_ai,
219 .i_NbrTTLChannel = 24,
220 .b_AvailableConvertUnit = 6,
221 .ui_MinAcquisitiontimeNs = 5000,
222 .interrupt = v_APCI3XXX_Interrupt,
223 .reset = i_APCI3XXX_Reset,
224 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
225 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
226 .di_bits = apci3xxx_di_insn_bits,
227 .do_bits = apci3xxx_do_insn_bits,
228 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
229 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
230 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
231 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
233 .pc_DriverName = "apci3010-4",
234 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
235 .i_DeviceId = 0x3018,
236 .i_IorangeBase0 = 256,
237 .i_IorangeBase1 = 256,
238 .i_IorangeBase2 = 256,
239 .i_IorangeBase3 = 256,
240 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
241 .pc_EepromChip = ADDIDATA_9054,
243 .i_NbrAiChannelDiff = 2,
244 .i_AiChannelList = 4,
246 .pr_AiRangelist = &range_apci3XXX_ai,
250 .i_NbrTTLChannel = 24,
251 .b_AvailableConvertUnit = 6,
252 .ui_MinAcquisitiontimeNs = 5000,
253 .interrupt = v_APCI3XXX_Interrupt,
254 .reset = i_APCI3XXX_Reset,
255 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
256 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
257 .di_bits = apci3xxx_di_insn_bits,
258 .do_bits = apci3xxx_do_insn_bits,
259 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
260 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
261 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
262 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
264 .pc_DriverName = "apci3016-16",
265 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
266 .i_DeviceId = 0x3019,
267 .i_IorangeBase0 = 256,
268 .i_IorangeBase1 = 256,
269 .i_IorangeBase2 = 256,
270 .i_IorangeBase3 = 256,
271 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
272 .pc_EepromChip = ADDIDATA_9054,
273 .i_NbrAiChannel = 16,
274 .i_NbrAiChannelDiff = 8,
275 .i_AiChannelList = 16,
276 .i_AiMaxdata = 65535,
277 .pr_AiRangelist = &range_apci3XXX_ai,
281 .i_NbrTTLChannel = 24,
282 .b_AvailableConvertUnit = 6,
283 .ui_MinAcquisitiontimeNs = 5000,
284 .interrupt = v_APCI3XXX_Interrupt,
285 .reset = i_APCI3XXX_Reset,
286 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
287 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
288 .di_bits = apci3xxx_di_insn_bits,
289 .do_bits = apci3xxx_do_insn_bits,
290 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
291 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
292 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
293 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
295 .pc_DriverName = "apci3016-8",
296 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
297 .i_DeviceId = 0x301A,
298 .i_IorangeBase0 = 256,
299 .i_IorangeBase1 = 256,
300 .i_IorangeBase2 = 256,
301 .i_IorangeBase3 = 256,
302 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
303 .pc_EepromChip = ADDIDATA_9054,
305 .i_NbrAiChannelDiff = 4,
306 .i_AiChannelList = 8,
307 .i_AiMaxdata = 65535,
308 .pr_AiRangelist = &range_apci3XXX_ai,
312 .i_NbrTTLChannel = 24,
313 .b_AvailableConvertUnit = 6,
314 .ui_MinAcquisitiontimeNs = 5000,
315 .interrupt = v_APCI3XXX_Interrupt,
316 .reset = i_APCI3XXX_Reset,
317 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
318 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
319 .di_bits = apci3xxx_di_insn_bits,
320 .do_bits = apci3xxx_do_insn_bits,
321 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
322 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
323 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
324 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
326 .pc_DriverName = "apci3016-4",
327 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
328 .i_DeviceId = 0x301B,
329 .i_IorangeBase0 = 256,
330 .i_IorangeBase1 = 256,
331 .i_IorangeBase2 = 256,
332 .i_IorangeBase3 = 256,
333 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
334 .pc_EepromChip = ADDIDATA_9054,
336 .i_NbrAiChannelDiff = 2,
337 .i_AiChannelList = 4,
338 .i_AiMaxdata = 65535,
339 .pr_AiRangelist = &range_apci3XXX_ai,
343 .i_NbrTTLChannel = 24,
344 .b_AvailableConvertUnit = 6,
345 .ui_MinAcquisitiontimeNs = 5000,
346 .interrupt = v_APCI3XXX_Interrupt,
347 .reset = i_APCI3XXX_Reset,
348 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
349 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
350 .di_bits = apci3xxx_di_insn_bits,
351 .do_bits = apci3xxx_do_insn_bits,
352 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
353 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
354 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
355 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
357 .pc_DriverName = "apci3100-16-4",
358 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
359 .i_DeviceId = 0x301C,
360 .i_IorangeBase0 = 256,
361 .i_IorangeBase1 = 256,
362 .i_IorangeBase2 = 256,
363 .i_IorangeBase3 = 256,
364 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
365 .pc_EepromChip = ADDIDATA_9054,
366 .i_NbrAiChannel = 16,
367 .i_NbrAiChannelDiff = 8,
368 .i_AiChannelList = 16,
372 .pr_AiRangelist = &range_apci3XXX_ai,
373 .pr_AoRangelist = &range_apci3XXX_ao,
374 .i_NbrTTLChannel = 24,
375 .b_AvailableConvertUnit = 6,
376 .ui_MinAcquisitiontimeNs = 10000,
377 .interrupt = v_APCI3XXX_Interrupt,
378 .reset = i_APCI3XXX_Reset,
379 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
380 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
381 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
382 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
383 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
384 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
385 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
387 .pc_DriverName = "apci3100-8-4",
388 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
389 .i_DeviceId = 0x301D,
390 .i_IorangeBase0 = 256,
391 .i_IorangeBase1 = 256,
392 .i_IorangeBase2 = 256,
393 .i_IorangeBase3 = 256,
394 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
395 .pc_EepromChip = ADDIDATA_9054,
397 .i_NbrAiChannelDiff = 4,
398 .i_AiChannelList = 8,
402 .pr_AiRangelist = &range_apci3XXX_ai,
403 .pr_AoRangelist = &range_apci3XXX_ao,
404 .i_NbrTTLChannel = 24,
405 .b_AvailableConvertUnit = 6,
406 .ui_MinAcquisitiontimeNs = 10000,
407 .interrupt = v_APCI3XXX_Interrupt,
408 .reset = i_APCI3XXX_Reset,
409 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
410 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
411 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
412 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
413 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
414 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
415 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
417 .pc_DriverName = "apci3106-16-4",
418 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
419 .i_DeviceId = 0x301E,
420 .i_IorangeBase0 = 256,
421 .i_IorangeBase1 = 256,
422 .i_IorangeBase2 = 256,
423 .i_IorangeBase3 = 256,
424 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
425 .pc_EepromChip = ADDIDATA_9054,
426 .i_NbrAiChannel = 16,
427 .i_NbrAiChannelDiff = 8,
428 .i_AiChannelList = 16,
430 .i_AiMaxdata = 65535,
432 .pr_AiRangelist = &range_apci3XXX_ai,
433 .pr_AoRangelist = &range_apci3XXX_ao,
434 .i_NbrTTLChannel = 24,
435 .b_AvailableConvertUnit = 6,
436 .ui_MinAcquisitiontimeNs = 10000,
437 .interrupt = v_APCI3XXX_Interrupt,
438 .reset = i_APCI3XXX_Reset,
439 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
440 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
441 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
442 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
443 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
444 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
445 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
447 .pc_DriverName = "apci3106-8-4",
448 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
449 .i_DeviceId = 0x301F,
450 .i_IorangeBase0 = 256,
451 .i_IorangeBase1 = 256,
452 .i_IorangeBase2 = 256,
453 .i_IorangeBase3 = 256,
454 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
455 .pc_EepromChip = ADDIDATA_9054,
457 .i_NbrAiChannelDiff = 4,
458 .i_AiChannelList = 8,
460 .i_AiMaxdata = 65535,
462 .pr_AiRangelist = &range_apci3XXX_ai,
463 .pr_AoRangelist = &range_apci3XXX_ao,
464 .i_NbrTTLChannel = 24,
465 .b_AvailableConvertUnit = 6,
466 .ui_MinAcquisitiontimeNs = 10000,
467 .interrupt = v_APCI3XXX_Interrupt,
468 .reset = i_APCI3XXX_Reset,
469 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
470 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
471 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
472 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
473 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
474 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
475 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
477 .pc_DriverName = "apci3110-16-4",
478 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
479 .i_DeviceId = 0x3020,
480 .i_IorangeBase0 = 256,
481 .i_IorangeBase1 = 256,
482 .i_IorangeBase2 = 256,
483 .i_IorangeBase3 = 256,
484 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
485 .pc_EepromChip = ADDIDATA_9054,
486 .i_NbrAiChannel = 16,
487 .i_NbrAiChannelDiff = 8,
488 .i_AiChannelList = 16,
492 .pr_AiRangelist = &range_apci3XXX_ai,
493 .pr_AoRangelist = &range_apci3XXX_ao,
497 .i_NbrTTLChannel = 24,
498 .b_AvailableConvertUnit = 6,
499 .ui_MinAcquisitiontimeNs = 5000,
500 .interrupt = v_APCI3XXX_Interrupt,
501 .reset = i_APCI3XXX_Reset,
502 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
503 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
504 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
505 .di_bits = apci3xxx_di_insn_bits,
506 .do_bits = apci3xxx_do_insn_bits,
507 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
508 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
509 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
510 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
512 .pc_DriverName = "apci3110-8-4",
513 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
514 .i_DeviceId = 0x3021,
515 .i_IorangeBase0 = 256,
516 .i_IorangeBase1 = 256,
517 .i_IorangeBase2 = 256,
518 .i_IorangeBase3 = 256,
519 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
520 .pc_EepromChip = ADDIDATA_9054,
522 .i_NbrAiChannelDiff = 4,
523 .i_AiChannelList = 8,
527 .pr_AiRangelist = &range_apci3XXX_ai,
528 .pr_AoRangelist = &range_apci3XXX_ao,
532 .i_NbrTTLChannel = 24,
533 .b_AvailableConvertUnit = 6,
534 .ui_MinAcquisitiontimeNs = 5000,
535 .interrupt = v_APCI3XXX_Interrupt,
536 .reset = i_APCI3XXX_Reset,
537 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
538 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
539 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
540 .di_bits = apci3xxx_di_insn_bits,
541 .do_bits = apci3xxx_do_insn_bits,
542 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
543 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
544 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
545 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
547 .pc_DriverName = "apci3116-16-4",
548 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
549 .i_DeviceId = 0x3022,
550 .i_IorangeBase0 = 256,
551 .i_IorangeBase1 = 256,
552 .i_IorangeBase2 = 256,
553 .i_IorangeBase3 = 256,
554 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
555 .pc_EepromChip = ADDIDATA_9054,
556 .i_NbrAiChannel = 16,
557 .i_NbrAiChannelDiff = 8,
558 .i_AiChannelList = 16,
560 .i_AiMaxdata = 65535,
562 .pr_AiRangelist = &range_apci3XXX_ai,
563 .pr_AoRangelist = &range_apci3XXX_ao,
567 .i_NbrTTLChannel = 24,
568 .b_AvailableConvertUnit = 6,
569 .ui_MinAcquisitiontimeNs = 5000,
570 .interrupt = v_APCI3XXX_Interrupt,
571 .reset = i_APCI3XXX_Reset,
572 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
573 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
574 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
575 .di_bits = apci3xxx_di_insn_bits,
576 .do_bits = apci3xxx_do_insn_bits,
577 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
578 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
579 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
580 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
582 .pc_DriverName = "apci3116-8-4",
583 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
584 .i_DeviceId = 0x3023,
585 .i_IorangeBase0 = 256,
586 .i_IorangeBase1 = 256,
587 .i_IorangeBase2 = 256,
588 .i_IorangeBase3 = 256,
589 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
590 .pc_EepromChip = ADDIDATA_9054,
592 .i_NbrAiChannelDiff = 4,
593 .i_AiChannelList = 8,
595 .i_AiMaxdata = 65535,
597 .pr_AiRangelist = &range_apci3XXX_ai,
598 .pr_AoRangelist = &range_apci3XXX_ao,
602 .i_NbrTTLChannel = 24,
603 .b_AvailableConvertUnit = 6,
604 .ui_MinAcquisitiontimeNs = 5000,
605 .interrupt = v_APCI3XXX_Interrupt,
606 .reset = i_APCI3XXX_Reset,
607 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
608 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
609 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
610 .di_bits = apci3xxx_di_insn_bits,
611 .do_bits = apci3xxx_do_insn_bits,
612 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
613 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
614 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
615 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
617 .pc_DriverName = "apci3003",
618 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
619 .i_DeviceId = 0x300B,
620 .i_IorangeBase0 = 256,
621 .i_IorangeBase1 = 256,
622 .i_IorangeBase2 = 256,
623 .i_IorangeBase3 = 256,
624 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
625 .pc_EepromChip = ADDIDATA_9054,
626 .i_NbrAiChannelDiff = 4,
627 .i_AiChannelList = 4,
628 .i_AiMaxdata = 65535,
629 .pr_AiRangelist = &range_apci3XXX_ai,
633 .b_AvailableConvertUnit = 7,
634 .ui_MinAcquisitiontimeNs = 2500,
635 .interrupt = v_APCI3XXX_Interrupt,
636 .reset = i_APCI3XXX_Reset,
637 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
638 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
639 .di_bits = apci3xxx_di_insn_bits,
640 .do_bits = apci3xxx_do_insn_bits,
642 .pc_DriverName = "apci3002-16",
643 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
644 .i_DeviceId = 0x3002,
645 .i_IorangeBase0 = 256,
646 .i_IorangeBase1 = 256,
647 .i_IorangeBase2 = 256,
648 .i_IorangeBase3 = 256,
649 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
650 .pc_EepromChip = ADDIDATA_9054,
651 .i_NbrAiChannelDiff = 16,
652 .i_AiChannelList = 16,
653 .i_AiMaxdata = 65535,
654 .pr_AiRangelist = &range_apci3XXX_ai,
658 .b_AvailableConvertUnit = 6,
659 .ui_MinAcquisitiontimeNs = 5000,
660 .interrupt = v_APCI3XXX_Interrupt,
661 .reset = i_APCI3XXX_Reset,
662 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
663 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
664 .di_bits = apci3xxx_di_insn_bits,
665 .do_bits = apci3xxx_do_insn_bits,
667 .pc_DriverName = "apci3002-8",
668 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
669 .i_DeviceId = 0x3003,
670 .i_IorangeBase0 = 256,
671 .i_IorangeBase1 = 256,
672 .i_IorangeBase2 = 256,
673 .i_IorangeBase3 = 256,
674 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
675 .pc_EepromChip = ADDIDATA_9054,
676 .i_NbrAiChannelDiff = 8,
677 .i_AiChannelList = 8,
678 .i_AiMaxdata = 65535,
679 .pr_AiRangelist = &range_apci3XXX_ai,
683 .b_AvailableConvertUnit = 6,
684 .ui_MinAcquisitiontimeNs = 5000,
685 .interrupt = v_APCI3XXX_Interrupt,
686 .reset = i_APCI3XXX_Reset,
687 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
688 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
689 .di_bits = apci3xxx_di_insn_bits,
690 .do_bits = apci3xxx_do_insn_bits,
692 .pc_DriverName = "apci3002-4",
693 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
694 .i_DeviceId = 0x3004,
695 .i_IorangeBase0 = 256,
696 .i_IorangeBase1 = 256,
697 .i_IorangeBase2 = 256,
698 .i_IorangeBase3 = 256,
699 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
700 .pc_EepromChip = ADDIDATA_9054,
701 .i_NbrAiChannelDiff = 4,
702 .i_AiChannelList = 4,
703 .i_AiMaxdata = 65535,
704 .pr_AiRangelist = &range_apci3XXX_ai,
708 .b_AvailableConvertUnit = 6,
709 .ui_MinAcquisitiontimeNs = 5000,
710 .interrupt = v_APCI3XXX_Interrupt,
711 .reset = i_APCI3XXX_Reset,
712 .ai_config = i_APCI3XXX_InsnConfigAnalogInput,
713 .ai_read = i_APCI3XXX_InsnReadAnalogInput,
714 .di_bits = apci3xxx_di_insn_bits,
715 .do_bits = apci3xxx_do_insn_bits,
717 .pc_DriverName = "apci3500",
718 .i_VendorId = PCI_VENDOR_ID_ADDIDATA,
719 .i_DeviceId = 0x3024,
720 .i_IorangeBase0 = 256,
721 .i_IorangeBase1 = 256,
722 .i_IorangeBase2 = 256,
723 .i_IorangeBase3 = 256,
724 .i_PCIEeprom = ADDIDATA_NO_EEPROM,
725 .pc_EepromChip = ADDIDATA_9054,
728 .pr_AoRangelist = &range_apci3XXX_ao,
729 .i_NbrTTLChannel = 24,
730 .interrupt = v_APCI3XXX_Interrupt,
731 .reset = i_APCI3XXX_Reset,
732 .ao_write = i_APCI3XXX_InsnWriteAnalogOutput,
733 .ttl_config = i_APCI3XXX_InsnConfigInitTTLIO,
734 .ttl_bits = i_APCI3XXX_InsnBitsTTLIO,
735 .ttl_read = i_APCI3XXX_InsnReadTTLIO,
736 .ttl_write = i_APCI3XXX_InsnWriteTTLIO,
740 static struct comedi_driver apci3xxx_driver = {
741 .driver_name = "addi_apci_3xxx",
742 .module = THIS_MODULE,
743 .auto_attach = addi_auto_attach,
744 .detach = i_ADDI_Detach,
745 .num_names = ARRAY_SIZE(apci3xxx_boardtypes),
746 .board_name = &apci3xxx_boardtypes[0].pc_DriverName,
747 .offset = sizeof(struct addi_board),
750 static int apci3xxx_pci_probe(struct pci_dev *dev,
751 const struct pci_device_id *id)
753 return comedi_pci_auto_config(dev, &apci3xxx_driver, id->driver_data);
756 static DEFINE_PCI_DEVICE_TABLE(apci3xxx_pci_table) = {
757 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3010) },
758 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x300f) },
759 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x300e) },
760 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3013) },
761 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3014) },
762 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3015) },
763 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3016) },
764 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3017) },
765 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3018) },
766 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3019) },
767 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301a) },
768 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301b) },
769 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301c) },
770 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301d) },
771 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301e) },
772 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301f) },
773 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3020) },
774 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3021) },
775 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3022) },
776 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3023) },
777 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x300B) },
778 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3002) },
779 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3003) },
780 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3004) },
781 { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3024) },
784 MODULE_DEVICE_TABLE(pci, apci3xxx_pci_table);
786 static struct pci_driver apci3xxx_pci_driver = {
787 .name = "addi_apci_3xxx",
788 .id_table = apci3xxx_pci_table,
789 .probe = apci3xxx_pci_probe,
790 .remove = comedi_pci_auto_unconfig,
792 module_comedi_pci_driver(apci3xxx_driver, apci3xxx_pci_driver);
794 MODULE_AUTHOR("Comedi http://www.comedi.org");
795 MODULE_DESCRIPTION("Comedi low-level driver");
796 MODULE_LICENSE("GPL");