summaryrefslogtreecommitdiff
path: root/drivers/staging/comedi/drivers/ni_pcimio.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/comedi/drivers/ni_pcimio.c')
-rw-r--r--drivers/staging/comedi/drivers/ni_pcimio.c1477
1 files changed, 0 insertions, 1477 deletions
diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c
deleted file mode 100644
index 6c813a490ba5..000000000000
--- a/drivers/staging/comedi/drivers/ni_pcimio.c
+++ /dev/null
@@ -1,1477 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Comedi driver for NI PCI-MIO E series cards
- *
- * COMEDI - Linux Control and Measurement Device Interface
- * Copyright (C) 1997-8 David A. Schleef <ds@schleef.org>
- */
-
-/*
- * Driver: ni_pcimio
- * Description: National Instruments PCI-MIO-E series and M series (all boards)
- * Author: ds, John Hallen, Frank Mori Hess, Rolf Mueller, Herbert Peremans,
- * Herman Bruyninckx, Terry Barnaby
- * Status: works
- * Devices: [National Instruments] PCI-MIO-16XE-50 (ni_pcimio),
- * PCI-MIO-16XE-10, PXI-6030E, PCI-MIO-16E-1, PCI-MIO-16E-4, PCI-6014,
- * PCI-6040E, PXI-6040E, PCI-6030E, PCI-6031E, PCI-6032E, PCI-6033E,
- * PCI-6071E, PCI-6023E, PCI-6024E, PCI-6025E, PXI-6025E, PCI-6034E,
- * PCI-6035E, PCI-6052E, PCI-6110, PCI-6111, PCI-6220, PXI-6220,
- * PCI-6221, PXI-6221, PCI-6224, PXI-6224, PCI-6225, PXI-6225,
- * PCI-6229, PXI-6229, PCI-6250, PXI-6250, PCI-6251, PXI-6251,
- * PCIe-6251, PXIe-6251, PCI-6254, PXI-6254, PCI-6259, PXI-6259,
- * PCIe-6259, PXIe-6259, PCI-6280, PXI-6280, PCI-6281, PXI-6281,
- * PCI-6284, PXI-6284, PCI-6289, PXI-6289, PCI-6711, PXI-6711,
- * PCI-6713, PXI-6713, PXI-6071E, PCI-6070E, PXI-6070E,
- * PXI-6052E, PCI-6036E, PCI-6731, PCI-6733, PXI-6733,
- * PCI-6143, PXI-6143
- * Updated: Mon, 16 Jan 2017 12:56:04 +0000
- *
- * These boards are almost identical to the AT-MIO E series, except that
- * they use the PCI bus instead of ISA (i.e., AT). See the notes for the
- * ni_atmio.o driver for additional information about these boards.
- *
- * Autocalibration is supported on many of the devices, using the
- * comedi_calibrate (or comedi_soft_calibrate for m-series) utility.
- * M-Series boards do analog input and analog output calibration entirely
- * in software. The software calibration corrects the analog input for
- * offset, gain and nonlinearity. The analog outputs are corrected for
- * offset and gain. See the comedilib documentation on
- * comedi_get_softcal_converter() for more information.
- *
- * By default, the driver uses DMA to transfer analog input data to
- * memory. When DMA is enabled, not all triggering features are
- * supported.
- *
- * Digital I/O may not work on 673x.
- *
- * Note that the PCI-6143 is a simultaineous sampling device with 8
- * convertors. With this board all of the convertors perform one
- * simultaineous sample during a scan interval. The period for a scan
- * is used for the convert time in a Comedi cmd. The convert trigger
- * source is normally set to TRIG_NOW by default.
- *
- * The RTSI trigger bus is supported on these cards on subdevice 10.
- * See the comedilib documentation for details.
- *
- * Information (number of channels, bits, etc.) for some devices may be
- * incorrect. Please check this and submit a bug if there are problems
- * for your device.
- *
- * SCXI is probably broken for m-series boards.
- *
- * Bugs:
- * - When DMA is enabled, COMEDI_EV_CONVERT does not work correctly.
- */
-
-/*
- * The PCI-MIO E series driver was originally written by
- * Tomasz Motylewski <...>, and ported to comedi by ds.
- *
- * References:
- * 341079b.pdf PCI E Series Register-Level Programmer Manual
- * 340934b.pdf DAQ-STC reference manual
- *
- * 322080b.pdf 6711/6713/6715 User Manual
- *
- * 320945c.pdf PCI E Series User Manual
- * 322138a.pdf PCI-6052E and DAQPad-6052E User Manual
- *
- * ISSUES:
- * - need to deal with external reference for DAC, and other DAC
- * properties in board properties
- * - deal with at-mio-16de-10 revision D to N changes, etc.
- * - need to add other CALDAC type
- * - need to slow down DAC loading. I don't trust NI's claim that
- * two writes to the PCI bus slows IO enough. I would prefer to
- * use udelay().
- * Timing specs: (clock)
- * AD8522 30ns
- * DAC8043 120ns
- * DAC8800 60ns
- * MB88341 ?
- */
-
-#include <linux/module.h>
-#include <linux/delay.h>
-
-#include "../comedi_pci.h"
-
-#include <asm/byteorder.h>
-
-#include "ni_stc.h"
-#include "mite.h"
-
-#define PCIDMA
-
-/*
- * These are not all the possible ao ranges for 628x boards.
- * They can do OFFSET +- REFERENCE where OFFSET can be
- * 0V, 5V, APFI<0,1>, or AO<0...3> and RANGE can
- * be 10V, 5V, 2V, 1V, APFI<0,1>, AO<0...3>. That's
- * 63 different possibilities. An AO channel
- * can not act as it's own OFFSET or REFERENCE.
- */
-static const struct comedi_lrange range_ni_M_628x_ao = {
- 8, {
- BIP_RANGE(10),
- BIP_RANGE(5),
- BIP_RANGE(2),
- BIP_RANGE(1),
- RANGE(-5, 15),
- UNI_RANGE(10),
- RANGE(3, 7),
- RANGE(4, 6),
- RANGE_ext(-1, 1)
- }
-};
-
-static const struct comedi_lrange range_ni_M_625x_ao = {
- 3, {
- BIP_RANGE(10),
- BIP_RANGE(5),
- RANGE_ext(-1, 1)
- }
-};
-
-enum ni_pcimio_boardid {
- BOARD_PCIMIO_16XE_50,
- BOARD_PCIMIO_16XE_10,
- BOARD_PCI6014,
- BOARD_PXI6030E,
- BOARD_PCIMIO_16E_1,
- BOARD_PCIMIO_16E_4,
- BOARD_PXI6040E,
- BOARD_PCI6031E,
- BOARD_PCI6032E,
- BOARD_PCI6033E,
- BOARD_PCI6071E,
- BOARD_PCI6023E,
- BOARD_PCI6024E,
- BOARD_PCI6025E,
- BOARD_PXI6025E,
- BOARD_PCI6034E,
- BOARD_PCI6035E,
- BOARD_PCI6052E,
- BOARD_PCI6110,
- BOARD_PCI6111,
- /* BOARD_PCI6115, */
- /* BOARD_PXI6115, */
- BOARD_PCI6711,
- BOARD_PXI6711,
- BOARD_PCI6713,
- BOARD_PXI6713,
- BOARD_PCI6731,
- /* BOARD_PXI6731, */
- BOARD_PCI6733,
- BOARD_PXI6733,
- BOARD_PXI6071E,
- BOARD_PXI6070E,
- BOARD_PXI6052E,
- BOARD_PXI6031E,
- BOARD_PCI6036E,
- BOARD_PCI6220,
- BOARD_PXI6220,
- BOARD_PCI6221,
- BOARD_PCI6221_37PIN,
- BOARD_PXI6221,
- BOARD_PCI6224,
- BOARD_PXI6224,
- BOARD_PCI6225,
- BOARD_PXI6225,
- BOARD_PCI6229,
- BOARD_PXI6229,
- BOARD_PCI6250,
- BOARD_PXI6250,
- BOARD_PCI6251,
- BOARD_PXI6251,
- BOARD_PCIE6251,
- BOARD_PXIE6251,
- BOARD_PCI6254,
- BOARD_PXI6254,
- BOARD_PCI6259,
- BOARD_PXI6259,
- BOARD_PCIE6259,
- BOARD_PXIE6259,
- BOARD_PCI6280,
- BOARD_PXI6280,
- BOARD_PCI6281,
- BOARD_PXI6281,
- BOARD_PCI6284,
- BOARD_PXI6284,
- BOARD_PCI6289,
- BOARD_PXI6289,
- BOARD_PCI6143,
- BOARD_PXI6143,
-};
-
-static const struct ni_board_struct ni_boards[] = {
- [BOARD_PCIMIO_16XE_50] = {
- .name = "pci-mio-16xe-50",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 2048,
- .alwaysdither = 1,
- .gainlkup = ai_gain_8,
- .ai_speed = 50000,
- .n_aochan = 2,
- .ao_maxdata = 0x0fff,
- .ao_range_table = &range_bipolar10,
- .ao_speed = 50000,
- .caldac = { dac8800, dac8043 },
- },
- [BOARD_PCIMIO_16XE_10] = {
- .name = "pci-mio-16xe-10", /* aka pci-6030E */
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_14,
- .ai_speed = 10000,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 2048,
- .ao_range_table = &range_ni_E_ao_ext,
- .ao_speed = 10000,
- .caldac = { dac8800, dac8043, ad8522 },
- },
- [BOARD_PCI6014] = {
- .name = "pci-6014",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_4,
- .ai_speed = 5000,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_range_table = &range_bipolar10,
- .ao_speed = 100000,
- .caldac = { ad8804_debug },
- },
- [BOARD_PXI6030E] = {
- .name = "pxi-6030e",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_14,
- .ai_speed = 10000,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 2048,
- .ao_range_table = &range_ni_E_ao_ext,
- .ao_speed = 10000,
- .caldac = { dac8800, dac8043, ad8522 },
- },
- [BOARD_PCIMIO_16E_1] = {
- .name = "pci-mio-16e-1", /* aka pci-6070e */
- .n_adchan = 16,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 512,
- .gainlkup = ai_gain_16,
- .ai_speed = 800,
- .n_aochan = 2,
- .ao_maxdata = 0x0fff,
- .ao_fifo_depth = 2048,
- .ao_range_table = &range_ni_E_ao_ext,
- .ao_speed = 1000,
- .caldac = { mb88341 },
- },
- [BOARD_PCIMIO_16E_4] = {
- .name = "pci-mio-16e-4", /* aka pci-6040e */
- .n_adchan = 16,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 512,
- .gainlkup = ai_gain_16,
- /*
- * there have been reported problems with
- * full speed on this board
- */
- .ai_speed = 2000,
- .n_aochan = 2,
- .ao_maxdata = 0x0fff,
- .ao_fifo_depth = 512,
- .ao_range_table = &range_ni_E_ao_ext,
- .ao_speed = 1000,
- .caldac = { ad8804_debug }, /* doc says mb88341 */
- },
- [BOARD_PXI6040E] = {
- .name = "pxi-6040e",
- .n_adchan = 16,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 512,
- .gainlkup = ai_gain_16,
- .ai_speed = 2000,
- .n_aochan = 2,
- .ao_maxdata = 0x0fff,
- .ao_fifo_depth = 512,
- .ao_range_table = &range_ni_E_ao_ext,
- .ao_speed = 1000,
- .caldac = { mb88341 },
- },
- [BOARD_PCI6031E] = {
- .name = "pci-6031e",
- .n_adchan = 64,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_14,
- .ai_speed = 10000,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 2048,
- .ao_range_table = &range_ni_E_ao_ext,
- .ao_speed = 10000,
- .caldac = { dac8800, dac8043, ad8522 },
- },
- [BOARD_PCI6032E] = {
- .name = "pci-6032e",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_14,
- .ai_speed = 10000,
- .caldac = { dac8800, dac8043, ad8522 },
- },
- [BOARD_PCI6033E] = {
- .name = "pci-6033e",
- .n_adchan = 64,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_14,
- .ai_speed = 10000,
- .caldac = { dac8800, dac8043, ad8522 },
- },
- [BOARD_PCI6071E] = {
- .name = "pci-6071e",
- .n_adchan = 64,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_16,
- .ai_speed = 800,
- .n_aochan = 2,
- .ao_maxdata = 0x0fff,
- .ao_fifo_depth = 2048,
- .ao_range_table = &range_ni_E_ao_ext,
- .ao_speed = 1000,
- .caldac = { ad8804_debug },
- },
- [BOARD_PCI6023E] = {
- .name = "pci-6023e",
- .n_adchan = 16,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 512,
- .gainlkup = ai_gain_4,
- .ai_speed = 5000,
- .caldac = { ad8804_debug }, /* manual is wrong */
- },
- [BOARD_PCI6024E] = {
- .name = "pci-6024e",
- .n_adchan = 16,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 512,
- .gainlkup = ai_gain_4,
- .ai_speed = 5000,
- .n_aochan = 2,
- .ao_maxdata = 0x0fff,
- .ao_range_table = &range_bipolar10,
- .ao_speed = 100000,
- .caldac = { ad8804_debug }, /* manual is wrong */
- },
- [BOARD_PCI6025E] = {
- .name = "pci-6025e",
- .n_adchan = 16,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 512,
- .gainlkup = ai_gain_4,
- .ai_speed = 5000,
- .n_aochan = 2,
- .ao_maxdata = 0x0fff,
- .ao_range_table = &range_bipolar10,
- .ao_speed = 100000,
- .caldac = { ad8804_debug }, /* manual is wrong */
- .has_8255 = 1,
- },
- [BOARD_PXI6025E] = {
- .name = "pxi-6025e",
- .n_adchan = 16,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 512,
- .gainlkup = ai_gain_4,
- .ai_speed = 5000,
- .n_aochan = 2,
- .ao_maxdata = 0x0fff,
- .ao_range_table = &range_ni_E_ao_ext,
- .ao_speed = 100000,
- .caldac = { ad8804_debug }, /* manual is wrong */
- .has_8255 = 1,
- },
- [BOARD_PCI6034E] = {
- .name = "pci-6034e",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_4,
- .ai_speed = 5000,
- .caldac = { ad8804_debug },
- },
- [BOARD_PCI6035E] = {
- .name = "pci-6035e",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_4,
- .ai_speed = 5000,
- .n_aochan = 2,
- .ao_maxdata = 0x0fff,
- .ao_range_table = &range_bipolar10,
- .ao_speed = 100000,
- .caldac = { ad8804_debug },
- },
- [BOARD_PCI6052E] = {
- .name = "pci-6052e",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_16,
- .ai_speed = 3000,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 2048,
- .ao_range_table = &range_ni_E_ao_ext,
- .ao_speed = 3000,
- /* manual is wrong */
- .caldac = { ad8804_debug, ad8804_debug, ad8522 },
- },
- [BOARD_PCI6110] = {
- .name = "pci-6110",
- .n_adchan = 4,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 8192,
- .alwaysdither = 0,
- .gainlkup = ai_gain_611x,
- .ai_speed = 200,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .reg_type = ni_reg_611x,
- .ao_range_table = &range_bipolar10,
- .ao_fifo_depth = 2048,
- .ao_speed = 250,
- .caldac = { ad8804, ad8804 },
- },
- [BOARD_PCI6111] = {
- .name = "pci-6111",
- .n_adchan = 2,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 8192,
- .gainlkup = ai_gain_611x,
- .ai_speed = 200,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .reg_type = ni_reg_611x,
- .ao_range_table = &range_bipolar10,
- .ao_fifo_depth = 2048,
- .ao_speed = 250,
- .caldac = { ad8804, ad8804 },
- },
-#if 0
- /* The 6115 boards probably need their own driver */
- [BOARD_PCI6115] = { /* .device_id = 0x2ed0, */
- .name = "pci-6115",
- .n_adchan = 4,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 8192,
- .gainlkup = ai_gain_611x,
- .ai_speed = 100,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_671x = 1,
- .ao_fifo_depth = 2048,
- .ao_speed = 250,
- .reg_611x = 1,
- /* XXX */
- .caldac = { ad8804_debug, ad8804_debug, ad8804_debug },
- },
-#endif
-#if 0
- [BOARD_PXI6115] = { /* .device_id = ????, */
- .name = "pxi-6115",
- .n_adchan = 4,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 8192,
- .gainlkup = ai_gain_611x,
- .ai_speed = 100,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_671x = 1,
- .ao_fifo_depth = 2048,
- .ao_speed = 250,
- .reg_611x = 1,
- /* XXX */
- .caldac = { ad8804_debug, ad8804_debug, ad8804_debug },
- },
-#endif
- [BOARD_PCI6711] = {
- .name = "pci-6711",
- .n_aochan = 4,
- .ao_maxdata = 0x0fff,
- /* data sheet says 8192, but fifo really holds 16384 samples */
- .ao_fifo_depth = 16384,
- .ao_range_table = &range_bipolar10,
- .ao_speed = 1000,
- .reg_type = ni_reg_6711,
- .caldac = { ad8804_debug },
- },
- [BOARD_PXI6711] = {
- .name = "pxi-6711",
- .n_aochan = 4,
- .ao_maxdata = 0x0fff,
- .ao_fifo_depth = 16384,
- .ao_range_table = &range_bipolar10,
- .ao_speed = 1000,
- .reg_type = ni_reg_6711,
- .caldac = { ad8804_debug },
- },
- [BOARD_PCI6713] = {
- .name = "pci-6713",
- .n_aochan = 8,
- .ao_maxdata = 0x0fff,
- .ao_fifo_depth = 16384,
- .ao_range_table = &range_bipolar10,
- .ao_speed = 1000,
- .reg_type = ni_reg_6713,
- .caldac = { ad8804_debug, ad8804_debug },
- },
- [BOARD_PXI6713] = {
- .name = "pxi-6713",
- .n_aochan = 8,
- .ao_maxdata = 0x0fff,
- .ao_fifo_depth = 16384,
- .ao_range_table = &range_bipolar10,
- .ao_speed = 1000,
- .reg_type = ni_reg_6713,
- .caldac = { ad8804_debug, ad8804_debug },
- },
- [BOARD_PCI6731] = {
- .name = "pci-6731",
- .n_aochan = 4,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8192,
- .ao_range_table = &range_bipolar10,
- .ao_speed = 1000,
- .reg_type = ni_reg_6711,
- .caldac = { ad8804_debug },
- },
-#if 0
- [BOARD_PXI6731] = { /* .device_id = ????, */
- .name = "pxi-6731",
- .n_aochan = 4,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8192,
- .ao_range_table = &range_bipolar10,
- .reg_type = ni_reg_6711,
- .caldac = { ad8804_debug },
- },
-#endif
- [BOARD_PCI6733] = {
- .name = "pci-6733",
- .n_aochan = 8,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 16384,
- .ao_range_table = &range_bipolar10,
- .ao_speed = 1000,
- .reg_type = ni_reg_6713,
- .caldac = { ad8804_debug, ad8804_debug },
- },
- [BOARD_PXI6733] = {
- .name = "pxi-6733",
- .n_aochan = 8,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 16384,
- .ao_range_table = &range_bipolar10,
- .ao_speed = 1000,
- .reg_type = ni_reg_6713,
- .caldac = { ad8804_debug, ad8804_debug },
- },
- [BOARD_PXI6071E] = {
- .name = "pxi-6071e",
- .n_adchan = 64,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_16,
- .ai_speed = 800,
- .n_aochan = 2,
- .ao_maxdata = 0x0fff,
- .ao_fifo_depth = 2048,
- .ao_range_table = &range_ni_E_ao_ext,
- .ao_speed = 1000,
- .caldac = { ad8804_debug },
- },
- [BOARD_PXI6070E] = {
- .name = "pxi-6070e",
- .n_adchan = 16,
- .ai_maxdata = 0x0fff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_16,
- .ai_speed = 800,
- .n_aochan = 2,
- .ao_maxdata = 0x0fff,
- .ao_fifo_depth = 2048,
- .ao_range_table = &range_ni_E_ao_ext,
- .ao_speed = 1000,
- .caldac = { ad8804_debug },
- },
- [BOARD_PXI6052E] = {
- .name = "pxi-6052e",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_16,
- .ai_speed = 3000,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 2048,
- .ao_range_table = &range_ni_E_ao_ext,
- .ao_speed = 3000,
- .caldac = { mb88341, mb88341, ad8522 },
- },
- [BOARD_PXI6031E] = {
- .name = "pxi-6031e",
- .n_adchan = 64,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_14,
- .ai_speed = 10000,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 2048,
- .ao_range_table = &range_ni_E_ao_ext,
- .ao_speed = 10000,
- .caldac = { dac8800, dac8043, ad8522 },
- },
- [BOARD_PCI6036E] = {
- .name = "pci-6036e",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512,
- .alwaysdither = 1,
- .gainlkup = ai_gain_4,
- .ai_speed = 5000,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_range_table = &range_bipolar10,
- .ao_speed = 100000,
- .caldac = { ad8804_debug },
- },
- [BOARD_PCI6220] = {
- .name = "pci-6220",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512, /* FIXME: guess */
- .gainlkup = ai_gain_622x,
- .ai_speed = 4000,
- .reg_type = ni_reg_622x,
- .caldac = { caldac_none },
- },
- [BOARD_PXI6220] = {
- .name = "pxi-6220",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 512, /* FIXME: guess */
- .gainlkup = ai_gain_622x,
- .ai_speed = 4000,
- .reg_type = ni_reg_622x,
- .caldac = { caldac_none },
- .dio_speed = 1000,
- },
- [BOARD_PCI6221] = {
- .name = "pci-6221",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_622x,
- .ai_speed = 4000,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_bipolar10,
- .reg_type = ni_reg_622x,
- .ao_speed = 1200,
- .caldac = { caldac_none },
- .dio_speed = 1000,
- },
- [BOARD_PCI6221_37PIN] = {
- .name = "pci-6221_37pin",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_622x,
- .ai_speed = 4000,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_bipolar10,
- .reg_type = ni_reg_622x,
- .ao_speed = 1200,
- .caldac = { caldac_none },
- },
- [BOARD_PXI6221] = {
- .name = "pxi-6221",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_622x,
- .ai_speed = 4000,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_bipolar10,
- .reg_type = ni_reg_622x,
- .ao_speed = 1200,
- .caldac = { caldac_none },
- .dio_speed = 1000,
- },
- [BOARD_PCI6224] = {
- .name = "pci-6224",
- .n_adchan = 32,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_622x,
- .ai_speed = 4000,
- .reg_type = ni_reg_622x,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- .dio_speed = 1000,
- },
- [BOARD_PXI6224] = {
- .name = "pxi-6224",
- .n_adchan = 32,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_622x,
- .ai_speed = 4000,
- .reg_type = ni_reg_622x,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- .dio_speed = 1000,
- },
- [BOARD_PCI6225] = {
- .name = "pci-6225",
- .n_adchan = 80,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_622x,
- .ai_speed = 4000,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_bipolar10,
- .reg_type = ni_reg_622x,
- .ao_speed = 1200,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- .dio_speed = 1000,
- },
- [BOARD_PXI6225] = {
- .name = "pxi-6225",
- .n_adchan = 80,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_622x,
- .ai_speed = 4000,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_bipolar10,
- .reg_type = ni_reg_622x,
- .ao_speed = 1200,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- .dio_speed = 1000,
- },
- [BOARD_PCI6229] = {
- .name = "pci-6229",
- .n_adchan = 32,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_622x,
- .ai_speed = 4000,
- .n_aochan = 4,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_bipolar10,
- .reg_type = ni_reg_622x,
- .ao_speed = 1200,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- },
- [BOARD_PXI6229] = {
- .name = "pxi-6229",
- .n_adchan = 32,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_622x,
- .ai_speed = 4000,
- .n_aochan = 4,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_bipolar10,
- .reg_type = ni_reg_622x,
- .ao_speed = 1200,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- .dio_speed = 1000,
- },
- [BOARD_PCI6250] = {
- .name = "pci-6250",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_628x,
- .ai_speed = 800,
- .reg_type = ni_reg_625x,
- .caldac = { caldac_none },
- },
- [BOARD_PXI6250] = {
- .name = "pxi-6250",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_628x,
- .ai_speed = 800,
- .reg_type = ni_reg_625x,
- .caldac = { caldac_none },
- .dio_speed = 100,
- },
- [BOARD_PCI6251] = {
- .name = "pci-6251",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_628x,
- .ai_speed = 800,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_ni_M_625x_ao,
- .reg_type = ni_reg_625x,
- .ao_speed = 350,
- .caldac = { caldac_none },
- .dio_speed = 100,
- },
- [BOARD_PXI6251] = {
- .name = "pxi-6251",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_628x,
- .ai_speed = 800,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_ni_M_625x_ao,
- .reg_type = ni_reg_625x,
- .ao_speed = 350,
- .caldac = { caldac_none },
- .dio_speed = 100,
- },
- [BOARD_PCIE6251] = {
- .name = "pcie-6251",
- .alt_route_name = "pci-6251",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_628x,
- .ai_speed = 800,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_ni_M_625x_ao,
- .reg_type = ni_reg_625x,
- .ao_speed = 350,
- .caldac = { caldac_none },
- .dio_speed = 100,
- },
- [BOARD_PXIE6251] = {
- .name = "pxie-6251",
- .n_adchan = 16,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_628x,
- .ai_speed = 800,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_ni_M_625x_ao,
- .reg_type = ni_reg_625x,
- .ao_speed = 350,
- .caldac = { caldac_none },
- .dio_speed = 100,
- },
- [BOARD_PCI6254] = {
- .name = "pci-6254",
- .n_adchan = 32,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_628x,
- .ai_speed = 800,
- .reg_type = ni_reg_625x,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- },
- [BOARD_PXI6254] = {
- .name = "pxi-6254",
- .n_adchan = 32,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_628x,
- .ai_speed = 800,
- .reg_type = ni_reg_625x,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- .dio_speed = 100,
- },
- [BOARD_PCI6259] = {
- .name = "pci-6259",
- .n_adchan = 32,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_628x,
- .ai_speed = 800,
- .n_aochan = 4,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_ni_M_625x_ao,
- .reg_type = ni_reg_625x,
- .ao_speed = 350,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- },
- [BOARD_PXI6259] = {
- .name = "pxi-6259",
- .n_adchan = 32,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_628x,
- .ai_speed = 800,
- .n_aochan = 4,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_ni_M_625x_ao,
- .reg_type = ni_reg_625x,
- .ao_speed = 350,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- .dio_speed = 100,
- },
- [BOARD_PCIE6259] = {
- .name = "pcie-6259",
- .alt_route_name = "pci-6259",
- .n_adchan = 32,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_628x,
- .ai_speed = 800,
- .n_aochan = 4,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_ni_M_625x_ao,
- .reg_type = ni_reg_625x,
- .ao_speed = 350,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- },
- [BOARD_PXIE6259] = {
- .name = "pxie-6259",
- .n_adchan = 32,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 4095,
- .gainlkup = ai_gain_628x,
- .ai_speed = 800,
- .n_aochan = 4,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_ni_M_625x_ao,
- .reg_type = ni_reg_625x,
- .ao_speed = 350,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- .dio_speed = 100,
- },
- [BOARD_PCI6280] = {
- .name = "pci-6280",
- .n_adchan = 16,
- .ai_maxdata = 0x3ffff,
- .ai_fifo_depth = 2047,
- .gainlkup = ai_gain_628x,
- .ai_speed = 1600,
- .ao_fifo_depth = 8191,
- .reg_type = ni_reg_628x,
- .caldac = { caldac_none },
- },
- [BOARD_PXI6280] = {
- .name = "pxi-6280",
- .n_adchan = 16,
- .ai_maxdata = 0x3ffff,
- .ai_fifo_depth = 2047,
- .gainlkup = ai_gain_628x,
- .ai_speed = 1600,
- .ao_fifo_depth = 8191,
- .reg_type = ni_reg_628x,
- .caldac = { caldac_none },
- .dio_speed = 100,
- },
- [BOARD_PCI6281] = {
- .name = "pci-6281",
- .n_adchan = 16,
- .ai_maxdata = 0x3ffff,
- .ai_fifo_depth = 2047,
- .gainlkup = ai_gain_628x,
- .ai_speed = 1600,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_ni_M_628x_ao,
- .reg_type = ni_reg_628x,
- .ao_speed = 350,
- .caldac = { caldac_none },
- .dio_speed = 100,
- },
- [BOARD_PXI6281] = {
- .name = "pxi-6281",
- .n_adchan = 16,
- .ai_maxdata = 0x3ffff,
- .ai_fifo_depth = 2047,
- .gainlkup = ai_gain_628x,
- .ai_speed = 1600,
- .n_aochan = 2,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_ni_M_628x_ao,
- .reg_type = ni_reg_628x,
- .ao_speed = 350,
- .caldac = { caldac_none },
- .dio_speed = 100,
- },
- [BOARD_PCI6284] = {
- .name = "pci-6284",
- .n_adchan = 32,
- .ai_maxdata = 0x3ffff,
- .ai_fifo_depth = 2047,
- .gainlkup = ai_gain_628x,
- .ai_speed = 1600,
- .reg_type = ni_reg_628x,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- },
- [BOARD_PXI6284] = {
- .name = "pxi-6284",
- .n_adchan = 32,
- .ai_maxdata = 0x3ffff,
- .ai_fifo_depth = 2047,
- .gainlkup = ai_gain_628x,
- .ai_speed = 1600,
- .reg_type = ni_reg_628x,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- .dio_speed = 100,
- },
- [BOARD_PCI6289] = {
- .name = "pci-6289",
- .n_adchan = 32,
- .ai_maxdata = 0x3ffff,
- .ai_fifo_depth = 2047,
- .gainlkup = ai_gain_628x,
- .ai_speed = 1600,
- .n_aochan = 4,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_ni_M_628x_ao,
- .reg_type = ni_reg_628x,
- .ao_speed = 350,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- },
- [BOARD_PXI6289] = {
- .name = "pxi-6289",
- .n_adchan = 32,
- .ai_maxdata = 0x3ffff,
- .ai_fifo_depth = 2047,
- .gainlkup = ai_gain_628x,
- .ai_speed = 1600,
- .n_aochan = 4,
- .ao_maxdata = 0xffff,
- .ao_fifo_depth = 8191,
- .ao_range_table = &range_ni_M_628x_ao,
- .reg_type = ni_reg_628x,
- .ao_speed = 350,
- .has_32dio_chan = 1,
- .caldac = { caldac_none },
- .dio_speed = 100,
- },
- [BOARD_PCI6143] = {
- .name = "pci-6143",
- .n_adchan = 8,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 1024,
- .gainlkup = ai_gain_6143,
- .ai_speed = 4000,
- .reg_type = ni_reg_6143,
- .caldac = { ad8804_debug, ad8804_debug },
- },
- [BOARD_PXI6143] = {
- .name = "pxi-6143",
- .n_adchan = 8,
- .ai_maxdata = 0xffff,
- .ai_fifo_depth = 1024,
- .gainlkup = ai_gain_6143,
- .ai_speed = 4000,
- .reg_type = ni_reg_6143,
- .caldac = { ad8804_debug, ad8804_debug },
- },
-};
-
-#include "ni_mio_common.c"
-
-static int pcimio_ai_change(struct comedi_device *dev,
- struct comedi_subdevice *s)
-{
- struct ni_private *devpriv = dev->private;
- int ret;
-
- ret = mite_buf_change(devpriv->ai_mite_ring, s);
- if (ret < 0)
- return ret;
-
- return 0;
-}
-
-static int pcimio_ao_change(struct comedi_device *dev,
- struct comedi_subdevice *s)
-{
- struct ni_private *devpriv = dev->private;
- int ret;
-
- ret = mite_buf_change(devpriv->ao_mite_ring, s);
- if (ret < 0)
- return ret;
-
- return 0;
-}
-
-static int pcimio_gpct0_change(struct comedi_device *dev,
- struct comedi_subdevice *s)
-{
- struct ni_private *devpriv = dev->private;
- int ret;
-
- ret = mite_buf_change(devpriv->gpct_mite_ring[0], s);
- if (ret < 0)
- return ret;
-
- return 0;
-}
-
-static int pcimio_gpct1_change(struct comedi_device *dev,
- struct comedi_subdevice *s)
-{
- struct ni_private *devpriv = dev->private;
- int ret;
-
- ret = mite_buf_change(devpriv->gpct_mite_ring[1], s);
- if (ret < 0)
- return ret;
-
- return 0;
-}
-
-static int pcimio_dio_change(struct comedi_device *dev,
- struct comedi_subdevice *s)
-{
- struct ni_private *devpriv = dev->private;
- int ret;
-
- ret = mite_buf_change(devpriv->cdo_mite_ring, s);
- if (ret < 0)
- return ret;
-
- return 0;
-}
-
-static void m_series_init_eeprom_buffer(struct comedi_device *dev)
-{
- struct ni_private *devpriv = dev->private;
- struct mite *mite = devpriv->mite;
- resource_size_t daq_phys_addr;
- static const int start_cal_eeprom = 0x400;
- static const unsigned int window_size = 10;
- unsigned int old_iodwbsr_bits;
- unsigned int old_iodwbsr1_bits;
- unsigned int old_iodwcr1_bits;
- int i;
-
- /* IO Window 1 needs to be temporarily mapped to read the eeprom */
- daq_phys_addr = pci_resource_start(mite->pcidev, 1);
-
- old_iodwbsr_bits = readl(mite->mmio + MITE_IODWBSR);
- old_iodwbsr1_bits = readl(mite->mmio + MITE_IODWBSR_1);
- old_iodwcr1_bits = readl(mite->mmio + MITE_IODWCR_1);
- writel(0x0, mite->mmio + MITE_IODWBSR);
- writel(((0x80 | window_size) | daq_phys_addr),
- mite->mmio + MITE_IODWBSR_1);
- writel(0x1 | old_iodwcr1_bits, mite->mmio + MITE_IODWCR_1);
- writel(0xf, mite->mmio + 0x30);
-
- for (i = 0; i < M_SERIES_EEPROM_SIZE; ++i)
- devpriv->eeprom_buffer[i] = ni_readb(dev, start_cal_eeprom + i);
-
- writel(old_iodwbsr1_bits, mite->mmio + MITE_IODWBSR_1);
- writel(old_iodwbsr_bits, mite->mmio + MITE_IODWBSR);
- writel(old_iodwcr1_bits, mite->mmio + MITE_IODWCR_1);
- writel(0x0, mite->mmio + 0x30);
-}
-
-static void init_6143(struct comedi_device *dev)
-{
- const struct ni_board_struct *board = dev->board_ptr;
- struct ni_private *devpriv = dev->private;
-
- /* Disable interrupts */
- ni_stc_writew(dev, 0, NISTC_INT_CTRL_REG);
-
- /* Initialise 6143 AI specific bits */
-
- /* Set G0,G1 DMA mode to E series version */
- ni_writeb(dev, 0x00, NI6143_MAGIC_REG);
- /* Set EOCMode, ADCMode and pipelinedelay */
- ni_writeb(dev, 0x80, NI6143_PIPELINE_DELAY_REG);
- /* Set EOC Delay */
- ni_writeb(dev, 0x00, NI6143_EOC_SET_REG);
-
- /* Set the FIFO half full level */
- ni_writel(dev, board->ai_fifo_depth / 2, NI6143_AI_FIFO_FLAG_REG);
-
- /* Strobe Relay disable bit */
- devpriv->ai_calib_source_enabled = 0;
- ni_writew(dev, devpriv->ai_calib_source | NI6143_CALIB_CHAN_RELAY_OFF,
- NI6143_CALIB_CHAN_REG);
- ni_writew(dev, devpriv->ai_calib_source, NI6143_CALIB_CHAN_REG);
-}
-
-static void pcimio_detach(struct comedi_device *dev)
-{
- struct ni_private *devpriv = dev->private;
-
- mio_common_detach(dev);
- if (dev->irq)
- free_irq(dev->irq, dev);
- if (devpriv) {
- mite_free_ring(devpriv->ai_mite_ring);
- mite_free_ring(devpriv->ao_mite_ring);
- mite_free_ring(devpriv->cdo_mite_ring);
- mite_free_ring(devpriv->gpct_mite_ring[0]);
- mite_free_ring(devpriv->gpct_mite_ring[1]);
- mite_detach(devpriv->mite);
- }
- if (dev->mmio)
- iounmap(dev->mmio);
- comedi_pci_disable(dev);
-}
-
-static int pcimio_auto_attach(struct comedi_device *dev,
- unsigned long context)
-{
- struct pci_dev *pcidev = comedi_to_pci_dev(dev);
- const struct ni_board_struct *board = NULL;
- struct ni_private *devpriv;
- unsigned int irq;
- int ret;
-
- if (context < ARRAY_SIZE(ni_boards))
- board = &ni_boards[context];
- if (!board)
- return -ENODEV;
- dev->board_ptr = board;
- dev->board_name = board->name;
-
- ret = comedi_pci_enable(dev);
- if (ret)
- return ret;
-
- ret = ni_alloc_private(dev);
- if (ret)
- return ret;
- devpriv = dev->private;
-
- devpriv->mite = mite_attach(dev, false); /* use win0 */
- if (!devpriv->mite)
- return -ENOMEM;
-
- if (board->reg_type & ni_reg_m_series_mask)
- devpriv->is_m_series = 1;
- if (board->reg_type & ni_reg_6xxx_mask)
- devpriv->is_6xxx = 1;
- if (board->reg_type == ni_reg_611x)
- devpriv->is_611x = 1;
- if (board->reg_type == ni_reg_6143)
- devpriv->is_6143 = 1;
- if (board->reg_type == ni_reg_622x)
- devpriv->is_622x = 1;
- if (board->reg_type == ni_reg_625x)
- devpriv->is_625x = 1;
- if (board->reg_type == ni_reg_628x)
- devpriv->is_628x = 1;
- if (board->reg_type & ni_reg_67xx_mask)
- devpriv->is_67xx = 1;
- if (board->reg_type == ni_reg_6711)
- devpriv->is_6711 = 1;
- if (board->reg_type == ni_reg_6713)
- devpriv->is_6713 = 1;
-
- devpriv->ai_mite_ring = mite_alloc_ring(devpriv->mite);
- if (!devpriv->ai_mite_ring)
- return -ENOMEM;
- devpriv->ao_mite_ring = mite_alloc_ring(devpriv->mite);
- if (!devpriv->ao_mite_ring)
- return -ENOMEM;
- devpriv->cdo_mite_ring = mite_alloc_ring(devpriv->mite);
- if (!devpriv->cdo_mite_ring)
- return -ENOMEM;
- devpriv->gpct_mite_ring[0] = mite_alloc_ring(devpriv->mite);
- if (!devpriv->gpct_mite_ring[0])
- return -ENOMEM;
- devpriv->gpct_mite_ring[1] = mite_alloc_ring(devpriv->mite);
- if (!devpriv->gpct_mite_ring[1])
- return -ENOMEM;
-
- if (devpriv->is_m_series)
- m_series_init_eeprom_buffer(dev);
- if (devpriv->is_6143)
- init_6143(dev);
-
- irq = pcidev->irq;
- if (irq) {
- ret = request_irq(irq, ni_E_interrupt, IRQF_SHARED,
- dev->board_name, dev);
- if (ret == 0)
- dev->irq = irq;
- }
-
- ret = ni_E_init(dev, 0, 1);
- if (ret < 0)
- return ret;
-
- dev->subdevices[NI_AI_SUBDEV].buf_change = &pcimio_ai_change;
- dev->subdevices[NI_AO_SUBDEV].buf_change = &pcimio_ao_change;
- dev->subdevices[NI_GPCT_SUBDEV(0)].buf_change = &pcimio_gpct0_change;
- dev->subdevices[NI_GPCT_SUBDEV(1)].buf_change = &pcimio_gpct1_change;
- dev->subdevices[NI_DIO_SUBDEV].buf_change = &pcimio_dio_change;
-
- return 0;
-}
-
-static struct comedi_driver ni_pcimio_driver = {
- .driver_name = "ni_pcimio",
- .module = THIS_MODULE,
- .auto_attach = pcimio_auto_attach,
- .detach = pcimio_detach,
-};
-
-static int ni_pcimio_pci_probe(struct pci_dev *dev,
- const struct pci_device_id *id)
-{
- return comedi_pci_auto_config(dev, &ni_pcimio_driver, id->driver_data);
-}
-
-static const struct pci_device_id ni_pcimio_pci_table[] = {
- { PCI_VDEVICE(NI, 0x0162), BOARD_PCIMIO_16XE_50 }, /* 0x1620? */
- { PCI_VDEVICE(NI, 0x1170), BOARD_PCIMIO_16XE_10 },
- { PCI_VDEVICE(NI, 0x1180), BOARD_PCIMIO_16E_1 },
- { PCI_VDEVICE(NI, 0x1190), BOARD_PCIMIO_16E_4 },
- { PCI_VDEVICE(NI, 0x11b0), BOARD_PXI6070E },
- { PCI_VDEVICE(NI, 0x11c0), BOARD_PXI6040E },
- { PCI_VDEVICE(NI, 0x11d0), BOARD_PXI6030E },
- { PCI_VDEVICE(NI, 0x1270), BOARD_PCI6032E },
- { PCI_VDEVICE(NI, 0x1330), BOARD_PCI6031E },
- { PCI_VDEVICE(NI, 0x1340), BOARD_PCI6033E },
- { PCI_VDEVICE(NI, 0x1350), BOARD_PCI6071E },
- { PCI_VDEVICE(NI, 0x14e0), BOARD_PCI6110 },
- { PCI_VDEVICE(NI, 0x14f0), BOARD_PCI6111 },
- { PCI_VDEVICE(NI, 0x1580), BOARD_PXI6031E },
- { PCI_VDEVICE(NI, 0x15b0), BOARD_PXI6071E },
- { PCI_VDEVICE(NI, 0x1880), BOARD_PCI6711 },
- { PCI_VDEVICE(NI, 0x1870), BOARD_PCI6713 },
- { PCI_VDEVICE(NI, 0x18b0), BOARD_PCI6052E },
- { PCI_VDEVICE(NI, 0x18c0), BOARD_PXI6052E },
- { PCI_VDEVICE(NI, 0x2410), BOARD_PCI6733 },
- { PCI_VDEVICE(NI, 0x2420), BOARD_PXI6733 },
- { PCI_VDEVICE(NI, 0x2430), BOARD_PCI6731 },
- { PCI_VDEVICE(NI, 0x2890), BOARD_PCI6036E },
- { PCI_VDEVICE(NI, 0x28c0), BOARD_PCI6014 },
- { PCI_VDEVICE(NI, 0x2a60), BOARD_PCI6023E },
- { PCI_VDEVICE(NI, 0x2a70), BOARD_PCI6024E },
- { PCI_VDEVICE(NI, 0x2a80), BOARD_PCI6025E },
- { PCI_VDEVICE(NI, 0x2ab0), BOARD_PXI6025E },
- { PCI_VDEVICE(NI, 0x2b80), BOARD_PXI6713 },
- { PCI_VDEVICE(NI, 0x2b90), BOARD_PXI6711 },
- { PCI_VDEVICE(NI, 0x2c80), BOARD_PCI6035E },
- { PCI_VDEVICE(NI, 0x2ca0), BOARD_PCI6034E },
- { PCI_VDEVICE(NI, 0x70aa), BOARD_PCI6229 },
- { PCI_VDEVICE(NI, 0x70ab), BOARD_PCI6259 },
- { PCI_VDEVICE(NI, 0x70ac), BOARD_PCI6289 },
- { PCI_VDEVICE(NI, 0x70ad), BOARD_PXI6251 },
- { PCI_VDEVICE(NI, 0x70ae), BOARD_PXI6220 },
- { PCI_VDEVICE(NI, 0x70af), BOARD_PCI6221 },
- { PCI_VDEVICE(NI, 0x70b0), BOARD_PCI6220 },
- { PCI_VDEVICE(NI, 0x70b1), BOARD_PXI6229 },
- { PCI_VDEVICE(NI, 0x70b2), BOARD_PXI6259 },
- { PCI_VDEVICE(NI, 0x70b3), BOARD_PXI6289 },
- { PCI_VDEVICE(NI, 0x70b4), BOARD_PCI6250 },
- { PCI_VDEVICE(NI, 0x70b5), BOARD_PXI6221 },
- { PCI_VDEVICE(NI, 0x70b6), BOARD_PCI6280 },
- { PCI_VDEVICE(NI, 0x70b7), BOARD_PCI6254 },
- { PCI_VDEVICE(NI, 0x70b8), BOARD_PCI6251 },
- { PCI_VDEVICE(NI, 0x70b9), BOARD_PXI6250 },
- { PCI_VDEVICE(NI, 0x70ba), BOARD_PXI6254 },
- { PCI_VDEVICE(NI, 0x70bb), BOARD_PXI6280 },
- { PCI_VDEVICE(NI, 0x70bc), BOARD_PCI6284 },
- { PCI_VDEVICE(NI, 0x70bd), BOARD_PCI6281 },
- { PCI_VDEVICE(NI, 0x70be), BOARD_PXI6284 },
- { PCI_VDEVICE(NI, 0x70bf), BOARD_PXI6281 },
- { PCI_VDEVICE(NI, 0x70c0), BOARD_PCI6143 },
- { PCI_VDEVICE(NI, 0x70f2), BOARD_PCI6224 },
- { PCI_VDEVICE(NI, 0x70f3), BOARD_PXI6224 },
- { PCI_VDEVICE(NI, 0x710d), BOARD_PXI6143 },
- { PCI_VDEVICE(NI, 0x716c), BOARD_PCI6225 },
- { PCI_VDEVICE(NI, 0x716d), BOARD_PXI6225 },
- { PCI_VDEVICE(NI, 0x717d), BOARD_PCIE6251 },
- { PCI_VDEVICE(NI, 0x717f), BOARD_PCIE6259 },
- { PCI_VDEVICE(NI, 0x71bc), BOARD_PCI6221_37PIN },
- { PCI_VDEVICE(NI, 0x72e8), BOARD_PXIE6251 },
- { PCI_VDEVICE(NI, 0x72e9), BOARD_PXIE6259 },
- { 0 }
-};
-MODULE_DEVICE_TABLE(pci, ni_pcimio_pci_table);
-
-static struct pci_driver ni_pcimio_pci_driver = {
- .name = "ni_pcimio",
- .id_table = ni_pcimio_pci_table,
- .probe = ni_pcimio_pci_probe,
- .remove = comedi_pci_auto_unconfig,
-};
-module_comedi_pci_driver(ni_pcimio_driver, ni_pcimio_pci_driver);
-
-MODULE_AUTHOR("Comedi https://www.comedi.org");
-MODULE_DESCRIPTION("Comedi low-level driver");
-MODULE_LICENSE("GPL");