addi_apci_3xxx.c revision bf36f012c7ddaff083bb0ef187feddf4d85507a0
1#include "../comedidev.h"
2#include "comedi_fc.h"
3#include "amcc_s5933.h"
4
5#include "addi-data/addi_common.h"
6
7#include "addi-data/addi_eeprom.c"
8#include "addi-data/hwdrv_apci3xxx.c"
9#include "addi-data/addi_common.c"
10
11static const struct addi_board apci3xxx_boardtypes[] = {
12	{
13		.pc_DriverName		= "apci3000-16",
14		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
15		.i_DeviceId		= 0x3010,
16		.i_IorangeBase0		= 256,
17		.i_IorangeBase1		= 256,
18		.i_IorangeBase2		= 256,
19		.i_IorangeBase3		= 256,
20		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
21		.pc_EepromChip		= ADDIDATA_9054,
22		.i_NbrAiChannel		= 16,
23		.i_NbrAiChannelDiff	= 8,
24		.i_AiChannelList	= 16,
25		.i_AiMaxdata		= 4095,
26		.pr_AiRangelist		= &range_apci3XXX_ai,
27		.i_NbrTTLChannel	= 24,
28		.b_AvailableConvertUnit	= 6,
29		.ui_MinAcquisitiontimeNs = 10000,
30		.interrupt		= v_APCI3XXX_Interrupt,
31		.reset			= i_APCI3XXX_Reset,
32		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
33		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
34		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
35		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
36		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
37		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
38	}, {
39		.pc_DriverName		= "apci3000-8",
40		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
41		.i_DeviceId		= 0x300F,
42		.i_IorangeBase0		= 256,
43		.i_IorangeBase1		= 256,
44		.i_IorangeBase2		= 256,
45		.i_IorangeBase3		= 256,
46		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
47		.pc_EepromChip		= ADDIDATA_9054,
48		.i_NbrAiChannel		= 8,
49		.i_NbrAiChannelDiff	= 4,
50		.i_AiChannelList	= 8,
51		.i_AiMaxdata		= 4095,
52		.pr_AiRangelist		= &range_apci3XXX_ai,
53		.i_NbrTTLChannel	= 24,
54		.b_AvailableConvertUnit	= 6,
55		.ui_MinAcquisitiontimeNs = 10000,
56		.interrupt		= v_APCI3XXX_Interrupt,
57		.reset			= i_APCI3XXX_Reset,
58		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
59		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
60		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
61		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
62		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
63		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
64	}, {
65		.pc_DriverName		= "apci3000-4",
66		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
67		.i_DeviceId		= 0x300E,
68		.i_IorangeBase0		= 256,
69		.i_IorangeBase1		= 256,
70		.i_IorangeBase2		= 256,
71		.i_IorangeBase3		= 256,
72		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
73		.pc_EepromChip		= ADDIDATA_9054,
74		.i_NbrAiChannel		= 4,
75		.i_NbrAiChannelDiff	= 2,
76		.i_AiChannelList	= 4,
77		.i_AiMaxdata		= 4095,
78		.pr_AiRangelist		= &range_apci3XXX_ai,
79		.i_NbrTTLChannel	= 24,
80		.b_AvailableConvertUnit	= 6,
81		.ui_MinAcquisitiontimeNs = 10000,
82		.interrupt		= v_APCI3XXX_Interrupt,
83		.reset			= i_APCI3XXX_Reset,
84		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
85		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
86		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
87		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
88		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
89		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
90	}, {
91		.pc_DriverName		= "apci3006-16",
92		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
93		.i_DeviceId		= 0x3013,
94		.i_IorangeBase0		= 256,
95		.i_IorangeBase1		= 256,
96		.i_IorangeBase2		= 256,
97		.i_IorangeBase3		= 256,
98		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
99		.pc_EepromChip		= ADDIDATA_9054,
100		.i_NbrAiChannel		= 16,
101		.i_NbrAiChannelDiff	= 8,
102		.i_AiChannelList	= 16,
103		.i_AiMaxdata		= 65535,
104		.pr_AiRangelist		= &range_apci3XXX_ai,
105		.i_NbrTTLChannel	= 24,
106		.b_AvailableConvertUnit	= 6,
107		.ui_MinAcquisitiontimeNs = 10000,
108		.interrupt		= v_APCI3XXX_Interrupt,
109		.reset			= i_APCI3XXX_Reset,
110		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
111		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
112		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
113		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
114		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
115		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
116	}, {
117		.pc_DriverName		= "apci3006-8",
118		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
119		.i_DeviceId		= 0x3014,
120		.i_IorangeBase0		= 256,
121		.i_IorangeBase1		= 256,
122		.i_IorangeBase2		= 256,
123		.i_IorangeBase3		= 256,
124		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
125		.pc_EepromChip		= ADDIDATA_9054,
126		.i_NbrAiChannel		= 8,
127		.i_NbrAiChannelDiff	= 4,
128		.i_AiChannelList	= 8,
129		.i_AiMaxdata		= 65535,
130		.pr_AiRangelist		= &range_apci3XXX_ai,
131		.i_NbrTTLChannel	= 24,
132		.b_AvailableConvertUnit	= 6,
133		.ui_MinAcquisitiontimeNs = 10000,
134		.interrupt		= v_APCI3XXX_Interrupt,
135		.reset			= i_APCI3XXX_Reset,
136		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
137		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
138		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
139		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
140		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
141		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
142	}, {
143		.pc_DriverName		= "apci3006-4",
144		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
145		.i_DeviceId		= 0x3015,
146		.i_IorangeBase0		= 256,
147		.i_IorangeBase1		= 256,
148		.i_IorangeBase2		= 256,
149		.i_IorangeBase3		= 256,
150		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
151		.pc_EepromChip		= ADDIDATA_9054,
152		.i_NbrAiChannel		= 4,
153		.i_NbrAiChannelDiff	= 2,
154		.i_AiChannelList	= 4,
155		.i_AiMaxdata		= 65535,
156		.pr_AiRangelist		= &range_apci3XXX_ai,
157		.i_NbrTTLChannel	= 24,
158		.b_AvailableConvertUnit	= 6,
159		.ui_MinAcquisitiontimeNs = 10000,
160		.interrupt		= v_APCI3XXX_Interrupt,
161		.reset			= i_APCI3XXX_Reset,
162		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
163		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
164		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
165		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
166		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
167		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
168	}, {
169		.pc_DriverName		= "apci3010-16",
170		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
171		.i_DeviceId		= 0x3016,
172		.i_IorangeBase0		= 256,
173		.i_IorangeBase1		= 256,
174		.i_IorangeBase2		= 256,
175		.i_IorangeBase3		= 256,
176		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
177		.pc_EepromChip		= ADDIDATA_9054,
178		.i_NbrAiChannel		= 16,
179		.i_NbrAiChannelDiff	= 8,
180		.i_AiChannelList	= 16,
181		.i_AiMaxdata		= 4095,
182		.pr_AiRangelist		= &range_apci3XXX_ai,
183		.i_NbrDiChannel		= 4,
184		.i_NbrDoChannel		= 4,
185		.i_DoMaxdata		= 1,
186		.i_NbrTTLChannel	= 24,
187		.b_AvailableConvertUnit	= 6,
188		.ui_MinAcquisitiontimeNs = 5000,
189		.interrupt		= v_APCI3XXX_Interrupt,
190		.reset			= i_APCI3XXX_Reset,
191		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
192		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
193		.di_read		= i_APCI3XXX_InsnReadDigitalInput,
194		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
195		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
196		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
197		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
198		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
199		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
200		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
201		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
202	}, {
203		.pc_DriverName		= "apci3010-8",
204		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
205		.i_DeviceId		= 0x3017,
206		.i_IorangeBase0		= 256,
207		.i_IorangeBase1		= 256,
208		.i_IorangeBase2		= 256,
209		.i_IorangeBase3		= 256,
210		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
211		.pc_EepromChip		= ADDIDATA_9054,
212		.i_NbrAiChannel		= 8,
213		.i_NbrAiChannelDiff	= 4,
214		.i_AiChannelList	= 8,
215		.i_AiMaxdata		= 4095,
216		.pr_AiRangelist		= &range_apci3XXX_ai,
217		.i_NbrDiChannel		= 4,
218		.i_NbrDoChannel		= 4,
219		.i_DoMaxdata		= 1,
220		.i_NbrTTLChannel	= 24,
221		.b_AvailableConvertUnit	= 6,
222		.ui_MinAcquisitiontimeNs = 5000,
223		.interrupt		= v_APCI3XXX_Interrupt,
224		.reset			= i_APCI3XXX_Reset,
225		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
226		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
227		.di_read		= i_APCI3XXX_InsnReadDigitalInput,
228		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
229		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
230		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
231		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
232		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
233		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
234		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
235		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
236	}, {
237		.pc_DriverName		= "apci3010-4",
238		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
239		.i_DeviceId		= 0x3018,
240		.i_IorangeBase0		= 256,
241		.i_IorangeBase1		= 256,
242		.i_IorangeBase2		= 256,
243		.i_IorangeBase3		= 256,
244		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
245		.pc_EepromChip		= ADDIDATA_9054,
246		.i_NbrAiChannel		= 4,
247		.i_NbrAiChannelDiff	= 2,
248		.i_AiChannelList	= 4,
249		.i_AiMaxdata		= 4095,
250		.pr_AiRangelist		= &range_apci3XXX_ai,
251		.i_NbrDiChannel		= 4,
252		.i_NbrDoChannel		= 4,
253		.i_DoMaxdata		= 1,
254		.i_NbrTTLChannel	= 24,
255		.b_AvailableConvertUnit	= 6,
256		.ui_MinAcquisitiontimeNs = 5000,
257		.interrupt		= v_APCI3XXX_Interrupt,
258		.reset			= i_APCI3XXX_Reset,
259		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
260		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
261		.di_read		= i_APCI3XXX_InsnReadDigitalInput,
262		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
263		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
264		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
265		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
266		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
267		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
268		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
269		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
270	}, {
271		.pc_DriverName		= "apci3016-16",
272		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
273		.i_DeviceId		= 0x3019,
274		.i_IorangeBase0		= 256,
275		.i_IorangeBase1		= 256,
276		.i_IorangeBase2		= 256,
277		.i_IorangeBase3		= 256,
278		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
279		.pc_EepromChip		= ADDIDATA_9054,
280		.i_NbrAiChannel		= 16,
281		.i_NbrAiChannelDiff	= 8,
282		.i_AiChannelList	= 16,
283		.i_AiMaxdata		= 65535,
284		.pr_AiRangelist		= &range_apci3XXX_ai,
285		.i_NbrDiChannel		= 4,
286		.i_NbrDoChannel		= 4,
287		.i_DoMaxdata		= 1,
288		.i_NbrTTLChannel	= 24,
289		.b_AvailableConvertUnit	= 6,
290		.ui_MinAcquisitiontimeNs = 5000,
291		.interrupt		= v_APCI3XXX_Interrupt,
292		.reset			= i_APCI3XXX_Reset,
293		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
294		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
295		.di_read		= i_APCI3XXX_InsnReadDigitalInput,
296		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
297		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
298		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
299		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
300		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
301		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
302		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
303		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
304	}, {
305		.pc_DriverName		= "apci3016-8",
306		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
307		.i_DeviceId		= 0x301A,
308		.i_IorangeBase0		= 256,
309		.i_IorangeBase1		= 256,
310		.i_IorangeBase2		= 256,
311		.i_IorangeBase3		= 256,
312		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
313		.pc_EepromChip		= ADDIDATA_9054,
314		.i_NbrAiChannel		= 8,
315		.i_NbrAiChannelDiff	= 4,
316		.i_AiChannelList	= 8,
317		.i_AiMaxdata		= 65535,
318		.pr_AiRangelist		= &range_apci3XXX_ai,
319		.i_NbrDiChannel		= 4,
320		.i_NbrDoChannel		= 4,
321		.i_DoMaxdata		= 1,
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_read		= i_APCI3XXX_InsnReadDigitalInput,
330		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
331		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
332		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
333		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
334		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
335		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
336		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
337		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
338	}, {
339		.pc_DriverName		= "apci3016-4",
340		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
341		.i_DeviceId		= 0x301B,
342		.i_IorangeBase0		= 256,
343		.i_IorangeBase1		= 256,
344		.i_IorangeBase2		= 256,
345		.i_IorangeBase3		= 256,
346		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
347		.pc_EepromChip		= ADDIDATA_9054,
348		.i_NbrAiChannel		= 4,
349		.i_NbrAiChannelDiff	= 2,
350		.i_AiChannelList	= 4,
351		.i_AiMaxdata		= 65535,
352		.pr_AiRangelist		= &range_apci3XXX_ai,
353		.i_NbrDiChannel		= 4,
354		.i_NbrDoChannel		= 4,
355		.i_DoMaxdata		= 1,
356		.i_NbrTTLChannel	= 24,
357		.b_AvailableConvertUnit	= 6,
358		.ui_MinAcquisitiontimeNs = 5000,
359		.interrupt		= v_APCI3XXX_Interrupt,
360		.reset			= i_APCI3XXX_Reset,
361		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
362		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
363		.di_read		= i_APCI3XXX_InsnReadDigitalInput,
364		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
365		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
366		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
367		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
368		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
369		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
370		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
371		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
372	}, {
373		.pc_DriverName		= "apci3100-16-4",
374		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
375		.i_DeviceId		= 0x301C,
376		.i_IorangeBase0		= 256,
377		.i_IorangeBase1		= 256,
378		.i_IorangeBase2		= 256,
379		.i_IorangeBase3		= 256,
380		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
381		.pc_EepromChip		= ADDIDATA_9054,
382		.i_NbrAiChannel		= 16,
383		.i_NbrAiChannelDiff	= 8,
384		.i_AiChannelList	= 16,
385		.i_NbrAoChannel		= 4,
386		.i_AiMaxdata		= 4095,
387		.i_AoMaxdata		= 4095,
388		.pr_AiRangelist		= &range_apci3XXX_ai,
389		.pr_AoRangelist		= &range_apci3XXX_ao,
390		.i_NbrTTLChannel	= 24,
391		.b_AvailableConvertUnit	= 6,
392		.ui_MinAcquisitiontimeNs = 10000,
393		.interrupt		= v_APCI3XXX_Interrupt,
394		.reset			= i_APCI3XXX_Reset,
395		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
396		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
397		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
398		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
399		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
400		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
401		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
402	}, {
403		.pc_DriverName		= "apci3100-8-4",
404		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
405		.i_DeviceId		= 0x301D,
406		.i_IorangeBase0		= 256,
407		.i_IorangeBase1		= 256,
408		.i_IorangeBase2		= 256,
409		.i_IorangeBase3		= 256,
410		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
411		.pc_EepromChip		= ADDIDATA_9054,
412		.i_NbrAiChannel		= 8,
413		.i_NbrAiChannelDiff	= 4,
414		.i_AiChannelList	= 8,
415		.i_NbrAoChannel		= 4,
416		.i_AiMaxdata		= 4095,
417		.i_AoMaxdata		= 4095,
418		.pr_AiRangelist		= &range_apci3XXX_ai,
419		.pr_AoRangelist		= &range_apci3XXX_ao,
420		.i_NbrTTLChannel	= 24,
421		.b_AvailableConvertUnit	= 6,
422		.ui_MinAcquisitiontimeNs = 10000,
423		.interrupt		= v_APCI3XXX_Interrupt,
424		.reset			= i_APCI3XXX_Reset,
425		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
426		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
427		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
428		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
429		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
430		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
431		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
432	}, {
433		.pc_DriverName		= "apci3106-16-4",
434		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
435		.i_DeviceId		= 0x301E,
436		.i_IorangeBase0		= 256,
437		.i_IorangeBase1		= 256,
438		.i_IorangeBase2		= 256,
439		.i_IorangeBase3		= 256,
440		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
441		.pc_EepromChip		= ADDIDATA_9054,
442		.i_NbrAiChannel		= 16,
443		.i_NbrAiChannelDiff	= 8,
444		.i_AiChannelList	= 16,
445		.i_NbrAoChannel		= 4,
446		.i_AiMaxdata		= 65535,
447		.i_AoMaxdata		= 4095,
448		.pr_AiRangelist		= &range_apci3XXX_ai,
449		.pr_AoRangelist		= &range_apci3XXX_ao,
450		.i_NbrTTLChannel	= 24,
451		.b_AvailableConvertUnit	= 6,
452		.ui_MinAcquisitiontimeNs = 10000,
453		.interrupt		= v_APCI3XXX_Interrupt,
454		.reset			= i_APCI3XXX_Reset,
455		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
456		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
457		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
458		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
459		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
460		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
461		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
462	}, {
463		.pc_DriverName		= "apci3106-8-4",
464		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
465		.i_DeviceId		= 0x301F,
466		.i_IorangeBase0		= 256,
467		.i_IorangeBase1		= 256,
468		.i_IorangeBase2		= 256,
469		.i_IorangeBase3		= 256,
470		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
471		.pc_EepromChip		= ADDIDATA_9054,
472		.i_NbrAiChannel		= 8,
473		.i_NbrAiChannelDiff	= 4,
474		.i_AiChannelList	= 8,
475		.i_NbrAoChannel		= 4,
476		.i_AiMaxdata		= 65535,
477		.i_AoMaxdata		= 4095,
478		.pr_AiRangelist		= &range_apci3XXX_ai,
479		.pr_AoRangelist		= &range_apci3XXX_ao,
480		.i_NbrTTLChannel	= 24,
481		.b_AvailableConvertUnit	= 6,
482		.ui_MinAcquisitiontimeNs = 10000,
483		.interrupt		= v_APCI3XXX_Interrupt,
484		.reset			= i_APCI3XXX_Reset,
485		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
486		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
487		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
488		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
489		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
490		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
491		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
492	}, {
493		.pc_DriverName		= "apci3110-16-4",
494		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
495		.i_DeviceId		= 0x3020,
496		.i_IorangeBase0		= 256,
497		.i_IorangeBase1		= 256,
498		.i_IorangeBase2		= 256,
499		.i_IorangeBase3		= 256,
500		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
501		.pc_EepromChip		= ADDIDATA_9054,
502		.i_NbrAiChannel		= 16,
503		.i_NbrAiChannelDiff	= 8,
504		.i_AiChannelList	= 16,
505		.i_NbrAoChannel		= 4,
506		.i_AiMaxdata		= 4095,
507		.i_AoMaxdata		= 4095,
508		.pr_AiRangelist		= &range_apci3XXX_ai,
509		.pr_AoRangelist		= &range_apci3XXX_ao,
510		.i_NbrDiChannel		= 4,
511		.i_NbrDoChannel		= 4,
512		.i_DoMaxdata		= 1,
513		.i_NbrTTLChannel	= 24,
514		.b_AvailableConvertUnit	= 6,
515		.ui_MinAcquisitiontimeNs = 5000,
516		.interrupt		= v_APCI3XXX_Interrupt,
517		.reset			= i_APCI3XXX_Reset,
518		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
519		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
520		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
521		.di_read		= i_APCI3XXX_InsnReadDigitalInput,
522		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
523		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
524		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
525		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
526		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
527		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
528		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
529		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
530	}, {
531		.pc_DriverName		= "apci3110-8-4",
532		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
533		.i_DeviceId		= 0x3021,
534		.i_IorangeBase0		= 256,
535		.i_IorangeBase1		= 256,
536		.i_IorangeBase2		= 256,
537		.i_IorangeBase3		= 256,
538		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
539		.pc_EepromChip		= ADDIDATA_9054,
540		.i_NbrAiChannel		= 8,
541		.i_NbrAiChannelDiff	= 4,
542		.i_AiChannelList	= 8,
543		.i_NbrAoChannel		= 4,
544		.i_AiMaxdata		= 4095,
545		.i_AoMaxdata		= 4095,
546		.pr_AiRangelist		= &range_apci3XXX_ai,
547		.pr_AoRangelist		= &range_apci3XXX_ao,
548		.i_NbrDiChannel		= 4,
549		.i_NbrDoChannel		= 4,
550		.i_DoMaxdata		= 1,
551		.i_NbrTTLChannel	= 24,
552		.b_AvailableConvertUnit	= 6,
553		.ui_MinAcquisitiontimeNs = 5000,
554		.interrupt		= v_APCI3XXX_Interrupt,
555		.reset			= i_APCI3XXX_Reset,
556		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
557		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
558		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
559		.di_read		= i_APCI3XXX_InsnReadDigitalInput,
560		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
561		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
562		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
563		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
564		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
565		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
566		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
567		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
568	}, {
569		.pc_DriverName		= "apci3116-16-4",
570		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
571		.i_DeviceId		= 0x3022,
572		.i_IorangeBase0		= 256,
573		.i_IorangeBase1		= 256,
574		.i_IorangeBase2		= 256,
575		.i_IorangeBase3		= 256,
576		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
577		.pc_EepromChip		= ADDIDATA_9054,
578		.i_NbrAiChannel		= 16,
579		.i_NbrAiChannelDiff	= 8,
580		.i_AiChannelList	= 16,
581		.i_NbrAoChannel		= 4,
582		.i_AiMaxdata		= 65535,
583		.i_AoMaxdata		= 4095,
584		.pr_AiRangelist		= &range_apci3XXX_ai,
585		.pr_AoRangelist		= &range_apci3XXX_ao,
586		.i_NbrDiChannel		= 4,
587		.i_NbrDoChannel		= 4,
588		.i_DoMaxdata		= 1,
589		.i_NbrTTLChannel	= 24,
590		.b_AvailableConvertUnit	= 6,
591		.ui_MinAcquisitiontimeNs = 5000,
592		.interrupt		= v_APCI3XXX_Interrupt,
593		.reset			= i_APCI3XXX_Reset,
594		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
595		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
596		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
597		.di_read		= i_APCI3XXX_InsnReadDigitalInput,
598		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
599		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
600		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
601		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
602		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
603		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
604		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
605		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
606	}, {
607		.pc_DriverName		= "apci3116-8-4",
608		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
609		.i_DeviceId		= 0x3023,
610		.i_IorangeBase0		= 256,
611		.i_IorangeBase1		= 256,
612		.i_IorangeBase2		= 256,
613		.i_IorangeBase3		= 256,
614		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
615		.pc_EepromChip		= ADDIDATA_9054,
616		.i_NbrAiChannel		= 8,
617		.i_NbrAiChannelDiff	= 4,
618		.i_AiChannelList	= 8,
619		.i_NbrAoChannel		= 4,
620		.i_AiMaxdata		= 65535,
621		.i_AoMaxdata		= 4095,
622		.pr_AiRangelist		= &range_apci3XXX_ai,
623		.pr_AoRangelist		= &range_apci3XXX_ao,
624		.i_NbrDiChannel		= 4,
625		.i_NbrDoChannel		= 4,
626		.i_DoMaxdata		= 1,
627		.i_NbrTTLChannel	= 24,
628		.b_AvailableConvertUnit	= 6,
629		.ui_MinAcquisitiontimeNs = 5000,
630		.interrupt		= v_APCI3XXX_Interrupt,
631		.reset			= i_APCI3XXX_Reset,
632		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
633		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
634		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
635		.di_read		= i_APCI3XXX_InsnReadDigitalInput,
636		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
637		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
638		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
639		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
640		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
641		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
642		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
643		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
644	}, {
645		.pc_DriverName		= "apci3003",
646		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
647		.i_DeviceId		= 0x300B,
648		.i_IorangeBase0		= 256,
649		.i_IorangeBase1		= 256,
650		.i_IorangeBase2		= 256,
651		.i_IorangeBase3		= 256,
652		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
653		.pc_EepromChip		= ADDIDATA_9054,
654		.i_NbrAiChannelDiff	= 4,
655		.i_AiChannelList	= 4,
656		.i_AiMaxdata		= 65535,
657		.pr_AiRangelist		= &range_apci3XXX_ai,
658		.i_NbrDiChannel		= 4,
659		.i_NbrDoChannel		= 4,
660		.i_DoMaxdata		= 1,
661		.b_AvailableConvertUnit	= 7,
662		.ui_MinAcquisitiontimeNs = 2500,
663		.interrupt		= v_APCI3XXX_Interrupt,
664		.reset			= i_APCI3XXX_Reset,
665		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
666		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
667		.di_read		= i_APCI3XXX_InsnReadDigitalInput,
668		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
669		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
670		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
671		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
672	}, {
673		.pc_DriverName		= "apci3002-16",
674		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
675		.i_DeviceId		= 0x3002,
676		.i_IorangeBase0		= 256,
677		.i_IorangeBase1		= 256,
678		.i_IorangeBase2		= 256,
679		.i_IorangeBase3		= 256,
680		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
681		.pc_EepromChip		= ADDIDATA_9054,
682		.i_NbrAiChannelDiff	= 16,
683		.i_AiChannelList	= 16,
684		.i_AiMaxdata		= 65535,
685		.pr_AiRangelist		= &range_apci3XXX_ai,
686		.i_NbrDiChannel		= 4,
687		.i_NbrDoChannel		= 4,
688		.i_DoMaxdata		= 1,
689		.b_AvailableConvertUnit	= 6,
690		.ui_MinAcquisitiontimeNs = 5000,
691		.interrupt		= v_APCI3XXX_Interrupt,
692		.reset			= i_APCI3XXX_Reset,
693		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
694		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
695		.di_read		= i_APCI3XXX_InsnReadDigitalInput,
696		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
697		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
698		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
699		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
700	}, {
701		.pc_DriverName		= "apci3002-8",
702		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
703		.i_DeviceId		= 0x3003,
704		.i_IorangeBase0		= 256,
705		.i_IorangeBase1		= 256,
706		.i_IorangeBase2		= 256,
707		.i_IorangeBase3		= 256,
708		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
709		.pc_EepromChip		= ADDIDATA_9054,
710		.i_NbrAiChannelDiff	= 8,
711		.i_AiChannelList	= 8,
712		.i_AiMaxdata		= 65535,
713		.pr_AiRangelist		= &range_apci3XXX_ai,
714		.i_NbrDiChannel		= 4,
715		.i_NbrDoChannel		= 4,
716		.i_DoMaxdata		= 1,
717		.b_AvailableConvertUnit	= 6,
718		.ui_MinAcquisitiontimeNs = 5000,
719		.interrupt		= v_APCI3XXX_Interrupt,
720		.reset			= i_APCI3XXX_Reset,
721		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
722		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
723		.di_read		= i_APCI3XXX_InsnReadDigitalInput,
724		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
725		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
726		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
727		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
728	}, {
729		.pc_DriverName		= "apci3002-4",
730		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
731		.i_DeviceId		= 0x3004,
732		.i_IorangeBase0		= 256,
733		.i_IorangeBase1		= 256,
734		.i_IorangeBase2		= 256,
735		.i_IorangeBase3		= 256,
736		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
737		.pc_EepromChip		= ADDIDATA_9054,
738		.i_NbrAiChannelDiff	= 4,
739		.i_AiChannelList	= 4,
740		.i_AiMaxdata		= 65535,
741		.pr_AiRangelist		= &range_apci3XXX_ai,
742		.i_NbrDiChannel		= 4,
743		.i_NbrDoChannel		= 4,
744		.i_DoMaxdata		= 1,
745		.b_AvailableConvertUnit	= 6,
746		.ui_MinAcquisitiontimeNs = 5000,
747		.interrupt		= v_APCI3XXX_Interrupt,
748		.reset			= i_APCI3XXX_Reset,
749		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
750		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
751		.di_read		= i_APCI3XXX_InsnReadDigitalInput,
752		.di_bits		= i_APCI3XXX_InsnBitsDigitalInput,
753		.do_write		= i_APCI3XXX_InsnWriteDigitalOutput,
754		.do_bits		= i_APCI3XXX_InsnBitsDigitalOutput,
755		.do_read		= i_APCI3XXX_InsnReadDigitalOutput,
756	}, {
757		.pc_DriverName		= "apci3500",
758		.i_VendorId		= PCI_VENDOR_ID_ADDIDATA,
759		.i_DeviceId		= 0x3024,
760		.i_IorangeBase0		= 256,
761		.i_IorangeBase1		= 256,
762		.i_IorangeBase2		= 256,
763		.i_IorangeBase3		= 256,
764		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
765		.pc_EepromChip		= ADDIDATA_9054,
766		.i_NbrAoChannel		= 4,
767		.i_AoMaxdata		= 4095,
768		.pr_AoRangelist		= &range_apci3XXX_ao,
769		.i_NbrTTLChannel	= 24,
770		.interrupt		= v_APCI3XXX_Interrupt,
771		.reset			= i_APCI3XXX_Reset,
772		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
773		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
774		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
775		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
776		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
777	},
778};
779
780static struct comedi_driver apci3xxx_driver = {
781	.driver_name	= "addi_apci_3xxx",
782	.module		= THIS_MODULE,
783	.attach_pci	= addi_attach_pci,
784	.detach		= i_ADDI_Detach,
785	.num_names	= ARRAY_SIZE(apci3xxx_boardtypes),
786	.board_name	= &apci3xxx_boardtypes[0].pc_DriverName,
787	.offset		= sizeof(struct addi_board),
788};
789
790static int __devinit apci3xxx_pci_probe(struct pci_dev *dev,
791					const struct pci_device_id *ent)
792{
793	return comedi_pci_auto_config(dev, &apci3xxx_driver);
794}
795
796static void __devexit apci3xxx_pci_remove(struct pci_dev *dev)
797{
798	comedi_pci_auto_unconfig(dev);
799}
800
801static DEFINE_PCI_DEVICE_TABLE(apci3xxx_pci_table) = {
802	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3010) },
803	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x300f) },
804	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x300e) },
805	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3013) },
806	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3014) },
807	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3015) },
808	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3016) },
809	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3017) },
810	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3018) },
811	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3019) },
812	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301a) },
813	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301b) },
814	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301c) },
815	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301d) },
816	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301e) },
817	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x301f) },
818	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3020) },
819	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3021) },
820	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3022) },
821	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3023) },
822	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x300B) },
823	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3002) },
824	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3003) },
825	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3004) },
826	{ PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, 0x3024) },
827	{ 0 }
828};
829MODULE_DEVICE_TABLE(pci, apci3xxx_pci_table);
830
831static struct pci_driver apci3xxx_pci_driver = {
832	.name		= "addi_apci_3xxx",
833	.id_table	= apci3xxx_pci_table,
834	.probe		= apci3xxx_pci_probe,
835	.remove		= __devexit_p(apci3xxx_pci_remove),
836};
837module_comedi_pci_driver(apci3xxx_driver, apci3xxx_pci_driver);
838
839MODULE_AUTHOR("Comedi http://www.comedi.org");
840MODULE_DESCRIPTION("Comedi low-level driver");
841MODULE_LICENSE("GPL");
842