x86, early-printk: Update earlyprintk documentation (and kill x86 copy)
[firefly-linux-kernel-4.4.55.git] / drivers / staging / comedi / drivers / addi_apci_3xxx.c
1 #include <linux/pci.h>
2
3 #include "../comedidev.h"
4 #include "comedi_fc.h"
5 #include "amcc_s5933.h"
6
7 #include "addi-data/addi_common.h"
8
9 #include "addi-data/addi_eeprom.c"
10 #include "addi-data/hwdrv_apci3xxx.c"
11 #include "addi-data/addi_common.c"
12
13 static const struct addi_board apci3xxx_boardtypes[] = {
14         {
15                 .pc_DriverName          = "apci3000-16",
16                 .i_VendorId             = PCI_VENDOR_ID_ADDIDATA,
17                 .i_DeviceId             = 0x3010,
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,
24                 .i_NbrAiChannel         = 16,
25                 .i_NbrAiChannelDiff     = 8,
26                 .i_AiChannelList        = 16,
27                 .i_AiMaxdata            = 4095,
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,
40         }, {
41                 .pc_DriverName          = "apci3000-8",
42                 .i_VendorId             = PCI_VENDOR_ID_ADDIDATA,
43                 .i_DeviceId             = 0x300F,
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,
50                 .i_NbrAiChannel         = 8,
51                 .i_NbrAiChannelDiff     = 4,
52                 .i_AiChannelList        = 8,
53                 .i_AiMaxdata            = 4095,
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,
66         }, {
67                 .pc_DriverName          = "apci3000-4",
68                 .i_VendorId             = PCI_VENDOR_ID_ADDIDATA,
69                 .i_DeviceId             = 0x300E,
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,
76                 .i_NbrAiChannel         = 4,
77                 .i_NbrAiChannelDiff     = 2,
78                 .i_AiChannelList        = 4,
79                 .i_AiMaxdata            = 4095,
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,
92         }, {
93                 .pc_DriverName          = "apci3006-16",
94                 .i_VendorId             = PCI_VENDOR_ID_ADDIDATA,
95                 .i_DeviceId             = 0x3013,
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,
118         }, {
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,
128                 .i_NbrAiChannel         = 8,
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,
144         }, {
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,
154                 .i_NbrAiChannel         = 4,
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,
170         }, {
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,
183                 .i_AiMaxdata            = 4095,
184                 .pr_AiRangelist         = &range_apci3XXX_ai,
185                 .i_NbrDiChannel         = 4,
186                 .i_NbrDoChannel         = 4,
187                 .i_DoMaxdata            = 1,
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,
201         }, {
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,
211                 .i_NbrAiChannel         = 8,
212                 .i_NbrAiChannelDiff     = 4,
213                 .i_AiChannelList        = 8,
214                 .i_AiMaxdata            = 4095,
215                 .pr_AiRangelist         = &range_apci3XXX_ai,
216                 .i_NbrDiChannel         = 4,
217                 .i_NbrDoChannel         = 4,
218                 .i_DoMaxdata            = 1,
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,
232         }, {
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,
242                 .i_NbrAiChannel         = 4,
243                 .i_NbrAiChannelDiff     = 2,
244                 .i_AiChannelList        = 4,
245                 .i_AiMaxdata            = 4095,
246                 .pr_AiRangelist         = &range_apci3XXX_ai,
247                 .i_NbrDiChannel         = 4,
248                 .i_NbrDoChannel         = 4,
249                 .i_DoMaxdata            = 1,
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,
263         }, {
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,
278                 .i_NbrDiChannel         = 4,
279                 .i_NbrDoChannel         = 4,
280                 .i_DoMaxdata            = 1,
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,
294         }, {
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,
304                 .i_NbrAiChannel         = 8,
305                 .i_NbrAiChannelDiff     = 4,
306                 .i_AiChannelList        = 8,
307                 .i_AiMaxdata            = 65535,
308                 .pr_AiRangelist         = &range_apci3XXX_ai,
309                 .i_NbrDiChannel         = 4,
310                 .i_NbrDoChannel         = 4,
311                 .i_DoMaxdata            = 1,
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,
325         }, {
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,
335                 .i_NbrAiChannel         = 4,
336                 .i_NbrAiChannelDiff     = 2,
337                 .i_AiChannelList        = 4,
338                 .i_AiMaxdata            = 65535,
339                 .pr_AiRangelist         = &range_apci3XXX_ai,
340                 .i_NbrDiChannel         = 4,
341                 .i_NbrDoChannel         = 4,
342                 .i_DoMaxdata            = 1,
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,
356         }, {
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,
369                 .i_NbrAoChannel         = 4,
370                 .i_AiMaxdata            = 4095,
371                 .i_AoMaxdata            = 4095,
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,
386         }, {
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,
396                 .i_NbrAiChannel         = 8,
397                 .i_NbrAiChannelDiff     = 4,
398                 .i_AiChannelList        = 8,
399                 .i_NbrAoChannel         = 4,
400                 .i_AiMaxdata            = 4095,
401                 .i_AoMaxdata            = 4095,
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,
416         }, {
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,
429                 .i_NbrAoChannel         = 4,
430                 .i_AiMaxdata            = 65535,
431                 .i_AoMaxdata            = 4095,
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,
446         }, {
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,
456                 .i_NbrAiChannel         = 8,
457                 .i_NbrAiChannelDiff     = 4,
458                 .i_AiChannelList        = 8,
459                 .i_NbrAoChannel         = 4,
460                 .i_AiMaxdata            = 65535,
461                 .i_AoMaxdata            = 4095,
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,
476         }, {
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,
489                 .i_NbrAoChannel         = 4,
490                 .i_AiMaxdata            = 4095,
491                 .i_AoMaxdata            = 4095,
492                 .pr_AiRangelist         = &range_apci3XXX_ai,
493                 .pr_AoRangelist         = &range_apci3XXX_ao,
494                 .i_NbrDiChannel         = 4,
495                 .i_NbrDoChannel         = 4,
496                 .i_DoMaxdata            = 1,
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,
511         }, {
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,
521                 .i_NbrAiChannel         = 8,
522                 .i_NbrAiChannelDiff     = 4,
523                 .i_AiChannelList        = 8,
524                 .i_NbrAoChannel         = 4,
525                 .i_AiMaxdata            = 4095,
526                 .i_AoMaxdata            = 4095,
527                 .pr_AiRangelist         = &range_apci3XXX_ai,
528                 .pr_AoRangelist         = &range_apci3XXX_ao,
529                 .i_NbrDiChannel         = 4,
530                 .i_NbrDoChannel         = 4,
531                 .i_DoMaxdata            = 1,
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,
546         }, {
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,
559                 .i_NbrAoChannel         = 4,
560                 .i_AiMaxdata            = 65535,
561                 .i_AoMaxdata            = 4095,
562                 .pr_AiRangelist         = &range_apci3XXX_ai,
563                 .pr_AoRangelist         = &range_apci3XXX_ao,
564                 .i_NbrDiChannel         = 4,
565                 .i_NbrDoChannel         = 4,
566                 .i_DoMaxdata            = 1,
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,
581         }, {
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,
591                 .i_NbrAiChannel         = 8,
592                 .i_NbrAiChannelDiff     = 4,
593                 .i_AiChannelList        = 8,
594                 .i_NbrAoChannel         = 4,
595                 .i_AiMaxdata            = 65535,
596                 .i_AoMaxdata            = 4095,
597                 .pr_AiRangelist         = &range_apci3XXX_ai,
598                 .pr_AoRangelist         = &range_apci3XXX_ao,
599                 .i_NbrDiChannel         = 4,
600                 .i_NbrDoChannel         = 4,
601                 .i_DoMaxdata            = 1,
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,
616         }, {
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,
630                 .i_NbrDiChannel         = 4,
631                 .i_NbrDoChannel         = 4,
632                 .i_DoMaxdata            = 1,
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,
641         }, {
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,
655                 .i_NbrDiChannel         = 4,
656                 .i_NbrDoChannel         = 4,
657                 .i_DoMaxdata            = 1,
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,
666         }, {
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,
680                 .i_NbrDiChannel         = 4,
681                 .i_NbrDoChannel         = 4,
682                 .i_DoMaxdata            = 1,
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,
691         }, {
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,
705                 .i_NbrDiChannel         = 4,
706                 .i_NbrDoChannel         = 4,
707                 .i_DoMaxdata            = 1,
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,
716         }, {
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,
726                 .i_NbrAoChannel         = 4,
727                 .i_AoMaxdata            = 4095,
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,
737         },
738 };
739
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),
748 };
749
750 static int apci3xxx_pci_probe(struct pci_dev *dev,
751                                         const struct pci_device_id *ent)
752 {
753         return comedi_pci_auto_config(dev, &apci3xxx_driver);
754 }
755
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) },
782         { 0 }
783 };
784 MODULE_DEVICE_TABLE(pci, apci3xxx_pci_table);
785
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,
791 };
792 module_comedi_pci_driver(apci3xxx_driver, apci3xxx_pci_driver);
793
794 MODULE_AUTHOR("Comedi http://www.comedi.org");
795 MODULE_DESCRIPTION("Comedi low-level driver");
796 MODULE_LICENSE("GPL");