Staging: comedi: Remove C99 comments
[pandora-kernel.git] / drivers / staging / comedi / drivers / ni_pcimio.c
1 /*
2     comedi/drivers/ni_pcimio.c
3     Hardware driver for NI PCI-MIO E series cards
4
5     COMEDI - Linux Control and Measurement Device Interface
6     Copyright (C) 1997-8 David A. Schleef <ds@schleef.org>
7
8     This program is free software; you can redistribute it and/or modify
9     it under the terms of the GNU General Public License as published by
10     the Free Software Foundation; either version 2 of the License, or
11     (at your option) any later version.
12
13     This program is distributed in the hope that it will be useful,
14     but WITHOUT ANY WARRANTY; without even the implied warranty of
15     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16     GNU General Public License for more details.
17
18     You should have received a copy of the GNU General Public License
19     along with this program; if not, write to the Free Software
20     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22 /*
23 Driver: ni_pcimio
24 Description: National Instruments PCI-MIO-E series and M series (all boards)
25 Author: ds, John Hallen, Frank Mori Hess, Rolf Mueller, Herbert Peremans,
26   Herman Bruyninckx, Terry Barnaby
27 Status: works
28 Devices: [National Instruments] PCI-MIO-16XE-50 (ni_pcimio),
29   PCI-MIO-16XE-10, PXI-6030E, PCI-MIO-16E-1, PCI-MIO-16E-4, PCI-6014, PCI-6040E,
30   PXI-6040E, PCI-6030E, PCI-6031E, PCI-6032E, PCI-6033E, PCI-6071E, PCI-6023E,
31   PCI-6024E, PCI-6025E, PXI-6025E, PCI-6034E, PCI-6035E, PCI-6052E,
32   PCI-6110, PCI-6111, PCI-6220, PCI-6221, PCI-6224, PXI-6224, PCI-6225,
33   PCI-6229, PCI-6250, PCI-6251, PCIe-6251, PCI-6254, PCI-6259, PCIe-6259,
34   PCI-6280, PCI-6281, PXI-6281, PCI-6284, PCI-6289,
35   PCI-6711, PXI-6711, PCI-6713, PXI-6713,
36   PXI-6071E, PCI-6070E, PXI-6070E,
37   PXI-6052E, PCI-6036E, PCI-6731, PCI-6733, PXI-6733,
38   PCI-6143, PXI-6143
39 Updated: Wed, 03 Dec 2008 10:51:47 +0000
40
41 These boards are almost identical to the AT-MIO E series, except that
42 they use the PCI bus instead of ISA (i.e., AT).  See the notes for
43 the ni_atmio.o driver for additional information about these boards.
44
45 Autocalibration is supported on many of the devices, using the
46 comedi_calibrate (or comedi_soft_calibrate for m-series) utility.
47 M-Series boards do analog input and analog output calibration entirely
48 in software. The software calibration corrects
49 the analog input for offset, gain and
50 nonlinearity.  The analog outputs are corrected for offset and gain.
51 See the comedilib documentation on comedi_get_softcal_converter() for
52 more information.
53
54 By default, the driver uses DMA to transfer analog input data to
55 memory.  When DMA is enabled, not all triggering features are
56 supported.
57
58 Digital I/O may not work on 673x.
59
60 Note that the PCI-6143 is a simultaineous sampling device with 8 convertors.
61 With this board all of the convertors perform one simultaineous sample during
62 a scan interval. The period for a scan is used for the convert time in a
63 Comedi cmd. The convert trigger source is normally set to TRIG_NOW by default.
64
65 The RTSI trigger bus is supported on these cards on
66 subdevice 10. See the comedilib documentation for details.
67
68 Information (number of channels, bits, etc.) for some devices may be
69 incorrect.  Please check this and submit a bug if there are problems
70 for your device.
71
72 SCXI is probably broken for m-series boards.
73
74 Bugs:
75  - When DMA is enabled, COMEDI_EV_CONVERT does
76    not work correctly.
77
78 */
79 /*
80         The PCI-MIO E series driver was originally written by
81         Tomasz Motylewski <...>, and ported to comedi by ds.
82
83         References:
84
85            341079b.pdf  PCI E Series Register-Level Programmer Manual
86            340934b.pdf  DAQ-STC reference manual
87
88            322080b.pdf  6711/6713/6715 User Manual
89
90            320945c.pdf  PCI E Series User Manual
91            322138a.pdf  PCI-6052E and DAQPad-6052E User Manual
92
93         ISSUES:
94
95         need to deal with external reference for DAC, and other DAC
96         properties in board properties
97
98         deal with at-mio-16de-10 revision D to N changes, etc.
99
100         need to add other CALDAC type
101
102         need to slow down DAC loading.  I don't trust NI's claim that
103         two writes to the PCI bus slows IO enough.  I would prefer to
104         use comedi_udelay().  Timing specs: (clock)
105                 AD8522          30ns
106                 DAC8043         120ns
107                 DAC8800         60ns
108                 MB88341         ?
109
110 */
111
112 #include "../comedidev.h"
113
114 #include <asm/byteorder.h>
115 #include <linux/delay.h>
116
117 #include "ni_stc.h"
118 #include "mite.h"
119
120 /* #define PCI_DEBUG */
121
122 #define PCIDMA
123
124 #define PCIMIO 1
125 #undef ATMIO
126
127 #define MAX_N_CALDACS (16+16+2)
128
129 #define DRV_NAME "ni_pcimio"
130
131 /* The following two tables must be in the same order */
132 static DEFINE_PCI_DEVICE_TABLE(ni_pci_table) = {
133         {PCI_VENDOR_ID_NATINST, 0x0162, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
134         {PCI_VENDOR_ID_NATINST, 0x1170, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
135         {PCI_VENDOR_ID_NATINST, 0x1180, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
136         {PCI_VENDOR_ID_NATINST, 0x1190, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
137         {PCI_VENDOR_ID_NATINST, 0x11b0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
138         {PCI_VENDOR_ID_NATINST, 0x11c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
139         {PCI_VENDOR_ID_NATINST, 0x11d0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
140         {PCI_VENDOR_ID_NATINST, 0x1270, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
141         {PCI_VENDOR_ID_NATINST, 0x1330, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
142         {PCI_VENDOR_ID_NATINST, 0x1340, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
143         {PCI_VENDOR_ID_NATINST, 0x1350, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
144         {PCI_VENDOR_ID_NATINST, 0x14e0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
145         {PCI_VENDOR_ID_NATINST, 0x14f0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
146         {PCI_VENDOR_ID_NATINST, 0x1580, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
147         {PCI_VENDOR_ID_NATINST, 0x15b0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
148         {PCI_VENDOR_ID_NATINST, 0x1880, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
149         {PCI_VENDOR_ID_NATINST, 0x1870, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
150         {PCI_VENDOR_ID_NATINST, 0x18b0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
151         {PCI_VENDOR_ID_NATINST, 0x18c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
152         {PCI_VENDOR_ID_NATINST, 0x2410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
153         {PCI_VENDOR_ID_NATINST, 0x2420, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
154         {PCI_VENDOR_ID_NATINST, 0x2430, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
155         {PCI_VENDOR_ID_NATINST, 0x2890, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
156         {PCI_VENDOR_ID_NATINST, 0x28c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
157         {PCI_VENDOR_ID_NATINST, 0x2a60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
158         {PCI_VENDOR_ID_NATINST, 0x2a70, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
159         {PCI_VENDOR_ID_NATINST, 0x2a80, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
160         {PCI_VENDOR_ID_NATINST, 0x2ab0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
161         {PCI_VENDOR_ID_NATINST, 0x2b80, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
162         {PCI_VENDOR_ID_NATINST, 0x2b90, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
163         {PCI_VENDOR_ID_NATINST, 0x2c80, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
164         {PCI_VENDOR_ID_NATINST, 0x2ca0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
165         {PCI_VENDOR_ID_NATINST, 0x70aa, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
166         {PCI_VENDOR_ID_NATINST, 0x70ab, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
167         {PCI_VENDOR_ID_NATINST, 0x70ac, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
168         {PCI_VENDOR_ID_NATINST, 0x70af, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
169         {PCI_VENDOR_ID_NATINST, 0x70b0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
170         {PCI_VENDOR_ID_NATINST, 0x70b4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
171         {PCI_VENDOR_ID_NATINST, 0x70b6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
172         {PCI_VENDOR_ID_NATINST, 0x70b7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
173         {PCI_VENDOR_ID_NATINST, 0x70b8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
174         {PCI_VENDOR_ID_NATINST, 0x70bc, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
175         {PCI_VENDOR_ID_NATINST, 0x70bd, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
176         {PCI_VENDOR_ID_NATINST, 0x70bf, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
177         {PCI_VENDOR_ID_NATINST, 0x70c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
178         {PCI_VENDOR_ID_NATINST, 0x70f2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
179         {PCI_VENDOR_ID_NATINST, 0x710d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
180         {PCI_VENDOR_ID_NATINST, 0x716c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
181         {PCI_VENDOR_ID_NATINST, 0x717f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
182         {PCI_VENDOR_ID_NATINST, 0x71bc, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
183         {PCI_VENDOR_ID_NATINST, 0x717d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
184         {0}
185 };
186
187 MODULE_DEVICE_TABLE(pci, ni_pci_table);
188
189 /* These are not all the possible ao ranges for 628x boards.
190  They can do OFFSET +- REFERENCE where OFFSET can be
191  0V, 5V, APFI<0,1>, or AO<0...3> and RANGE can
192  be 10V, 5V, 2V, 1V, APFI<0,1>, AO<0...3>.  That's
193  63 different possibilities.  An AO channel
194  can not act as it's own OFFSET or REFERENCE.
195 */
196 static const struct comedi_lrange range_ni_M_628x_ao = { 8, {
197                         RANGE(-10, 10),
198                         RANGE(-5, 5),
199                         RANGE(-2, 2),
200                         RANGE(-1, 1),
201                         RANGE(-5, 15),
202                         RANGE(0, 10),
203                         RANGE(3, 7),
204                         RANGE(4, 6),
205                         RANGE_ext(-1, 1)
206         }
207 };
208 static const struct comedi_lrange range_ni_M_625x_ao = { 3, {
209                         RANGE(-10, 10),
210                         RANGE(-5, 5),
211                         RANGE_ext(-1, 1)
212         }
213 };
214 static const struct comedi_lrange range_ni_M_622x_ao = { 1, {
215                         RANGE(-10, 10),
216         }
217 };
218
219 static const struct ni_board_struct ni_boards[] = {
220         {
221                         .device_id = 0x0162,    /*  NI also says 0x1620.  typo? */
222                         .name = "pci-mio-16xe-50",
223                         .n_adchan = 16,
224                         .adbits = 16,
225                         .ai_fifo_depth = 2048,
226                         .alwaysdither = 1,
227                         .gainlkup = ai_gain_8,
228                         .ai_speed = 50000,
229                         .n_aochan = 2,
230                         .aobits = 12,
231                         .ao_fifo_depth = 0,
232                         .ao_range_table = &range_bipolar10,
233                         .ao_unipolar = 0,
234                         .ao_speed = 50000,
235                         .num_p0_dio_channels = 8,
236                         .caldac = {dac8800, dac8043},
237                         .has_8255 = 0,
238                 },
239         {
240                         .device_id = 0x1170,
241                         .name = "pci-mio-16xe-10",      /*  aka pci-6030E */
242                         .n_adchan = 16,
243                         .adbits = 16,
244                         .ai_fifo_depth = 512,
245                         .alwaysdither = 1,
246                         .gainlkup = ai_gain_14,
247                         .ai_speed = 10000,
248                         .n_aochan = 2,
249                         .aobits = 16,
250                         .ao_fifo_depth = 2048,
251                         .ao_range_table = &range_ni_E_ao_ext,
252                         .ao_unipolar = 1,
253                         .ao_speed = 10000,
254                         .num_p0_dio_channels = 8,
255                         .caldac = {dac8800, dac8043, ad8522},
256                         .has_8255 = 0,
257                 },
258         {
259                         .device_id = 0x28c0,
260                         .name = "pci-6014",
261                         .n_adchan = 16,
262                         .adbits = 16,
263                         .ai_fifo_depth = 512,
264                         .alwaysdither = 1,
265                         .gainlkup = ai_gain_4,
266                         .ai_speed = 5000,
267                         .n_aochan = 2,
268                         .aobits = 16,
269                         .ao_fifo_depth = 0,
270                         .ao_range_table = &range_bipolar10,
271                         .ao_unipolar = 0,
272                         .ao_speed = 100000,
273                         .num_p0_dio_channels = 8,
274                         .caldac = {ad8804_debug},
275                         .has_8255 = 0,
276                 },
277         {
278                         .device_id = 0x11d0,
279                         .name = "pxi-6030e",
280                         .n_adchan = 16,
281                         .adbits = 16,
282                         .ai_fifo_depth = 512,
283                         .alwaysdither = 1,
284                         .gainlkup = ai_gain_14,
285                         .ai_speed = 10000,
286                         .n_aochan = 2,
287                         .aobits = 16,
288                         .ao_fifo_depth = 2048,
289                         .ao_range_table = &range_ni_E_ao_ext,
290                         .ao_unipolar = 1,
291                         .ao_speed = 10000,
292                         .num_p0_dio_channels = 8,
293                         .caldac = {dac8800, dac8043, ad8522},
294                         .has_8255 = 0,
295                 },
296         {
297                         .device_id = 0x1180,
298                         .name = "pci-mio-16e-1",        /* aka pci-6070e */
299                         .n_adchan = 16,
300                         .adbits = 12,
301                         .ai_fifo_depth = 512,
302                         .alwaysdither = 0,
303                         .gainlkup = ai_gain_16,
304                         .ai_speed = 800,
305                         .n_aochan = 2,
306                         .aobits = 12,
307                         .ao_fifo_depth = 2048,
308                         .ao_range_table = &range_ni_E_ao_ext,
309                         .ao_unipolar = 1,
310                         .ao_speed = 1000,
311                         .num_p0_dio_channels = 8,
312                         .caldac = {mb88341},
313                         .has_8255 = 0,
314                 },
315         {
316                         .device_id = 0x1190,
317                         .name = "pci-mio-16e-4",        /* aka pci-6040e */
318                         .n_adchan = 16,
319                         .adbits = 12,
320                         .ai_fifo_depth = 512,
321                         .alwaysdither = 0,
322                         .gainlkup = ai_gain_16,
323                         /* Note: there have been reported problems with full speed
324                          * on this board */
325                         .ai_speed = 2000,
326                         .n_aochan = 2,
327                         .aobits = 12,
328                         .ao_fifo_depth = 512,
329                         .ao_range_table = &range_ni_E_ao_ext,
330                         .ao_unipolar = 1,
331                         .ao_speed = 1000,
332                         .num_p0_dio_channels = 8,
333                         .caldac = {ad8804_debug},       /*  doc says mb88341 */
334                         .has_8255 = 0,
335                 },
336         {
337                         .device_id = 0x11c0,
338                         .name = "pxi-6040e",
339                         .n_adchan = 16,
340                         .adbits = 12,
341                         .ai_fifo_depth = 512,
342                         .alwaysdither = 0,
343                         .gainlkup = ai_gain_16,
344                         .ai_speed = 2000,
345                         .n_aochan = 2,
346                         .aobits = 12,
347                         .ao_fifo_depth = 512,
348                         .ao_range_table = &range_ni_E_ao_ext,
349                         .ao_unipolar = 1,
350                         .ao_speed = 1000,
351                         .num_p0_dio_channels = 8,
352                         .caldac = {mb88341},
353                         .has_8255 = 0,
354                 },
355
356         {
357                         .device_id = 0x1330,
358                         .name = "pci-6031e",
359                         .n_adchan = 64,
360                         .adbits = 16,
361                         .ai_fifo_depth = 512,
362                         .alwaysdither = 1,
363                         .gainlkup = ai_gain_14,
364                         .ai_speed = 10000,
365                         .n_aochan = 2,
366                         .aobits = 16,
367                         .ao_fifo_depth = 2048,
368                         .ao_range_table = &range_ni_E_ao_ext,
369                         .ao_unipolar = 1,
370                         .ao_speed = 10000,
371                         .num_p0_dio_channels = 8,
372                         .caldac = {dac8800, dac8043, ad8522},
373                         .has_8255 = 0,
374                 },
375         {
376                         .device_id = 0x1270,
377                         .name = "pci-6032e",
378                         .n_adchan = 16,
379                         .adbits = 16,
380                         .ai_fifo_depth = 512,
381                         .alwaysdither = 1,
382                         .gainlkup = ai_gain_14,
383                         .ai_speed = 10000,
384                         .n_aochan = 0,
385                         .aobits = 0,
386                         .ao_fifo_depth = 0,
387                         .ao_unipolar = 0,
388                         .num_p0_dio_channels = 8,
389                         .caldac = {dac8800, dac8043, ad8522},
390                         .has_8255 = 0,
391                 },
392         {
393                         .device_id = 0x1340,
394                         .name = "pci-6033e",
395                         .n_adchan = 64,
396                         .adbits = 16,
397                         .ai_fifo_depth = 512,
398                         .alwaysdither = 1,
399                         .gainlkup = ai_gain_14,
400                         .ai_speed = 10000,
401                         .n_aochan = 0,
402                         .aobits = 0,
403                         .ao_fifo_depth = 0,
404                         .ao_unipolar = 0,
405                         .num_p0_dio_channels = 8,
406                         .caldac = {dac8800, dac8043, ad8522},
407                         .has_8255 = 0,
408                 },
409         {
410                         .device_id = 0x1350,
411                         .name = "pci-6071e",
412                         .n_adchan = 64,
413                         .adbits = 12,
414                         .ai_fifo_depth = 512,
415                         .alwaysdither = 1,
416                         .gainlkup = ai_gain_16,
417                         .ai_speed = 800,
418                         .n_aochan = 2,
419                         .aobits = 12,
420                         .ao_fifo_depth = 2048,
421                         .ao_range_table = &range_ni_E_ao_ext,
422                         .ao_unipolar = 1,
423                         .ao_speed = 1000,
424                         .num_p0_dio_channels = 8,
425                         .caldac = {ad8804_debug},
426                         .has_8255 = 0,
427                 },
428         {
429                         .device_id = 0x2a60,
430                         .name = "pci-6023e",
431                         .n_adchan = 16,
432                         .adbits = 12,
433                         .ai_fifo_depth = 512,
434                         .alwaysdither = 0,
435                         .gainlkup = ai_gain_4,
436                         .ai_speed = 5000,
437                         .n_aochan = 0,
438                         .aobits = 0,
439                         .ao_unipolar = 0,
440                         .num_p0_dio_channels = 8,
441                         .caldac = {ad8804_debug},       /* manual is wrong */
442                         .has_8255 = 0,
443                 },
444         {
445                         .device_id = 0x2a70,
446                         .name = "pci-6024e",
447                         .n_adchan = 16,
448                         .adbits = 12,
449                         .ai_fifo_depth = 512,
450                         .alwaysdither = 0,
451                         .gainlkup = ai_gain_4,
452                         .ai_speed = 5000,
453                         .n_aochan = 2,
454                         .aobits = 12,
455                         .ao_fifo_depth = 0,
456                         .ao_range_table = &range_bipolar10,
457                         .ao_unipolar = 0,
458                         .ao_speed = 100000,
459                         .num_p0_dio_channels = 8,
460                         .caldac = {ad8804_debug},       /* manual is wrong */
461                         .has_8255 = 0,
462                 },
463         {
464                         .device_id = 0x2a80,
465                         .name = "pci-6025e",
466                         .n_adchan = 16,
467                         .adbits = 12,
468                         .ai_fifo_depth = 512,
469                         .alwaysdither = 0,
470                         .gainlkup = ai_gain_4,
471                         .ai_speed = 5000,
472                         .n_aochan = 2,
473                         .aobits = 12,
474                         .ao_fifo_depth = 0,
475                         .ao_range_table = &range_bipolar10,
476                         .ao_unipolar = 0,
477                         .ao_speed = 100000,
478                         .num_p0_dio_channels = 8,
479                         .caldac = {ad8804_debug},       /* manual is wrong */
480                         .has_8255 = 1,
481                 },
482         {
483                         .device_id = 0x2ab0,
484                         .name = "pxi-6025e",
485                         .n_adchan = 16,
486                         .adbits = 12,
487                         .ai_fifo_depth = 512,
488                         .alwaysdither = 0,
489                         .gainlkup = ai_gain_4,
490                         .ai_speed = 5000,
491                         .n_aochan = 2,
492                         .aobits = 12,
493                         .ao_fifo_depth = 0,
494                         .ao_range_table = &range_ni_E_ao_ext,
495                         .ao_unipolar = 1,
496                         .ao_speed = 100000,
497                         .num_p0_dio_channels = 8,
498                         .caldac = {ad8804_debug},       /* manual is wrong */
499                         .has_8255 = 1,
500                 },
501
502         {
503                         .device_id = 0x2ca0,
504                         .name = "pci-6034e",
505                         .n_adchan = 16,
506                         .adbits = 16,
507                         .ai_fifo_depth = 512,
508                         .alwaysdither = 1,
509                         .gainlkup = ai_gain_4,
510                         .ai_speed = 5000,
511                         .n_aochan = 0,
512                         .aobits = 0,
513                         .ao_fifo_depth = 0,
514                         .ao_unipolar = 0,
515                         .num_p0_dio_channels = 8,
516                         .caldac = {ad8804_debug},
517                         .has_8255 = 0,
518                 },
519         {
520                         .device_id = 0x2c80,
521                         .name = "pci-6035e",
522                         .n_adchan = 16,
523                         .adbits = 16,
524                         .ai_fifo_depth = 512,
525                         .alwaysdither = 1,
526                         .gainlkup = ai_gain_4,
527                         .ai_speed = 5000,
528                         .n_aochan = 2,
529                         .aobits = 12,
530                         .ao_fifo_depth = 0,
531                         .ao_range_table = &range_bipolar10,
532                         .ao_unipolar = 0,
533                         .ao_speed = 100000,
534                         .num_p0_dio_channels = 8,
535                         .caldac = {ad8804_debug},
536                         .has_8255 = 0,
537                 },
538         {
539                         .device_id = 0x18b0,
540                         .name = "pci-6052e",
541                         .n_adchan = 16,
542                         .adbits = 16,
543                         .ai_fifo_depth = 512,
544                         .alwaysdither = 1,
545                         .gainlkup = ai_gain_16,
546                         .ai_speed = 3000,
547                         .n_aochan = 2,
548                         .aobits = 16,
549                         .ao_unipolar = 1,
550                         .ao_fifo_depth = 2048,
551                         .ao_range_table = &range_ni_E_ao_ext,
552                         .ao_speed = 3000,
553                         .num_p0_dio_channels = 8,
554                         .caldac = {ad8804_debug, ad8804_debug, ad8522}, /* manual is wrong */
555                 },
556         {.device_id = 0x14e0,
557                         .name = "pci-6110",
558                         .n_adchan = 4,
559                         .adbits = 12,
560                         .ai_fifo_depth = 8192,
561                         .alwaysdither = 0,
562                         .gainlkup = ai_gain_611x,
563                         .ai_speed = 200,
564                         .n_aochan = 2,
565                         .aobits = 16,
566                         .reg_type = ni_reg_611x,
567                         .ao_range_table = &range_bipolar10,
568                         .ao_unipolar = 0,
569                         .ao_fifo_depth = 2048,
570                         .ao_speed = 250,
571                         .num_p0_dio_channels = 8,
572                         .caldac = {ad8804, ad8804},
573                 },
574         {
575                         .device_id = 0x14f0,
576                         .name = "pci-6111",
577                         .n_adchan = 2,
578                         .adbits = 12,
579                         .ai_fifo_depth = 8192,
580                         .alwaysdither = 0,
581                         .gainlkup = ai_gain_611x,
582                         .ai_speed = 200,
583                         .n_aochan = 2,
584                         .aobits = 16,
585                         .reg_type = ni_reg_611x,
586                         .ao_range_table = &range_bipolar10,
587                         .ao_unipolar = 0,
588                         .ao_fifo_depth = 2048,
589                         .ao_speed = 250,
590                         .num_p0_dio_channels = 8,
591                         .caldac = {ad8804, ad8804},
592                 },
593 #if 0
594         /* The 6115 boards probably need their own driver */
595         {
596                         .device_id = 0x2ed0,
597                         .name = "pci-6115",
598                         .n_adchan = 4,
599                         .adbits = 12,
600                         .ai_fifo_depth = 8192,
601                         .alwaysdither = 0,
602                         .gainlkup = ai_gain_611x,
603                         .ai_speed = 100,
604                         .n_aochan = 2,
605                         .aobits = 16,
606                         .ao_671x = 1,
607                         .ao_unipolar = 0,
608                         .ao_fifo_depth = 2048,
609                         .ao_speed = 250,
610                         .num_p0_dio_channels = 8,
611                         .reg_611x = 1,
612                         .caldac = {ad8804_debug, ad8804_debug, ad8804_debug},   /* XXX */
613                 },
614 #endif
615 #if 0
616         {
617                         .device_id = 0x0000,
618                         .name = "pxi-6115",
619                         .n_adchan = 4,
620                         .adbits = 12,
621                         .ai_fifo_depth = 8192,
622                         .alwaysdither = 0,
623                         .gainlkup = ai_gain_611x,
624                         .ai_speed = 100,
625                         .n_aochan = 2,
626                         .aobits = 16,
627                         .ao_671x = 1,
628                         .ao_unipolar = 0,
629                         .ao_fifo_depth = 2048,
630                         .ao_speed = 250,
631                         .reg_611x = 1,
632                         .num_p0_dio_channels = 8,
633                         caldac = {ad8804_debug, ad8804_debug, ad8804_debug},    /* XXX */
634                 },
635 #endif
636         {
637                         .device_id = 0x1880,
638                         .name = "pci-6711",
639                         .n_adchan = 0,  /* no analog input */
640                         .n_aochan = 4,
641                         .aobits = 12,
642                         .ao_unipolar = 0,
643                         .ao_fifo_depth = 16384,
644                         /* data sheet says 8192, but fifo really holds 16384 samples */
645                         .ao_range_table = &range_bipolar10,
646                         .ao_speed = 1000,
647                         .num_p0_dio_channels = 8,
648                         .reg_type = ni_reg_6711,
649                         .caldac = {ad8804_debug},
650                 },
651         {
652                         .device_id = 0x2b90,
653                         .name = "pxi-6711",
654                         .n_adchan = 0,  /* no analog input */
655                         .n_aochan = 4,
656                         .aobits = 12,
657                         .ao_unipolar = 0,
658                         .ao_fifo_depth = 16384,
659                         .ao_range_table = &range_bipolar10,
660                         .ao_speed = 1000,
661                         .num_p0_dio_channels = 8,
662                         .reg_type = ni_reg_6711,
663                         .caldac = {ad8804_debug},
664                 },
665         {
666                         .device_id = 0x1870,
667                         .name = "pci-6713",
668                         .n_adchan = 0,  /* no analog input */
669                         .n_aochan = 8,
670                         .aobits = 12,
671                         .ao_unipolar = 0,
672                         .ao_fifo_depth = 16384,
673                         .ao_range_table = &range_bipolar10,
674                         .ao_speed = 1000,
675                         .num_p0_dio_channels = 8,
676                         .reg_type = ni_reg_6713,
677                         .caldac = {ad8804_debug, ad8804_debug},
678                 },
679         {
680                         .device_id = 0x2b80,
681                         .name = "pxi-6713",
682                         .n_adchan = 0,  /* no analog input */
683                         .n_aochan = 8,
684                         .aobits = 12,
685                         .ao_unipolar = 0,
686                         .ao_fifo_depth = 16384,
687                         .ao_range_table = &range_bipolar10,
688                         .ao_speed = 1000,
689                         .num_p0_dio_channels = 8,
690                         .reg_type = ni_reg_6713,
691                         .caldac = {ad8804_debug, ad8804_debug},
692                 },
693         {
694                         .device_id = 0x2430,
695                         .name = "pci-6731",
696                         .n_adchan = 0,  /* no analog input */
697                         .n_aochan = 4,
698                         .aobits = 16,
699                         .ao_unipolar = 0,
700                         .ao_fifo_depth = 8192,
701                         .ao_range_table = &range_bipolar10,
702                         .ao_speed = 1000,
703                         .num_p0_dio_channels = 8,
704                         .reg_type = ni_reg_6711,
705                         .caldac = {ad8804_debug},
706                 },
707 #if 0                           /* need device ids */
708         {
709                         .device_id = 0x0,
710                         .name = "pxi-6731",
711                         .n_adchan = 0,  /* no analog input */
712                         .n_aochan = 4,
713                         .aobits = 16,
714                         .ao_unipolar = 0,
715                         .ao_fifo_depth = 8192,
716                         .ao_range_table = &range_bipolar10,
717                         .num_p0_dio_channels = 8,
718                         .reg_type = ni_reg_6711,
719                         .caldac = {ad8804_debug},
720                 },
721 #endif
722         {
723                         .device_id = 0x2410,
724                         .name = "pci-6733",
725                         .n_adchan = 0,  /* no analog input */
726                         .n_aochan = 8,
727                         .aobits = 16,
728                         .ao_unipolar = 0,
729                         .ao_fifo_depth = 16384,
730                         .ao_range_table = &range_bipolar10,
731                         .ao_speed = 1000,
732                         .num_p0_dio_channels = 8,
733                         .reg_type = ni_reg_6713,
734                         .caldac = {ad8804_debug, ad8804_debug},
735                 },
736         {
737                         .device_id = 0x2420,
738                         .name = "pxi-6733",
739                         .n_adchan = 0,  /* no analog input */
740                         .n_aochan = 8,
741                         .aobits = 16,
742                         .ao_unipolar = 0,
743                         .ao_fifo_depth = 16384,
744                         .ao_range_table = &range_bipolar10,
745                         .ao_speed = 1000,
746                         .num_p0_dio_channels = 8,
747                         .reg_type = ni_reg_6713,
748                         .caldac = {ad8804_debug, ad8804_debug},
749                 },
750         {
751                         .device_id = 0x15b0,
752                         .name = "pxi-6071e",
753                         .n_adchan = 64,
754                         .adbits = 12,
755                         .ai_fifo_depth = 512,
756                         .alwaysdither = 1,
757                         .gainlkup = ai_gain_16,
758                         .ai_speed = 800,
759                         .n_aochan = 2,
760                         .aobits = 12,
761                         .ao_fifo_depth = 2048,
762                         .ao_range_table = &range_ni_E_ao_ext,
763                         .ao_unipolar = 1,
764                         .ao_speed = 1000,
765                         .num_p0_dio_channels = 8,
766                         .caldac = {ad8804_debug},
767                         .has_8255 = 0,
768                 },
769         {
770                         .device_id = 0x11b0,
771                         .name = "pxi-6070e",
772                         .n_adchan = 16,
773                         .adbits = 12,
774                         .ai_fifo_depth = 512,
775                         .alwaysdither = 1,
776                         .gainlkup = ai_gain_16,
777                         .ai_speed = 800,
778                         .n_aochan = 2,
779                         .aobits = 12,
780                         .ao_fifo_depth = 2048,
781                         .ao_range_table = &range_ni_E_ao_ext,
782                         .ao_unipolar = 1,
783                         .ao_speed = 1000,
784                         .num_p0_dio_channels = 8,
785                         .caldac = {ad8804_debug},
786                         .has_8255 = 0,
787                 },
788         {
789                         .device_id = 0x18c0,
790                         .name = "pxi-6052e",
791                         .n_adchan = 16,
792                         .adbits = 16,
793                         .ai_fifo_depth = 512,
794                         .alwaysdither = 1,
795                         .gainlkup = ai_gain_16,
796                         .ai_speed = 3000,
797                         .n_aochan = 2,
798                         .aobits = 16,
799                         .ao_unipolar = 1,
800                         .ao_fifo_depth = 2048,
801                         .ao_range_table = &range_ni_E_ao_ext,
802                         .ao_speed = 3000,
803                         .num_p0_dio_channels = 8,
804                         .caldac = {mb88341, mb88341, ad8522},
805                 },
806         {
807                         .device_id = 0x1580,
808                         .name = "pxi-6031e",
809                         .n_adchan = 64,
810                         .adbits = 16,
811                         .ai_fifo_depth = 512,
812                         .alwaysdither = 1,
813                         .gainlkup = ai_gain_14,
814                         .ai_speed = 10000,
815                         .n_aochan = 2,
816                         .aobits = 16,
817                         .ao_fifo_depth = 2048,
818                         .ao_range_table = &range_ni_E_ao_ext,
819                         .ao_unipolar = 1,
820                         .ao_speed = 10000,
821                         .num_p0_dio_channels = 8,
822                         .caldac = {dac8800, dac8043, ad8522},
823                 },
824         {
825                         .device_id = 0x2890,
826                         .name = "pci-6036e",
827                         .n_adchan = 16,
828                         .adbits = 16,
829                         .ai_fifo_depth = 512,
830                         .alwaysdither = 1,
831                         .gainlkup = ai_gain_4,
832                         .ai_speed = 5000,
833                         .n_aochan = 2,
834                         .aobits = 16,
835                         .ao_fifo_depth = 0,
836                         .ao_range_table = &range_bipolar10,
837                         .ao_unipolar = 0,
838                         .ao_speed = 100000,
839                         .num_p0_dio_channels = 8,
840                         .caldac = {ad8804_debug},
841                         .has_8255 = 0,
842                 },
843         {
844                         .device_id = 0x70b0,
845                         .name = "pci-6220",
846                         .n_adchan = 16,
847                         .adbits = 16,
848                         .ai_fifo_depth = 512,
849                         /* FIXME:  guess */
850                         .gainlkup = ai_gain_622x,
851                         .ai_speed = 4000,
852                         .n_aochan = 0,
853                         .aobits = 0,
854                         .ao_fifo_depth = 0,
855                         .num_p0_dio_channels = 8,
856                         .reg_type = ni_reg_622x,
857                         .ao_unipolar = 0,
858                         .caldac = {caldac_none},
859                         .has_8255 = 0,
860                 },
861         {
862                         .device_id = 0x70af,
863                         .name = "pci-6221",
864                         .n_adchan = 16,
865                         .adbits = 16,
866                         .ai_fifo_depth = 4095,
867                         .gainlkup = ai_gain_622x,
868                         .ai_speed = 4000,
869                         .n_aochan = 2,
870                         .aobits = 16,
871                         .ao_fifo_depth = 8191,
872                         .ao_range_table = &range_ni_M_622x_ao,
873                         .reg_type = ni_reg_622x,
874                         .ao_unipolar = 0,
875                         .ao_speed = 1200,
876                         .num_p0_dio_channels = 8,
877                         .caldac = {caldac_none},
878                         .has_8255 = 0,
879                 },
880         {
881                         .device_id = 0x71bc,
882                         .name = "pci-6221_37pin",
883                         .n_adchan = 16,
884                         .adbits = 16,
885                         .ai_fifo_depth = 4095,
886                         .gainlkup = ai_gain_622x,
887                         .ai_speed = 4000,
888                         .n_aochan = 2,
889                         .aobits = 16,
890                         .ao_fifo_depth = 8191,
891                         .ao_range_table = &range_ni_M_622x_ao,
892                         .reg_type = ni_reg_622x,
893                         .ao_unipolar = 0,
894                         .ao_speed = 1200,
895                         .num_p0_dio_channels = 8,
896                         .caldac = {caldac_none},
897                         .has_8255 = 0,
898                 },
899         {
900                         .device_id = 0x70f2,
901                         .name = "pci-6224",
902                         .n_adchan = 32,
903                         .adbits = 16,
904                         .ai_fifo_depth = 4095,
905                         .gainlkup = ai_gain_622x,
906                         .ai_speed = 4000,
907                         .n_aochan = 0,
908                         .aobits = 0,
909                         .ao_fifo_depth = 0,
910                         .reg_type = ni_reg_622x,
911                         .ao_unipolar = 0,
912                         .num_p0_dio_channels = 32,
913                         .caldac = {caldac_none},
914                         .has_8255 = 0,
915                 },
916         {
917                         .device_id = 0x70f3,
918                         .name = "pxi-6224",
919                         .n_adchan = 32,
920                         .adbits = 16,
921                         .ai_fifo_depth = 4095,
922                         .gainlkup = ai_gain_622x,
923                         .ai_speed = 4000,
924                         .n_aochan = 0,
925                         .aobits = 0,
926                         .ao_fifo_depth = 0,
927                         .reg_type = ni_reg_622x,
928                         .ao_unipolar = 0,
929                         .num_p0_dio_channels = 32,
930                         .caldac = {caldac_none},
931                         .has_8255 = 0,
932                 },
933         {
934                         .device_id = 0x716c,
935                         .name = "pci-6225",
936                         .n_adchan = 80,
937                         .adbits = 16,
938                         .ai_fifo_depth = 4095,
939                         .gainlkup = ai_gain_622x,
940                         .ai_speed = 4000,
941                         .n_aochan = 2,
942                         .aobits = 16,
943                         .ao_fifo_depth = 8191,
944                         .ao_range_table = &range_ni_M_622x_ao,
945                         .reg_type = ni_reg_622x,
946                         .ao_unipolar = 0,
947                         .ao_speed = 1200,
948                         .num_p0_dio_channels = 32,
949                         .caldac = {caldac_none},
950                         .has_8255 = 0,
951                 },
952         {
953                         .device_id = 0x70aa,
954                         .name = "pci-6229",
955                         .n_adchan = 32,
956                         .adbits = 16,
957                         .ai_fifo_depth = 4095,
958                         .gainlkup = ai_gain_622x,
959                         .ai_speed = 4000,
960                         .n_aochan = 4,
961                         .aobits = 16,
962                         .ao_fifo_depth = 8191,
963                         .ao_range_table = &range_ni_M_622x_ao,
964                         .reg_type = ni_reg_622x,
965                         .ao_unipolar = 0,
966                         .ao_speed = 1200,
967                         .num_p0_dio_channels = 32,
968                         .caldac = {caldac_none},
969                         .has_8255 = 0,
970                 },
971         {
972                         .device_id = 0x70b4,
973                         .name = "pci-6250",
974                         .n_adchan = 16,
975                         .adbits = 16,
976                         .ai_fifo_depth = 4095,
977                         .gainlkup = ai_gain_628x,
978                         .ai_speed = 800,
979                         .n_aochan = 0,
980                         .aobits = 0,
981                         .ao_fifo_depth = 0,
982                         .reg_type = ni_reg_625x,
983                         .ao_unipolar = 0,
984                         .num_p0_dio_channels = 8,
985                         .caldac = {caldac_none},
986                         .has_8255 = 0,
987                 },
988         {
989                         .device_id = 0x70b8,
990                         .name = "pci-6251",
991                         .n_adchan = 16,
992                         .adbits = 16,
993                         .ai_fifo_depth = 4095,
994                         .gainlkup = ai_gain_628x,
995                         .ai_speed = 800,
996                         .n_aochan = 2,
997                         .aobits = 16,
998                         .ao_fifo_depth = 8191,
999                         .ao_range_table = &range_ni_M_625x_ao,
1000                         .reg_type = ni_reg_625x,
1001                         .ao_unipolar = 0,
1002                         .ao_speed = 357,
1003                         .num_p0_dio_channels = 8,
1004                         .caldac = {caldac_none},
1005                         .has_8255 = 0,
1006                 },
1007         {
1008                         .device_id = 0x717d,
1009                         .name = "pcie-6251",
1010                         .n_adchan = 16,
1011                         .adbits = 16,
1012                         .ai_fifo_depth = 4095,
1013                         .gainlkup = ai_gain_628x,
1014                         .ai_speed = 800,
1015                         .n_aochan = 2,
1016                         .aobits = 16,
1017                         .ao_fifo_depth = 8191,
1018                         .ao_range_table = &range_ni_M_625x_ao,
1019                         .reg_type = ni_reg_625x,
1020                         .ao_unipolar = 0,
1021                         .ao_speed = 357,
1022                         .num_p0_dio_channels = 8,
1023                         .caldac = {caldac_none},
1024                         .has_8255 = 0,
1025                 },
1026         {
1027                         .device_id = 0x70b7,
1028                         .name = "pci-6254",
1029                         .n_adchan = 32,
1030                         .adbits = 16,
1031                         .ai_fifo_depth = 4095,
1032                         .gainlkup = ai_gain_628x,
1033                         .ai_speed = 800,
1034                         .n_aochan = 0,
1035                         .aobits = 0,
1036                         .ao_fifo_depth = 0,
1037                         .reg_type = ni_reg_625x,
1038                         .ao_unipolar = 0,
1039                         .num_p0_dio_channels = 32,
1040                         .caldac = {caldac_none},
1041                         .has_8255 = 0,
1042                 },
1043         {
1044                         .device_id = 0x70ab,
1045                         .name = "pci-6259",
1046                         .n_adchan = 32,
1047                         .adbits = 16,
1048                         .ai_fifo_depth = 4095,
1049                         .gainlkup = ai_gain_628x,
1050                         .ai_speed = 800,
1051                         .n_aochan = 4,
1052                         .aobits = 16,
1053                         .ao_fifo_depth = 8191,
1054                         .ao_range_table = &range_ni_M_625x_ao,
1055                         .reg_type = ni_reg_625x,
1056                         .ao_unipolar = 0,
1057                         .ao_speed = 357,
1058                         .num_p0_dio_channels = 32,
1059                         .caldac = {caldac_none},
1060                         .has_8255 = 0,
1061                 },
1062         {
1063                         .device_id = 0x717f,
1064                         .name = "pcie-6259",
1065                         .n_adchan = 32,
1066                         .adbits = 16,
1067                         .ai_fifo_depth = 4095,
1068                         .gainlkup = ai_gain_628x,
1069                         .ai_speed = 800,
1070                         .n_aochan = 4,
1071                         .aobits = 16,
1072                         .ao_fifo_depth = 8191,
1073                         .ao_range_table = &range_ni_M_625x_ao,
1074                         .reg_type = ni_reg_625x,
1075                         .ao_unipolar = 0,
1076                         .ao_speed = 357,
1077                         .num_p0_dio_channels = 32,
1078                         .caldac = {caldac_none},
1079                         .has_8255 = 0,
1080                 },
1081         {
1082                         .device_id = 0x70b6,
1083                         .name = "pci-6280",
1084                         .n_adchan = 16,
1085                         .adbits = 18,
1086                         .ai_fifo_depth = 2047,
1087                         .gainlkup = ai_gain_628x,
1088                         .ai_speed = 1600,
1089                         .n_aochan = 0,
1090                         .aobits = 0,
1091                         .ao_fifo_depth = 8191,
1092                         .reg_type = ni_reg_628x,
1093                         .ao_unipolar = 0,
1094                         .num_p0_dio_channels = 8,
1095                         .caldac = {caldac_none},
1096                         .has_8255 = 0,
1097                 },
1098         {
1099                         .device_id = 0x70bd,
1100                         .name = "pci-6281",
1101                         .n_adchan = 16,
1102                         .adbits = 18,
1103                         .ai_fifo_depth = 2047,
1104                         .gainlkup = ai_gain_628x,
1105                         .ai_speed = 1600,
1106                         .n_aochan = 2,
1107                         .aobits = 16,
1108                         .ao_fifo_depth = 8191,
1109                         .ao_range_table = &range_ni_M_628x_ao,
1110                         .reg_type = ni_reg_628x,
1111                         .ao_unipolar = 1,
1112                         .ao_speed = 357,
1113                         .num_p0_dio_channels = 8,
1114                         .caldac = {caldac_none},
1115                         .has_8255 = 0,
1116                 },
1117         {
1118                         .device_id = 0x70bf,
1119                         .name = "pxi-6281",
1120                         .n_adchan = 16,
1121                         .adbits = 18,
1122                         .ai_fifo_depth = 2047,
1123                         .gainlkup = ai_gain_628x,
1124                         .ai_speed = 1600,
1125                         .n_aochan = 2,
1126                         .aobits = 16,
1127                         .ao_fifo_depth = 8191,
1128                         .ao_range_table = &range_ni_M_628x_ao,
1129                         .reg_type = ni_reg_628x,
1130                         .ao_unipolar = 1,
1131                         .ao_speed = 357,
1132                         .num_p0_dio_channels = 8,
1133                         .caldac = {caldac_none},
1134                         .has_8255 = 0,
1135                 },
1136         {
1137                         .device_id = 0x70bc,
1138                         .name = "pci-6284",
1139                         .n_adchan = 32,
1140                         .adbits = 18,
1141                         .ai_fifo_depth = 2047,
1142                         .gainlkup = ai_gain_628x,
1143                         .ai_speed = 1600,
1144                         .n_aochan = 0,
1145                         .aobits = 0,
1146                         .ao_fifo_depth = 0,
1147                         .reg_type = ni_reg_628x,
1148                         .ao_unipolar = 0,
1149                         .num_p0_dio_channels = 32,
1150                         .caldac = {caldac_none},
1151                         .has_8255 = 0,
1152                 },
1153         {
1154                         .device_id = 0x70ac,
1155                         .name = "pci-6289",
1156                         .n_adchan = 32,
1157                         .adbits = 18,
1158                         .ai_fifo_depth = 2047,
1159                         .gainlkup = ai_gain_628x,
1160                         .ai_speed = 1600,
1161                         .n_aochan = 4,
1162                         .aobits = 16,
1163                         .ao_fifo_depth = 8191,
1164                         .ao_range_table = &range_ni_M_628x_ao,
1165                         .reg_type = ni_reg_628x,
1166                         .ao_unipolar = 1,
1167                         .ao_speed = 357,
1168                         .num_p0_dio_channels = 32,
1169                         .caldac = {caldac_none},
1170                         .has_8255 = 0,
1171                 },
1172         {
1173                         .device_id = 0x70C0,
1174                         .name = "pci-6143",
1175                         .n_adchan = 8,
1176                         .adbits = 16,
1177                         .ai_fifo_depth = 1024,
1178                         .alwaysdither = 0,
1179                         .gainlkup = ai_gain_6143,
1180                         .ai_speed = 4000,
1181                         .n_aochan = 0,
1182                         .aobits = 0,
1183                         .reg_type = ni_reg_6143,
1184                         .ao_unipolar = 0,
1185                         .ao_fifo_depth = 0,
1186                         .num_p0_dio_channels = 8,
1187                         .caldac = {ad8804_debug, ad8804_debug},
1188                 },
1189         {
1190                         .device_id = 0x710D,
1191                         .name = "pxi-6143",
1192                         .n_adchan = 8,
1193                         .adbits = 16,
1194                         .ai_fifo_depth = 1024,
1195                         .alwaysdither = 0,
1196                         .gainlkup = ai_gain_6143,
1197                         .ai_speed = 4000,
1198                         .n_aochan = 0,
1199                         .aobits = 0,
1200                         .reg_type = ni_reg_6143,
1201                         .ao_unipolar = 0,
1202                         .ao_fifo_depth = 0,
1203                         .num_p0_dio_channels = 8,
1204                         .caldac = {ad8804_debug, ad8804_debug},
1205                 },
1206 };
1207
1208 #define n_pcimio_boards ((sizeof(ni_boards)/sizeof(ni_boards[0])))
1209
1210 static int pcimio_attach(struct comedi_device * dev, struct comedi_devconfig * it);
1211 static int pcimio_detach(struct comedi_device * dev);
1212 static struct comedi_driver driver_pcimio = {
1213         driver_name: DRV_NAME,
1214         module:THIS_MODULE,
1215         attach:pcimio_attach,
1216         detach:pcimio_detach,
1217 };
1218
1219 COMEDI_PCI_INITCLEANUP(driver_pcimio, ni_pci_table)
1220
1221 struct ni_private {
1222 NI_PRIVATE_COMMON
1223 };
1224
1225 #define devpriv ((struct ni_private *)dev->private)
1226
1227 /* How we access registers */
1228
1229 #define ni_writel(a,b)  (writel((a), devpriv->mite->daq_io_addr + (b)))
1230 #define ni_readl(a)     (readl(devpriv->mite->daq_io_addr + (a)))
1231 #define ni_writew(a,b)  (writew((a), devpriv->mite->daq_io_addr + (b)))
1232 #define ni_readw(a)     (readw(devpriv->mite->daq_io_addr + (a)))
1233 #define ni_writeb(a,b)  (writeb((a), devpriv->mite->daq_io_addr + (b)))
1234 #define ni_readb(a)     (readb(devpriv->mite->daq_io_addr + (a)))
1235
1236 /* How we access STC registers */
1237
1238 /* We automatically take advantage of STC registers that can be
1239  * read/written directly in the I/O space of the board.  Most
1240  * PCIMIO devices map the low 8 STC registers to iobase+addr*2.
1241  * The 611x devices map the write registers to iobase+addr*2, and
1242  * the read registers to iobase+(addr-1)*2. */
1243 /* However, the 611x boards still aren't working, so I'm disabling
1244  * non-windowed STC access temporarily */
1245
1246 static void e_series_win_out(struct comedi_device * dev, uint16_t data, int reg)
1247 {
1248         unsigned long flags;
1249
1250         comedi_spin_lock_irqsave(&devpriv->window_lock, flags);
1251         ni_writew(reg, Window_Address);
1252         ni_writew(data, Window_Data);
1253         comedi_spin_unlock_irqrestore(&devpriv->window_lock, flags);
1254 }
1255
1256 static uint16_t e_series_win_in(struct comedi_device * dev, int reg)
1257 {
1258         unsigned long flags;
1259         uint16_t ret;
1260
1261         comedi_spin_lock_irqsave(&devpriv->window_lock, flags);
1262         ni_writew(reg, Window_Address);
1263         ret = ni_readw(Window_Data);
1264         comedi_spin_unlock_irqrestore(&devpriv->window_lock, flags);
1265
1266         return ret;
1267 }
1268
1269 static void m_series_stc_writew(struct comedi_device * dev, uint16_t data, int reg)
1270 {
1271         unsigned offset;
1272         switch (reg) {
1273         case ADC_FIFO_Clear:
1274                 offset = M_Offset_AI_FIFO_Clear;
1275                 break;
1276         case AI_Command_1_Register:
1277                 offset = M_Offset_AI_Command_1;
1278                 break;
1279         case AI_Command_2_Register:
1280                 offset = M_Offset_AI_Command_2;
1281                 break;
1282         case AI_Mode_1_Register:
1283                 offset = M_Offset_AI_Mode_1;
1284                 break;
1285         case AI_Mode_2_Register:
1286                 offset = M_Offset_AI_Mode_2;
1287                 break;
1288         case AI_Mode_3_Register:
1289                 offset = M_Offset_AI_Mode_3;
1290                 break;
1291         case AI_Output_Control_Register:
1292                 offset = M_Offset_AI_Output_Control;
1293                 break;
1294         case AI_Personal_Register:
1295                 offset = M_Offset_AI_Personal;
1296                 break;
1297         case AI_SI2_Load_A_Register:
1298                 /*  this is actually a 32 bit register on m series boards */
1299                 ni_writel(data, M_Offset_AI_SI2_Load_A);
1300                 return;
1301                 break;
1302         case AI_SI2_Load_B_Register:
1303                 /*  this is actually a 32 bit register on m series boards */
1304                 ni_writel(data, M_Offset_AI_SI2_Load_B);
1305                 return;
1306                 break;
1307         case AI_START_STOP_Select_Register:
1308                 offset = M_Offset_AI_START_STOP_Select;
1309                 break;
1310         case AI_Trigger_Select_Register:
1311                 offset = M_Offset_AI_Trigger_Select;
1312                 break;
1313         case Analog_Trigger_Etc_Register:
1314                 offset = M_Offset_Analog_Trigger_Etc;
1315                 break;
1316         case AO_Command_1_Register:
1317                 offset = M_Offset_AO_Command_1;
1318                 break;
1319         case AO_Command_2_Register:
1320                 offset = M_Offset_AO_Command_2;
1321                 break;
1322         case AO_Mode_1_Register:
1323                 offset = M_Offset_AO_Mode_1;
1324                 break;
1325         case AO_Mode_2_Register:
1326                 offset = M_Offset_AO_Mode_2;
1327                 break;
1328         case AO_Mode_3_Register:
1329                 offset = M_Offset_AO_Mode_3;
1330                 break;
1331         case AO_Output_Control_Register:
1332                 offset = M_Offset_AO_Output_Control;
1333                 break;
1334         case AO_Personal_Register:
1335                 offset = M_Offset_AO_Personal;
1336                 break;
1337         case AO_Start_Select_Register:
1338                 offset = M_Offset_AO_Start_Select;
1339                 break;
1340         case AO_Trigger_Select_Register:
1341                 offset = M_Offset_AO_Trigger_Select;
1342                 break;
1343         case Clock_and_FOUT_Register:
1344                 offset = M_Offset_Clock_and_FOUT;
1345                 break;
1346         case Configuration_Memory_Clear:
1347                 offset = M_Offset_Configuration_Memory_Clear;
1348                 break;
1349         case DAC_FIFO_Clear:
1350                 offset = M_Offset_AO_FIFO_Clear;
1351                 break;
1352         case DIO_Control_Register:
1353                 rt_printk
1354                         ("%s: FIXME: register 0x%x does not map cleanly on to m-series boards.\n",
1355                         __FUNCTION__, reg);
1356                 return;
1357                 break;
1358         case G_Autoincrement_Register(0):
1359                 offset = M_Offset_G0_Autoincrement;
1360                 break;
1361         case G_Autoincrement_Register(1):
1362                 offset = M_Offset_G1_Autoincrement;
1363                 break;
1364         case G_Command_Register(0):
1365                 offset = M_Offset_G0_Command;
1366                 break;
1367         case G_Command_Register(1):
1368                 offset = M_Offset_G1_Command;
1369                 break;
1370         case G_Input_Select_Register(0):
1371                 offset = M_Offset_G0_Input_Select;
1372                 break;
1373         case G_Input_Select_Register(1):
1374                 offset = M_Offset_G1_Input_Select;
1375                 break;
1376         case G_Mode_Register(0):
1377                 offset = M_Offset_G0_Mode;
1378                 break;
1379         case G_Mode_Register(1):
1380                 offset = M_Offset_G1_Mode;
1381                 break;
1382         case Interrupt_A_Ack_Register:
1383                 offset = M_Offset_Interrupt_A_Ack;
1384                 break;
1385         case Interrupt_A_Enable_Register:
1386                 offset = M_Offset_Interrupt_A_Enable;
1387                 break;
1388         case Interrupt_B_Ack_Register:
1389                 offset = M_Offset_Interrupt_B_Ack;
1390                 break;
1391         case Interrupt_B_Enable_Register:
1392                 offset = M_Offset_Interrupt_B_Enable;
1393                 break;
1394         case Interrupt_Control_Register:
1395                 offset = M_Offset_Interrupt_Control;
1396                 break;
1397         case IO_Bidirection_Pin_Register:
1398                 offset = M_Offset_IO_Bidirection_Pin;
1399                 break;
1400         case Joint_Reset_Register:
1401                 offset = M_Offset_Joint_Reset;
1402                 break;
1403         case RTSI_Trig_A_Output_Register:
1404                 offset = M_Offset_RTSI_Trig_A_Output;
1405                 break;
1406         case RTSI_Trig_B_Output_Register:
1407                 offset = M_Offset_RTSI_Trig_B_Output;
1408                 break;
1409         case RTSI_Trig_Direction_Register:
1410                 offset = M_Offset_RTSI_Trig_Direction;
1411                 break;
1412                 /* FIXME: DIO_Output_Register (16 bit reg) is replaced by M_Offset_Static_Digital_Output (32 bit)
1413                    and M_Offset_SCXI_Serial_Data_Out (8 bit) */
1414         default:
1415                 rt_printk("%s: bug! unhandled register=0x%x in switch.\n",
1416                         __FUNCTION__, reg);
1417                 BUG();
1418                 return;
1419                 break;
1420         }
1421         ni_writew(data, offset);
1422 }
1423
1424 static uint16_t m_series_stc_readw(struct comedi_device * dev, int reg)
1425 {
1426         unsigned offset;
1427         switch (reg) {
1428         case AI_Status_1_Register:
1429                 offset = M_Offset_AI_Status_1;
1430                 break;
1431         case AO_Status_1_Register:
1432                 offset = M_Offset_AO_Status_1;
1433                 break;
1434         case AO_Status_2_Register:
1435                 offset = M_Offset_AO_Status_2;
1436                 break;
1437         case DIO_Serial_Input_Register:
1438                 return ni_readb(M_Offset_SCXI_Serial_Data_In);
1439                 break;
1440         case Joint_Status_1_Register:
1441                 offset = M_Offset_Joint_Status_1;
1442                 break;
1443         case Joint_Status_2_Register:
1444                 offset = M_Offset_Joint_Status_2;
1445                 break;
1446         case G_Status_Register:
1447                 offset = M_Offset_G01_Status;
1448                 break;
1449         default:
1450                 rt_printk("%s: bug! unhandled register=0x%x in switch.\n",
1451                         __FUNCTION__, reg);
1452                 BUG();
1453                 return 0;
1454                 break;
1455         }
1456         return ni_readw(offset);
1457 }
1458
1459 static void m_series_stc_writel(struct comedi_device * dev, uint32_t data, int reg)
1460 {
1461         unsigned offset;
1462         switch (reg) {
1463         case AI_SC_Load_A_Registers:
1464                 offset = M_Offset_AI_SC_Load_A;
1465                 break;
1466         case AI_SI_Load_A_Registers:
1467                 offset = M_Offset_AI_SI_Load_A;
1468                 break;
1469         case AO_BC_Load_A_Register:
1470                 offset = M_Offset_AO_BC_Load_A;
1471                 break;
1472         case AO_UC_Load_A_Register:
1473                 offset = M_Offset_AO_UC_Load_A;
1474                 break;
1475         case AO_UI_Load_A_Register:
1476                 offset = M_Offset_AO_UI_Load_A;
1477                 break;
1478         case G_Load_A_Register(0):
1479                 offset = M_Offset_G0_Load_A;
1480                 break;
1481         case G_Load_A_Register(1):
1482                 offset = M_Offset_G1_Load_A;
1483                 break;
1484         case G_Load_B_Register(0):
1485                 offset = M_Offset_G0_Load_B;
1486                 break;
1487         case G_Load_B_Register(1):
1488                 offset = M_Offset_G1_Load_B;
1489                 break;
1490         default:
1491                 rt_printk("%s: bug! unhandled register=0x%x in switch.\n",
1492                         __FUNCTION__, reg);
1493                 BUG();
1494                 return;
1495                 break;
1496         }
1497         ni_writel(data, offset);
1498 }
1499
1500 static uint32_t m_series_stc_readl(struct comedi_device * dev, int reg)
1501 {
1502         unsigned offset;
1503         switch (reg) {
1504         case G_HW_Save_Register(0):
1505                 offset = M_Offset_G0_HW_Save;
1506                 break;
1507         case G_HW_Save_Register(1):
1508                 offset = M_Offset_G1_HW_Save;
1509                 break;
1510         case G_Save_Register(0):
1511                 offset = M_Offset_G0_Save;
1512                 break;
1513         case G_Save_Register(1):
1514                 offset = M_Offset_G1_Save;
1515                 break;
1516         default:
1517                 rt_printk("%s: bug! unhandled register=0x%x in switch.\n",
1518                         __FUNCTION__, reg);
1519                 BUG();
1520                 return 0;
1521                 break;
1522         }
1523         return ni_readl(offset);
1524 }
1525
1526 #define interrupt_pin(a)        0
1527 #define IRQ_POLARITY 1
1528
1529 #define NI_E_IRQ_FLAGS          IRQF_SHARED
1530
1531 #include "ni_mio_common.c"
1532
1533 static int pcimio_find_device(struct comedi_device * dev, int bus, int slot);
1534 static int pcimio_ai_change(struct comedi_device * dev, struct comedi_subdevice * s,
1535         unsigned long new_size);
1536 static int pcimio_ao_change(struct comedi_device * dev, struct comedi_subdevice * s,
1537         unsigned long new_size);
1538 static int pcimio_gpct0_change(struct comedi_device * dev, struct comedi_subdevice * s,
1539         unsigned long new_size);
1540 static int pcimio_gpct1_change(struct comedi_device * dev, struct comedi_subdevice * s,
1541         unsigned long new_size);
1542 static int pcimio_dio_change(struct comedi_device * dev, struct comedi_subdevice * s,
1543         unsigned long new_size);
1544
1545 static void m_series_init_eeprom_buffer(struct comedi_device * dev)
1546 {
1547         static const int Start_Cal_EEPROM = 0x400;
1548         static const unsigned window_size = 10;
1549         static const int serial_number_eeprom_offset = 0x4;
1550         static const int serial_number_eeprom_length = 0x4;
1551         unsigned old_iodwbsr_bits;
1552         unsigned old_iodwbsr1_bits;
1553         unsigned old_iodwcr1_bits;
1554         int i;
1555
1556         old_iodwbsr_bits = readl(devpriv->mite->mite_io_addr + MITE_IODWBSR);
1557         old_iodwbsr1_bits = readl(devpriv->mite->mite_io_addr + MITE_IODWBSR_1);
1558         old_iodwcr1_bits = readl(devpriv->mite->mite_io_addr + MITE_IODWCR_1);
1559         writel(0x0, devpriv->mite->mite_io_addr + MITE_IODWBSR);
1560         writel(((0x80 | window_size) | devpriv->mite->daq_phys_addr),
1561                 devpriv->mite->mite_io_addr + MITE_IODWBSR_1);
1562         writel(0x1 | old_iodwcr1_bits, devpriv->mite->mite_io_addr + MITE_IODWCR_1);
1563         writel(0xf, devpriv->mite->mite_io_addr + 0x30);
1564
1565         BUG_ON(serial_number_eeprom_length > sizeof(devpriv->serial_number));
1566         for (i = 0; i < serial_number_eeprom_length; ++i) {
1567                 char *byte_ptr = (char*)&devpriv->serial_number + i;
1568                 *byte_ptr = ni_readb(serial_number_eeprom_offset + i);
1569         }
1570         devpriv->serial_number = be32_to_cpu(devpriv->serial_number);
1571
1572         for (i = 0; i < M_SERIES_EEPROM_SIZE; ++i) {
1573                 devpriv->eeprom_buffer[i] = ni_readb(Start_Cal_EEPROM + i);
1574         }
1575
1576         writel(old_iodwbsr1_bits, devpriv->mite->mite_io_addr + MITE_IODWBSR_1);
1577         writel(old_iodwbsr_bits, devpriv->mite->mite_io_addr + MITE_IODWBSR);
1578         writel(old_iodwcr1_bits, devpriv->mite->mite_io_addr + MITE_IODWCR_1);
1579         writel(0x0, devpriv->mite->mite_io_addr + 0x30);
1580 }
1581
1582 static void init_6143(struct comedi_device * dev)
1583 {
1584         /*  Disable interrupts */
1585         devpriv->stc_writew(dev, 0, Interrupt_Control_Register);
1586
1587         /*  Initialise 6143 AI specific bits */
1588         ni_writeb(0x00, Magic_6143);    /*  Set G0,G1 DMA mode to E series version */
1589         ni_writeb(0x80, PipelineDelay_6143);    /*  Set EOCMode, ADCMode and pipelinedelay */
1590         ni_writeb(0x00, EOC_Set_6143);  /*  Set EOC Delay */
1591
1592         ni_writel(boardtype.ai_fifo_depth / 2, AIFIFO_Flag_6143);       /*  Set the FIFO half full level */
1593
1594         /*  Strobe Relay disable bit */
1595         devpriv->ai_calib_source_enabled = 0;
1596         ni_writew(devpriv->ai_calib_source | Calibration_Channel_6143_RelayOff,
1597                 Calibration_Channel_6143);
1598         ni_writew(devpriv->ai_calib_source, Calibration_Channel_6143);
1599 }
1600
1601 /* cleans up allocated resources */
1602 static int pcimio_detach(struct comedi_device * dev)
1603 {
1604         mio_common_detach(dev);
1605         if (dev->irq) {
1606                 comedi_free_irq(dev->irq, dev);
1607         }
1608         if (dev->private) {
1609                 mite_free_ring(devpriv->ai_mite_ring);
1610                 mite_free_ring(devpriv->ao_mite_ring);
1611                 mite_free_ring(devpriv->cdo_mite_ring);
1612                 mite_free_ring(devpriv->gpct_mite_ring[0]);
1613                 mite_free_ring(devpriv->gpct_mite_ring[1]);
1614                 if (devpriv->mite)
1615                         mite_unsetup(devpriv->mite);
1616         }
1617
1618         return 0;
1619 }
1620
1621 static int pcimio_attach(struct comedi_device * dev, struct comedi_devconfig * it)
1622 {
1623         int ret;
1624
1625         printk("comedi%d: ni_pcimio:", dev->minor);
1626
1627         ret = ni_alloc_private(dev);
1628         if (ret < 0)
1629                 return ret;
1630
1631         ret = pcimio_find_device(dev, it->options[0], it->options[1]);
1632         if (ret < 0)
1633                 return ret;
1634
1635         printk(" %s", boardtype.name);
1636         dev->board_name = boardtype.name;
1637
1638         if (boardtype.reg_type & ni_reg_m_series_mask) {
1639                 devpriv->stc_writew = &m_series_stc_writew;
1640                 devpriv->stc_readw = &m_series_stc_readw;
1641                 devpriv->stc_writel = &m_series_stc_writel;
1642                 devpriv->stc_readl = &m_series_stc_readl;
1643         } else {
1644                 devpriv->stc_writew = &e_series_win_out;
1645                 devpriv->stc_readw = &e_series_win_in;
1646                 devpriv->stc_writel = &win_out2;
1647                 devpriv->stc_readl = &win_in2;
1648         }
1649
1650         ret = mite_setup(devpriv->mite);
1651         if (ret < 0) {
1652                 printk(" error setting up mite\n");
1653                 return ret;
1654         }
1655         comedi_set_hw_dev(dev, &devpriv->mite->pcidev->dev);
1656         devpriv->ai_mite_ring = mite_alloc_ring(devpriv->mite);
1657         if (devpriv->ai_mite_ring == NULL)
1658                 return -ENOMEM;
1659         devpriv->ao_mite_ring = mite_alloc_ring(devpriv->mite);
1660         if (devpriv->ao_mite_ring == NULL)
1661                 return -ENOMEM;
1662         devpriv->cdo_mite_ring = mite_alloc_ring(devpriv->mite);
1663         if (devpriv->cdo_mite_ring == NULL)
1664                 return -ENOMEM;
1665         devpriv->gpct_mite_ring[0] = mite_alloc_ring(devpriv->mite);
1666         if (devpriv->gpct_mite_ring[0] == NULL)
1667                 return -ENOMEM;
1668         devpriv->gpct_mite_ring[1] = mite_alloc_ring(devpriv->mite);
1669         if (devpriv->gpct_mite_ring[1] == NULL)
1670                 return -ENOMEM;
1671
1672         if (boardtype.reg_type & ni_reg_m_series_mask)
1673                 m_series_init_eeprom_buffer(dev);
1674         if (boardtype.reg_type == ni_reg_6143)
1675                 init_6143(dev);
1676
1677         dev->irq = mite_irq(devpriv->mite);
1678
1679         if (dev->irq == 0) {
1680                 printk(" unknown irq (bad)\n");
1681         } else {
1682                 printk(" ( irq = %u )", dev->irq);
1683                 if ((ret = comedi_request_irq(dev->irq, ni_E_interrupt,
1684                                         NI_E_IRQ_FLAGS, DRV_NAME,
1685                                         dev)) < 0) {
1686                         printk(" irq not available\n");
1687                         dev->irq = 0;
1688                 }
1689         }
1690
1691         ret = ni_E_init(dev, it);
1692         if (ret < 0)
1693                 return ret;
1694
1695         dev->subdevices[NI_AI_SUBDEV].buf_change = &pcimio_ai_change;
1696         dev->subdevices[NI_AO_SUBDEV].buf_change = &pcimio_ao_change;
1697         dev->subdevices[NI_GPCT_SUBDEV(0)].buf_change = &pcimio_gpct0_change;
1698         dev->subdevices[NI_GPCT_SUBDEV(1)].buf_change = &pcimio_gpct1_change;
1699         dev->subdevices[NI_DIO_SUBDEV].buf_change = &pcimio_dio_change;
1700
1701         return ret;
1702 }
1703
1704 static int pcimio_find_device(struct comedi_device * dev, int bus, int slot)
1705 {
1706         struct mite_struct *mite;
1707         int i;
1708
1709         for (mite = mite_devices; mite; mite = mite->next) {
1710                 if (mite->used)
1711                         continue;
1712                 if (bus || slot) {
1713                         if (bus != mite->pcidev->bus->number ||
1714                                 slot != PCI_SLOT(mite->pcidev->devfn))
1715                                 continue;
1716                 }
1717
1718                 for (i = 0; i < n_pcimio_boards; i++) {
1719                         if (mite_device_id(mite) == ni_boards[i].device_id) {
1720                                 dev->board_ptr = ni_boards + i;
1721                                 devpriv->mite = mite;
1722
1723                                 return 0;
1724                         }
1725                 }
1726         }
1727         printk("no device found\n");
1728         mite_list_devices();
1729         return -EIO;
1730 }
1731
1732 static int pcimio_ai_change(struct comedi_device * dev, struct comedi_subdevice * s,
1733         unsigned long new_size)
1734 {
1735         int ret;
1736
1737         ret = mite_buf_change(devpriv->ai_mite_ring, s->async);
1738         if (ret < 0)
1739                 return ret;
1740
1741         return 0;
1742 }
1743
1744 static int pcimio_ao_change(struct comedi_device * dev, struct comedi_subdevice * s,
1745         unsigned long new_size)
1746 {
1747         int ret;
1748
1749         ret = mite_buf_change(devpriv->ao_mite_ring, s->async);
1750         if (ret < 0)
1751                 return ret;
1752
1753         return 0;
1754 }
1755
1756 static int pcimio_gpct0_change(struct comedi_device * dev, struct comedi_subdevice * s,
1757         unsigned long new_size)
1758 {
1759         int ret;
1760
1761         ret = mite_buf_change(devpriv->gpct_mite_ring[0], s->async);
1762         if (ret < 0)
1763                 return ret;
1764
1765         return 0;
1766 }
1767
1768 static int pcimio_gpct1_change(struct comedi_device * dev, struct comedi_subdevice * s,
1769         unsigned long new_size)
1770 {
1771         int ret;
1772
1773         ret = mite_buf_change(devpriv->gpct_mite_ring[1], s->async);
1774         if (ret < 0)
1775                 return ret;
1776
1777         return 0;
1778 }
1779
1780 static int pcimio_dio_change(struct comedi_device * dev, struct comedi_subdevice * s,
1781         unsigned long new_size)
1782 {
1783         int ret;
1784
1785         ret = mite_buf_change(devpriv->cdo_mite_ring, s->async);
1786         if (ret < 0)
1787                 return ret;
1788
1789         return 0;
1790 }