162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0+ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Comedi driver for NI PCI-MIO E series cards 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * COMEDI - Linux Control and Measurement Device Interface 662306a36Sopenharmony_ci * Copyright (C) 1997-8 David A. Schleef <ds@schleef.org> 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci/* 1062306a36Sopenharmony_ci * Driver: ni_pcimio 1162306a36Sopenharmony_ci * Description: National Instruments PCI-MIO-E series and M series (all boards) 1262306a36Sopenharmony_ci * Author: ds, John Hallen, Frank Mori Hess, Rolf Mueller, Herbert Peremans, 1362306a36Sopenharmony_ci * Herman Bruyninckx, Terry Barnaby 1462306a36Sopenharmony_ci * Status: works 1562306a36Sopenharmony_ci * Devices: [National Instruments] PCI-MIO-16XE-50 (ni_pcimio), 1662306a36Sopenharmony_ci * PCI-MIO-16XE-10, PXI-6030E, PCI-MIO-16E-1, PCI-MIO-16E-4, PCI-6014, 1762306a36Sopenharmony_ci * PCI-6040E, PXI-6040E, PCI-6030E, PCI-6031E, PCI-6032E, PCI-6033E, 1862306a36Sopenharmony_ci * PCI-6071E, PCI-6023E, PCI-6024E, PCI-6025E, PXI-6025E, PCI-6034E, 1962306a36Sopenharmony_ci * PCI-6035E, PCI-6052E, PCI-6110, PCI-6111, PCI-6220, PXI-6220, 2062306a36Sopenharmony_ci * PCI-6221, PXI-6221, PCI-6224, PXI-6224, PCI-6225, PXI-6225, 2162306a36Sopenharmony_ci * PCI-6229, PXI-6229, PCI-6250, PXI-6250, PCI-6251, PXI-6251, 2262306a36Sopenharmony_ci * PCIe-6251, PXIe-6251, PCI-6254, PXI-6254, PCI-6259, PXI-6259, 2362306a36Sopenharmony_ci * PCIe-6259, PXIe-6259, PCI-6280, PXI-6280, PCI-6281, PXI-6281, 2462306a36Sopenharmony_ci * PCI-6284, PXI-6284, PCI-6289, PXI-6289, PCI-6711, PXI-6711, 2562306a36Sopenharmony_ci * PCI-6713, PXI-6713, PXI-6071E, PCI-6070E, PXI-6070E, 2662306a36Sopenharmony_ci * PXI-6052E, PCI-6036E, PCI-6731, PCI-6733, PXI-6733, 2762306a36Sopenharmony_ci * PCI-6143, PXI-6143 2862306a36Sopenharmony_ci * Updated: Mon, 16 Jan 2017 12:56:04 +0000 2962306a36Sopenharmony_ci * 3062306a36Sopenharmony_ci * These boards are almost identical to the AT-MIO E series, except that 3162306a36Sopenharmony_ci * they use the PCI bus instead of ISA (i.e., AT). See the notes for the 3262306a36Sopenharmony_ci * ni_atmio.o driver for additional information about these boards. 3362306a36Sopenharmony_ci * 3462306a36Sopenharmony_ci * Autocalibration is supported on many of the devices, using the 3562306a36Sopenharmony_ci * comedi_calibrate (or comedi_soft_calibrate for m-series) utility. 3662306a36Sopenharmony_ci * M-Series boards do analog input and analog output calibration entirely 3762306a36Sopenharmony_ci * in software. The software calibration corrects the analog input for 3862306a36Sopenharmony_ci * offset, gain and nonlinearity. The analog outputs are corrected for 3962306a36Sopenharmony_ci * offset and gain. See the comedilib documentation on 4062306a36Sopenharmony_ci * comedi_get_softcal_converter() for more information. 4162306a36Sopenharmony_ci * 4262306a36Sopenharmony_ci * By default, the driver uses DMA to transfer analog input data to 4362306a36Sopenharmony_ci * memory. When DMA is enabled, not all triggering features are 4462306a36Sopenharmony_ci * supported. 4562306a36Sopenharmony_ci * 4662306a36Sopenharmony_ci * Digital I/O may not work on 673x. 4762306a36Sopenharmony_ci * 4862306a36Sopenharmony_ci * Note that the PCI-6143 is a simultaineous sampling device with 8 4962306a36Sopenharmony_ci * convertors. With this board all of the convertors perform one 5062306a36Sopenharmony_ci * simultaineous sample during a scan interval. The period for a scan 5162306a36Sopenharmony_ci * is used for the convert time in a Comedi cmd. The convert trigger 5262306a36Sopenharmony_ci * source is normally set to TRIG_NOW by default. 5362306a36Sopenharmony_ci * 5462306a36Sopenharmony_ci * The RTSI trigger bus is supported on these cards on subdevice 10. 5562306a36Sopenharmony_ci * See the comedilib documentation for details. 5662306a36Sopenharmony_ci * 5762306a36Sopenharmony_ci * Information (number of channels, bits, etc.) for some devices may be 5862306a36Sopenharmony_ci * incorrect. Please check this and submit a bug if there are problems 5962306a36Sopenharmony_ci * for your device. 6062306a36Sopenharmony_ci * 6162306a36Sopenharmony_ci * SCXI is probably broken for m-series boards. 6262306a36Sopenharmony_ci * 6362306a36Sopenharmony_ci * Bugs: 6462306a36Sopenharmony_ci * - When DMA is enabled, COMEDI_EV_CONVERT does not work correctly. 6562306a36Sopenharmony_ci */ 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci/* 6862306a36Sopenharmony_ci * The PCI-MIO E series driver was originally written by 6962306a36Sopenharmony_ci * Tomasz Motylewski <...>, and ported to comedi by ds. 7062306a36Sopenharmony_ci * 7162306a36Sopenharmony_ci * References: 7262306a36Sopenharmony_ci * 341079b.pdf PCI E Series Register-Level Programmer Manual 7362306a36Sopenharmony_ci * 340934b.pdf DAQ-STC reference manual 7462306a36Sopenharmony_ci * 7562306a36Sopenharmony_ci * 322080b.pdf 6711/6713/6715 User Manual 7662306a36Sopenharmony_ci * 7762306a36Sopenharmony_ci * 320945c.pdf PCI E Series User Manual 7862306a36Sopenharmony_ci * 322138a.pdf PCI-6052E and DAQPad-6052E User Manual 7962306a36Sopenharmony_ci * 8062306a36Sopenharmony_ci * ISSUES: 8162306a36Sopenharmony_ci * - need to deal with external reference for DAC, and other DAC 8262306a36Sopenharmony_ci * properties in board properties 8362306a36Sopenharmony_ci * - deal with at-mio-16de-10 revision D to N changes, etc. 8462306a36Sopenharmony_ci * - need to add other CALDAC type 8562306a36Sopenharmony_ci * - need to slow down DAC loading. I don't trust NI's claim that 8662306a36Sopenharmony_ci * two writes to the PCI bus slows IO enough. I would prefer to 8762306a36Sopenharmony_ci * use udelay(). 8862306a36Sopenharmony_ci * Timing specs: (clock) 8962306a36Sopenharmony_ci * AD8522 30ns 9062306a36Sopenharmony_ci * DAC8043 120ns 9162306a36Sopenharmony_ci * DAC8800 60ns 9262306a36Sopenharmony_ci * MB88341 ? 9362306a36Sopenharmony_ci */ 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci#include <linux/module.h> 9662306a36Sopenharmony_ci#include <linux/delay.h> 9762306a36Sopenharmony_ci#include <linux/comedi/comedi_pci.h> 9862306a36Sopenharmony_ci#include <asm/byteorder.h> 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci#include "ni_stc.h" 10162306a36Sopenharmony_ci#include "mite.h" 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci#define PCIDMA 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci/* 10662306a36Sopenharmony_ci * These are not all the possible ao ranges for 628x boards. 10762306a36Sopenharmony_ci * They can do OFFSET +- REFERENCE where OFFSET can be 10862306a36Sopenharmony_ci * 0V, 5V, APFI<0,1>, or AO<0...3> and RANGE can 10962306a36Sopenharmony_ci * be 10V, 5V, 2V, 1V, APFI<0,1>, AO<0...3>. That's 11062306a36Sopenharmony_ci * 63 different possibilities. An AO channel 11162306a36Sopenharmony_ci * can not act as it's own OFFSET or REFERENCE. 11262306a36Sopenharmony_ci */ 11362306a36Sopenharmony_cistatic const struct comedi_lrange range_ni_M_628x_ao = { 11462306a36Sopenharmony_ci 8, { 11562306a36Sopenharmony_ci BIP_RANGE(10), 11662306a36Sopenharmony_ci BIP_RANGE(5), 11762306a36Sopenharmony_ci BIP_RANGE(2), 11862306a36Sopenharmony_ci BIP_RANGE(1), 11962306a36Sopenharmony_ci RANGE(-5, 15), 12062306a36Sopenharmony_ci UNI_RANGE(10), 12162306a36Sopenharmony_ci RANGE(3, 7), 12262306a36Sopenharmony_ci RANGE(4, 6), 12362306a36Sopenharmony_ci RANGE_ext(-1, 1) 12462306a36Sopenharmony_ci } 12562306a36Sopenharmony_ci}; 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_cistatic const struct comedi_lrange range_ni_M_625x_ao = { 12862306a36Sopenharmony_ci 3, { 12962306a36Sopenharmony_ci BIP_RANGE(10), 13062306a36Sopenharmony_ci BIP_RANGE(5), 13162306a36Sopenharmony_ci RANGE_ext(-1, 1) 13262306a36Sopenharmony_ci } 13362306a36Sopenharmony_ci}; 13462306a36Sopenharmony_ci 13562306a36Sopenharmony_cienum ni_pcimio_boardid { 13662306a36Sopenharmony_ci BOARD_PCIMIO_16XE_50, 13762306a36Sopenharmony_ci BOARD_PCIMIO_16XE_10, 13862306a36Sopenharmony_ci BOARD_PCI6014, 13962306a36Sopenharmony_ci BOARD_PXI6030E, 14062306a36Sopenharmony_ci BOARD_PCIMIO_16E_1, 14162306a36Sopenharmony_ci BOARD_PCIMIO_16E_4, 14262306a36Sopenharmony_ci BOARD_PXI6040E, 14362306a36Sopenharmony_ci BOARD_PCI6031E, 14462306a36Sopenharmony_ci BOARD_PCI6032E, 14562306a36Sopenharmony_ci BOARD_PCI6033E, 14662306a36Sopenharmony_ci BOARD_PCI6071E, 14762306a36Sopenharmony_ci BOARD_PCI6023E, 14862306a36Sopenharmony_ci BOARD_PCI6024E, 14962306a36Sopenharmony_ci BOARD_PCI6025E, 15062306a36Sopenharmony_ci BOARD_PXI6025E, 15162306a36Sopenharmony_ci BOARD_PCI6034E, 15262306a36Sopenharmony_ci BOARD_PCI6035E, 15362306a36Sopenharmony_ci BOARD_PCI6052E, 15462306a36Sopenharmony_ci BOARD_PCI6110, 15562306a36Sopenharmony_ci BOARD_PCI6111, 15662306a36Sopenharmony_ci /* BOARD_PCI6115, */ 15762306a36Sopenharmony_ci /* BOARD_PXI6115, */ 15862306a36Sopenharmony_ci BOARD_PCI6711, 15962306a36Sopenharmony_ci BOARD_PXI6711, 16062306a36Sopenharmony_ci BOARD_PCI6713, 16162306a36Sopenharmony_ci BOARD_PXI6713, 16262306a36Sopenharmony_ci BOARD_PCI6731, 16362306a36Sopenharmony_ci /* BOARD_PXI6731, */ 16462306a36Sopenharmony_ci BOARD_PCI6733, 16562306a36Sopenharmony_ci BOARD_PXI6733, 16662306a36Sopenharmony_ci BOARD_PXI6071E, 16762306a36Sopenharmony_ci BOARD_PXI6070E, 16862306a36Sopenharmony_ci BOARD_PXI6052E, 16962306a36Sopenharmony_ci BOARD_PXI6031E, 17062306a36Sopenharmony_ci BOARD_PCI6036E, 17162306a36Sopenharmony_ci BOARD_PCI6220, 17262306a36Sopenharmony_ci BOARD_PXI6220, 17362306a36Sopenharmony_ci BOARD_PCI6221, 17462306a36Sopenharmony_ci BOARD_PCI6221_37PIN, 17562306a36Sopenharmony_ci BOARD_PXI6221, 17662306a36Sopenharmony_ci BOARD_PCI6224, 17762306a36Sopenharmony_ci BOARD_PXI6224, 17862306a36Sopenharmony_ci BOARD_PCI6225, 17962306a36Sopenharmony_ci BOARD_PXI6225, 18062306a36Sopenharmony_ci BOARD_PCI6229, 18162306a36Sopenharmony_ci BOARD_PXI6229, 18262306a36Sopenharmony_ci BOARD_PCI6250, 18362306a36Sopenharmony_ci BOARD_PXI6250, 18462306a36Sopenharmony_ci BOARD_PCI6251, 18562306a36Sopenharmony_ci BOARD_PXI6251, 18662306a36Sopenharmony_ci BOARD_PCIE6251, 18762306a36Sopenharmony_ci BOARD_PXIE6251, 18862306a36Sopenharmony_ci BOARD_PCI6254, 18962306a36Sopenharmony_ci BOARD_PXI6254, 19062306a36Sopenharmony_ci BOARD_PCI6259, 19162306a36Sopenharmony_ci BOARD_PXI6259, 19262306a36Sopenharmony_ci BOARD_PCIE6259, 19362306a36Sopenharmony_ci BOARD_PXIE6259, 19462306a36Sopenharmony_ci BOARD_PCI6280, 19562306a36Sopenharmony_ci BOARD_PXI6280, 19662306a36Sopenharmony_ci BOARD_PCI6281, 19762306a36Sopenharmony_ci BOARD_PXI6281, 19862306a36Sopenharmony_ci BOARD_PCI6284, 19962306a36Sopenharmony_ci BOARD_PXI6284, 20062306a36Sopenharmony_ci BOARD_PCI6289, 20162306a36Sopenharmony_ci BOARD_PXI6289, 20262306a36Sopenharmony_ci BOARD_PCI6143, 20362306a36Sopenharmony_ci BOARD_PXI6143, 20462306a36Sopenharmony_ci}; 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_cistatic const struct ni_board_struct ni_boards[] = { 20762306a36Sopenharmony_ci [BOARD_PCIMIO_16XE_50] = { 20862306a36Sopenharmony_ci .name = "pci-mio-16xe-50", 20962306a36Sopenharmony_ci .n_adchan = 16, 21062306a36Sopenharmony_ci .ai_maxdata = 0xffff, 21162306a36Sopenharmony_ci .ai_fifo_depth = 2048, 21262306a36Sopenharmony_ci .alwaysdither = 1, 21362306a36Sopenharmony_ci .gainlkup = ai_gain_8, 21462306a36Sopenharmony_ci .ai_speed = 50000, 21562306a36Sopenharmony_ci .n_aochan = 2, 21662306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 21762306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 21862306a36Sopenharmony_ci .ao_speed = 50000, 21962306a36Sopenharmony_ci .caldac = { dac8800, dac8043 }, 22062306a36Sopenharmony_ci }, 22162306a36Sopenharmony_ci [BOARD_PCIMIO_16XE_10] = { 22262306a36Sopenharmony_ci .name = "pci-mio-16xe-10", /* aka pci-6030E */ 22362306a36Sopenharmony_ci .n_adchan = 16, 22462306a36Sopenharmony_ci .ai_maxdata = 0xffff, 22562306a36Sopenharmony_ci .ai_fifo_depth = 512, 22662306a36Sopenharmony_ci .alwaysdither = 1, 22762306a36Sopenharmony_ci .gainlkup = ai_gain_14, 22862306a36Sopenharmony_ci .ai_speed = 10000, 22962306a36Sopenharmony_ci .n_aochan = 2, 23062306a36Sopenharmony_ci .ao_maxdata = 0xffff, 23162306a36Sopenharmony_ci .ao_fifo_depth = 2048, 23262306a36Sopenharmony_ci .ao_range_table = &range_ni_E_ao_ext, 23362306a36Sopenharmony_ci .ao_speed = 10000, 23462306a36Sopenharmony_ci .caldac = { dac8800, dac8043, ad8522 }, 23562306a36Sopenharmony_ci }, 23662306a36Sopenharmony_ci [BOARD_PCI6014] = { 23762306a36Sopenharmony_ci .name = "pci-6014", 23862306a36Sopenharmony_ci .n_adchan = 16, 23962306a36Sopenharmony_ci .ai_maxdata = 0xffff, 24062306a36Sopenharmony_ci .ai_fifo_depth = 512, 24162306a36Sopenharmony_ci .alwaysdither = 1, 24262306a36Sopenharmony_ci .gainlkup = ai_gain_4, 24362306a36Sopenharmony_ci .ai_speed = 5000, 24462306a36Sopenharmony_ci .n_aochan = 2, 24562306a36Sopenharmony_ci .ao_maxdata = 0xffff, 24662306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 24762306a36Sopenharmony_ci .ao_speed = 100000, 24862306a36Sopenharmony_ci .caldac = { ad8804_debug }, 24962306a36Sopenharmony_ci }, 25062306a36Sopenharmony_ci [BOARD_PXI6030E] = { 25162306a36Sopenharmony_ci .name = "pxi-6030e", 25262306a36Sopenharmony_ci .n_adchan = 16, 25362306a36Sopenharmony_ci .ai_maxdata = 0xffff, 25462306a36Sopenharmony_ci .ai_fifo_depth = 512, 25562306a36Sopenharmony_ci .alwaysdither = 1, 25662306a36Sopenharmony_ci .gainlkup = ai_gain_14, 25762306a36Sopenharmony_ci .ai_speed = 10000, 25862306a36Sopenharmony_ci .n_aochan = 2, 25962306a36Sopenharmony_ci .ao_maxdata = 0xffff, 26062306a36Sopenharmony_ci .ao_fifo_depth = 2048, 26162306a36Sopenharmony_ci .ao_range_table = &range_ni_E_ao_ext, 26262306a36Sopenharmony_ci .ao_speed = 10000, 26362306a36Sopenharmony_ci .caldac = { dac8800, dac8043, ad8522 }, 26462306a36Sopenharmony_ci }, 26562306a36Sopenharmony_ci [BOARD_PCIMIO_16E_1] = { 26662306a36Sopenharmony_ci .name = "pci-mio-16e-1", /* aka pci-6070e */ 26762306a36Sopenharmony_ci .n_adchan = 16, 26862306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 26962306a36Sopenharmony_ci .ai_fifo_depth = 512, 27062306a36Sopenharmony_ci .gainlkup = ai_gain_16, 27162306a36Sopenharmony_ci .ai_speed = 800, 27262306a36Sopenharmony_ci .n_aochan = 2, 27362306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 27462306a36Sopenharmony_ci .ao_fifo_depth = 2048, 27562306a36Sopenharmony_ci .ao_range_table = &range_ni_E_ao_ext, 27662306a36Sopenharmony_ci .ao_speed = 1000, 27762306a36Sopenharmony_ci .caldac = { mb88341 }, 27862306a36Sopenharmony_ci }, 27962306a36Sopenharmony_ci [BOARD_PCIMIO_16E_4] = { 28062306a36Sopenharmony_ci .name = "pci-mio-16e-4", /* aka pci-6040e */ 28162306a36Sopenharmony_ci .n_adchan = 16, 28262306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 28362306a36Sopenharmony_ci .ai_fifo_depth = 512, 28462306a36Sopenharmony_ci .gainlkup = ai_gain_16, 28562306a36Sopenharmony_ci /* 28662306a36Sopenharmony_ci * there have been reported problems with 28762306a36Sopenharmony_ci * full speed on this board 28862306a36Sopenharmony_ci */ 28962306a36Sopenharmony_ci .ai_speed = 2000, 29062306a36Sopenharmony_ci .n_aochan = 2, 29162306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 29262306a36Sopenharmony_ci .ao_fifo_depth = 512, 29362306a36Sopenharmony_ci .ao_range_table = &range_ni_E_ao_ext, 29462306a36Sopenharmony_ci .ao_speed = 1000, 29562306a36Sopenharmony_ci .caldac = { ad8804_debug }, /* doc says mb88341 */ 29662306a36Sopenharmony_ci }, 29762306a36Sopenharmony_ci [BOARD_PXI6040E] = { 29862306a36Sopenharmony_ci .name = "pxi-6040e", 29962306a36Sopenharmony_ci .n_adchan = 16, 30062306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 30162306a36Sopenharmony_ci .ai_fifo_depth = 512, 30262306a36Sopenharmony_ci .gainlkup = ai_gain_16, 30362306a36Sopenharmony_ci .ai_speed = 2000, 30462306a36Sopenharmony_ci .n_aochan = 2, 30562306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 30662306a36Sopenharmony_ci .ao_fifo_depth = 512, 30762306a36Sopenharmony_ci .ao_range_table = &range_ni_E_ao_ext, 30862306a36Sopenharmony_ci .ao_speed = 1000, 30962306a36Sopenharmony_ci .caldac = { mb88341 }, 31062306a36Sopenharmony_ci }, 31162306a36Sopenharmony_ci [BOARD_PCI6031E] = { 31262306a36Sopenharmony_ci .name = "pci-6031e", 31362306a36Sopenharmony_ci .n_adchan = 64, 31462306a36Sopenharmony_ci .ai_maxdata = 0xffff, 31562306a36Sopenharmony_ci .ai_fifo_depth = 512, 31662306a36Sopenharmony_ci .alwaysdither = 1, 31762306a36Sopenharmony_ci .gainlkup = ai_gain_14, 31862306a36Sopenharmony_ci .ai_speed = 10000, 31962306a36Sopenharmony_ci .n_aochan = 2, 32062306a36Sopenharmony_ci .ao_maxdata = 0xffff, 32162306a36Sopenharmony_ci .ao_fifo_depth = 2048, 32262306a36Sopenharmony_ci .ao_range_table = &range_ni_E_ao_ext, 32362306a36Sopenharmony_ci .ao_speed = 10000, 32462306a36Sopenharmony_ci .caldac = { dac8800, dac8043, ad8522 }, 32562306a36Sopenharmony_ci }, 32662306a36Sopenharmony_ci [BOARD_PCI6032E] = { 32762306a36Sopenharmony_ci .name = "pci-6032e", 32862306a36Sopenharmony_ci .n_adchan = 16, 32962306a36Sopenharmony_ci .ai_maxdata = 0xffff, 33062306a36Sopenharmony_ci .ai_fifo_depth = 512, 33162306a36Sopenharmony_ci .alwaysdither = 1, 33262306a36Sopenharmony_ci .gainlkup = ai_gain_14, 33362306a36Sopenharmony_ci .ai_speed = 10000, 33462306a36Sopenharmony_ci .caldac = { dac8800, dac8043, ad8522 }, 33562306a36Sopenharmony_ci }, 33662306a36Sopenharmony_ci [BOARD_PCI6033E] = { 33762306a36Sopenharmony_ci .name = "pci-6033e", 33862306a36Sopenharmony_ci .n_adchan = 64, 33962306a36Sopenharmony_ci .ai_maxdata = 0xffff, 34062306a36Sopenharmony_ci .ai_fifo_depth = 512, 34162306a36Sopenharmony_ci .alwaysdither = 1, 34262306a36Sopenharmony_ci .gainlkup = ai_gain_14, 34362306a36Sopenharmony_ci .ai_speed = 10000, 34462306a36Sopenharmony_ci .caldac = { dac8800, dac8043, ad8522 }, 34562306a36Sopenharmony_ci }, 34662306a36Sopenharmony_ci [BOARD_PCI6071E] = { 34762306a36Sopenharmony_ci .name = "pci-6071e", 34862306a36Sopenharmony_ci .n_adchan = 64, 34962306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 35062306a36Sopenharmony_ci .ai_fifo_depth = 512, 35162306a36Sopenharmony_ci .alwaysdither = 1, 35262306a36Sopenharmony_ci .gainlkup = ai_gain_16, 35362306a36Sopenharmony_ci .ai_speed = 800, 35462306a36Sopenharmony_ci .n_aochan = 2, 35562306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 35662306a36Sopenharmony_ci .ao_fifo_depth = 2048, 35762306a36Sopenharmony_ci .ao_range_table = &range_ni_E_ao_ext, 35862306a36Sopenharmony_ci .ao_speed = 1000, 35962306a36Sopenharmony_ci .caldac = { ad8804_debug }, 36062306a36Sopenharmony_ci }, 36162306a36Sopenharmony_ci [BOARD_PCI6023E] = { 36262306a36Sopenharmony_ci .name = "pci-6023e", 36362306a36Sopenharmony_ci .n_adchan = 16, 36462306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 36562306a36Sopenharmony_ci .ai_fifo_depth = 512, 36662306a36Sopenharmony_ci .gainlkup = ai_gain_4, 36762306a36Sopenharmony_ci .ai_speed = 5000, 36862306a36Sopenharmony_ci .caldac = { ad8804_debug }, /* manual is wrong */ 36962306a36Sopenharmony_ci }, 37062306a36Sopenharmony_ci [BOARD_PCI6024E] = { 37162306a36Sopenharmony_ci .name = "pci-6024e", 37262306a36Sopenharmony_ci .n_adchan = 16, 37362306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 37462306a36Sopenharmony_ci .ai_fifo_depth = 512, 37562306a36Sopenharmony_ci .gainlkup = ai_gain_4, 37662306a36Sopenharmony_ci .ai_speed = 5000, 37762306a36Sopenharmony_ci .n_aochan = 2, 37862306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 37962306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 38062306a36Sopenharmony_ci .ao_speed = 100000, 38162306a36Sopenharmony_ci .caldac = { ad8804_debug }, /* manual is wrong */ 38262306a36Sopenharmony_ci }, 38362306a36Sopenharmony_ci [BOARD_PCI6025E] = { 38462306a36Sopenharmony_ci .name = "pci-6025e", 38562306a36Sopenharmony_ci .n_adchan = 16, 38662306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 38762306a36Sopenharmony_ci .ai_fifo_depth = 512, 38862306a36Sopenharmony_ci .gainlkup = ai_gain_4, 38962306a36Sopenharmony_ci .ai_speed = 5000, 39062306a36Sopenharmony_ci .n_aochan = 2, 39162306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 39262306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 39362306a36Sopenharmony_ci .ao_speed = 100000, 39462306a36Sopenharmony_ci .caldac = { ad8804_debug }, /* manual is wrong */ 39562306a36Sopenharmony_ci .has_8255 = 1, 39662306a36Sopenharmony_ci }, 39762306a36Sopenharmony_ci [BOARD_PXI6025E] = { 39862306a36Sopenharmony_ci .name = "pxi-6025e", 39962306a36Sopenharmony_ci .n_adchan = 16, 40062306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 40162306a36Sopenharmony_ci .ai_fifo_depth = 512, 40262306a36Sopenharmony_ci .gainlkup = ai_gain_4, 40362306a36Sopenharmony_ci .ai_speed = 5000, 40462306a36Sopenharmony_ci .n_aochan = 2, 40562306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 40662306a36Sopenharmony_ci .ao_range_table = &range_ni_E_ao_ext, 40762306a36Sopenharmony_ci .ao_speed = 100000, 40862306a36Sopenharmony_ci .caldac = { ad8804_debug }, /* manual is wrong */ 40962306a36Sopenharmony_ci .has_8255 = 1, 41062306a36Sopenharmony_ci }, 41162306a36Sopenharmony_ci [BOARD_PCI6034E] = { 41262306a36Sopenharmony_ci .name = "pci-6034e", 41362306a36Sopenharmony_ci .n_adchan = 16, 41462306a36Sopenharmony_ci .ai_maxdata = 0xffff, 41562306a36Sopenharmony_ci .ai_fifo_depth = 512, 41662306a36Sopenharmony_ci .alwaysdither = 1, 41762306a36Sopenharmony_ci .gainlkup = ai_gain_4, 41862306a36Sopenharmony_ci .ai_speed = 5000, 41962306a36Sopenharmony_ci .caldac = { ad8804_debug }, 42062306a36Sopenharmony_ci }, 42162306a36Sopenharmony_ci [BOARD_PCI6035E] = { 42262306a36Sopenharmony_ci .name = "pci-6035e", 42362306a36Sopenharmony_ci .n_adchan = 16, 42462306a36Sopenharmony_ci .ai_maxdata = 0xffff, 42562306a36Sopenharmony_ci .ai_fifo_depth = 512, 42662306a36Sopenharmony_ci .alwaysdither = 1, 42762306a36Sopenharmony_ci .gainlkup = ai_gain_4, 42862306a36Sopenharmony_ci .ai_speed = 5000, 42962306a36Sopenharmony_ci .n_aochan = 2, 43062306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 43162306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 43262306a36Sopenharmony_ci .ao_speed = 100000, 43362306a36Sopenharmony_ci .caldac = { ad8804_debug }, 43462306a36Sopenharmony_ci }, 43562306a36Sopenharmony_ci [BOARD_PCI6052E] = { 43662306a36Sopenharmony_ci .name = "pci-6052e", 43762306a36Sopenharmony_ci .n_adchan = 16, 43862306a36Sopenharmony_ci .ai_maxdata = 0xffff, 43962306a36Sopenharmony_ci .ai_fifo_depth = 512, 44062306a36Sopenharmony_ci .alwaysdither = 1, 44162306a36Sopenharmony_ci .gainlkup = ai_gain_16, 44262306a36Sopenharmony_ci .ai_speed = 3000, 44362306a36Sopenharmony_ci .n_aochan = 2, 44462306a36Sopenharmony_ci .ao_maxdata = 0xffff, 44562306a36Sopenharmony_ci .ao_fifo_depth = 2048, 44662306a36Sopenharmony_ci .ao_range_table = &range_ni_E_ao_ext, 44762306a36Sopenharmony_ci .ao_speed = 3000, 44862306a36Sopenharmony_ci /* manual is wrong */ 44962306a36Sopenharmony_ci .caldac = { ad8804_debug, ad8804_debug, ad8522 }, 45062306a36Sopenharmony_ci }, 45162306a36Sopenharmony_ci [BOARD_PCI6110] = { 45262306a36Sopenharmony_ci .name = "pci-6110", 45362306a36Sopenharmony_ci .n_adchan = 4, 45462306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 45562306a36Sopenharmony_ci .ai_fifo_depth = 8192, 45662306a36Sopenharmony_ci .alwaysdither = 0, 45762306a36Sopenharmony_ci .gainlkup = ai_gain_611x, 45862306a36Sopenharmony_ci .ai_speed = 200, 45962306a36Sopenharmony_ci .n_aochan = 2, 46062306a36Sopenharmony_ci .ao_maxdata = 0xffff, 46162306a36Sopenharmony_ci .reg_type = ni_reg_611x, 46262306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 46362306a36Sopenharmony_ci .ao_fifo_depth = 2048, 46462306a36Sopenharmony_ci .ao_speed = 250, 46562306a36Sopenharmony_ci .caldac = { ad8804, ad8804 }, 46662306a36Sopenharmony_ci }, 46762306a36Sopenharmony_ci [BOARD_PCI6111] = { 46862306a36Sopenharmony_ci .name = "pci-6111", 46962306a36Sopenharmony_ci .n_adchan = 2, 47062306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 47162306a36Sopenharmony_ci .ai_fifo_depth = 8192, 47262306a36Sopenharmony_ci .gainlkup = ai_gain_611x, 47362306a36Sopenharmony_ci .ai_speed = 200, 47462306a36Sopenharmony_ci .n_aochan = 2, 47562306a36Sopenharmony_ci .ao_maxdata = 0xffff, 47662306a36Sopenharmony_ci .reg_type = ni_reg_611x, 47762306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 47862306a36Sopenharmony_ci .ao_fifo_depth = 2048, 47962306a36Sopenharmony_ci .ao_speed = 250, 48062306a36Sopenharmony_ci .caldac = { ad8804, ad8804 }, 48162306a36Sopenharmony_ci }, 48262306a36Sopenharmony_ci#if 0 48362306a36Sopenharmony_ci /* The 6115 boards probably need their own driver */ 48462306a36Sopenharmony_ci [BOARD_PCI6115] = { /* .device_id = 0x2ed0, */ 48562306a36Sopenharmony_ci .name = "pci-6115", 48662306a36Sopenharmony_ci .n_adchan = 4, 48762306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 48862306a36Sopenharmony_ci .ai_fifo_depth = 8192, 48962306a36Sopenharmony_ci .gainlkup = ai_gain_611x, 49062306a36Sopenharmony_ci .ai_speed = 100, 49162306a36Sopenharmony_ci .n_aochan = 2, 49262306a36Sopenharmony_ci .ao_maxdata = 0xffff, 49362306a36Sopenharmony_ci .ao_671x = 1, 49462306a36Sopenharmony_ci .ao_fifo_depth = 2048, 49562306a36Sopenharmony_ci .ao_speed = 250, 49662306a36Sopenharmony_ci .reg_611x = 1, 49762306a36Sopenharmony_ci /* XXX */ 49862306a36Sopenharmony_ci .caldac = { ad8804_debug, ad8804_debug, ad8804_debug }, 49962306a36Sopenharmony_ci }, 50062306a36Sopenharmony_ci#endif 50162306a36Sopenharmony_ci#if 0 50262306a36Sopenharmony_ci [BOARD_PXI6115] = { /* .device_id = ????, */ 50362306a36Sopenharmony_ci .name = "pxi-6115", 50462306a36Sopenharmony_ci .n_adchan = 4, 50562306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 50662306a36Sopenharmony_ci .ai_fifo_depth = 8192, 50762306a36Sopenharmony_ci .gainlkup = ai_gain_611x, 50862306a36Sopenharmony_ci .ai_speed = 100, 50962306a36Sopenharmony_ci .n_aochan = 2, 51062306a36Sopenharmony_ci .ao_maxdata = 0xffff, 51162306a36Sopenharmony_ci .ao_671x = 1, 51262306a36Sopenharmony_ci .ao_fifo_depth = 2048, 51362306a36Sopenharmony_ci .ao_speed = 250, 51462306a36Sopenharmony_ci .reg_611x = 1, 51562306a36Sopenharmony_ci /* XXX */ 51662306a36Sopenharmony_ci .caldac = { ad8804_debug, ad8804_debug, ad8804_debug }, 51762306a36Sopenharmony_ci }, 51862306a36Sopenharmony_ci#endif 51962306a36Sopenharmony_ci [BOARD_PCI6711] = { 52062306a36Sopenharmony_ci .name = "pci-6711", 52162306a36Sopenharmony_ci .n_aochan = 4, 52262306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 52362306a36Sopenharmony_ci /* data sheet says 8192, but fifo really holds 16384 samples */ 52462306a36Sopenharmony_ci .ao_fifo_depth = 16384, 52562306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 52662306a36Sopenharmony_ci .ao_speed = 1000, 52762306a36Sopenharmony_ci .reg_type = ni_reg_6711, 52862306a36Sopenharmony_ci .caldac = { ad8804_debug }, 52962306a36Sopenharmony_ci }, 53062306a36Sopenharmony_ci [BOARD_PXI6711] = { 53162306a36Sopenharmony_ci .name = "pxi-6711", 53262306a36Sopenharmony_ci .n_aochan = 4, 53362306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 53462306a36Sopenharmony_ci .ao_fifo_depth = 16384, 53562306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 53662306a36Sopenharmony_ci .ao_speed = 1000, 53762306a36Sopenharmony_ci .reg_type = ni_reg_6711, 53862306a36Sopenharmony_ci .caldac = { ad8804_debug }, 53962306a36Sopenharmony_ci }, 54062306a36Sopenharmony_ci [BOARD_PCI6713] = { 54162306a36Sopenharmony_ci .name = "pci-6713", 54262306a36Sopenharmony_ci .n_aochan = 8, 54362306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 54462306a36Sopenharmony_ci .ao_fifo_depth = 16384, 54562306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 54662306a36Sopenharmony_ci .ao_speed = 1000, 54762306a36Sopenharmony_ci .reg_type = ni_reg_6713, 54862306a36Sopenharmony_ci .caldac = { ad8804_debug, ad8804_debug }, 54962306a36Sopenharmony_ci }, 55062306a36Sopenharmony_ci [BOARD_PXI6713] = { 55162306a36Sopenharmony_ci .name = "pxi-6713", 55262306a36Sopenharmony_ci .n_aochan = 8, 55362306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 55462306a36Sopenharmony_ci .ao_fifo_depth = 16384, 55562306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 55662306a36Sopenharmony_ci .ao_speed = 1000, 55762306a36Sopenharmony_ci .reg_type = ni_reg_6713, 55862306a36Sopenharmony_ci .caldac = { ad8804_debug, ad8804_debug }, 55962306a36Sopenharmony_ci }, 56062306a36Sopenharmony_ci [BOARD_PCI6731] = { 56162306a36Sopenharmony_ci .name = "pci-6731", 56262306a36Sopenharmony_ci .n_aochan = 4, 56362306a36Sopenharmony_ci .ao_maxdata = 0xffff, 56462306a36Sopenharmony_ci .ao_fifo_depth = 8192, 56562306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 56662306a36Sopenharmony_ci .ao_speed = 1000, 56762306a36Sopenharmony_ci .reg_type = ni_reg_6711, 56862306a36Sopenharmony_ci .caldac = { ad8804_debug }, 56962306a36Sopenharmony_ci }, 57062306a36Sopenharmony_ci#if 0 57162306a36Sopenharmony_ci [BOARD_PXI6731] = { /* .device_id = ????, */ 57262306a36Sopenharmony_ci .name = "pxi-6731", 57362306a36Sopenharmony_ci .n_aochan = 4, 57462306a36Sopenharmony_ci .ao_maxdata = 0xffff, 57562306a36Sopenharmony_ci .ao_fifo_depth = 8192, 57662306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 57762306a36Sopenharmony_ci .reg_type = ni_reg_6711, 57862306a36Sopenharmony_ci .caldac = { ad8804_debug }, 57962306a36Sopenharmony_ci }, 58062306a36Sopenharmony_ci#endif 58162306a36Sopenharmony_ci [BOARD_PCI6733] = { 58262306a36Sopenharmony_ci .name = "pci-6733", 58362306a36Sopenharmony_ci .n_aochan = 8, 58462306a36Sopenharmony_ci .ao_maxdata = 0xffff, 58562306a36Sopenharmony_ci .ao_fifo_depth = 16384, 58662306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 58762306a36Sopenharmony_ci .ao_speed = 1000, 58862306a36Sopenharmony_ci .reg_type = ni_reg_6713, 58962306a36Sopenharmony_ci .caldac = { ad8804_debug, ad8804_debug }, 59062306a36Sopenharmony_ci }, 59162306a36Sopenharmony_ci [BOARD_PXI6733] = { 59262306a36Sopenharmony_ci .name = "pxi-6733", 59362306a36Sopenharmony_ci .n_aochan = 8, 59462306a36Sopenharmony_ci .ao_maxdata = 0xffff, 59562306a36Sopenharmony_ci .ao_fifo_depth = 16384, 59662306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 59762306a36Sopenharmony_ci .ao_speed = 1000, 59862306a36Sopenharmony_ci .reg_type = ni_reg_6713, 59962306a36Sopenharmony_ci .caldac = { ad8804_debug, ad8804_debug }, 60062306a36Sopenharmony_ci }, 60162306a36Sopenharmony_ci [BOARD_PXI6071E] = { 60262306a36Sopenharmony_ci .name = "pxi-6071e", 60362306a36Sopenharmony_ci .n_adchan = 64, 60462306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 60562306a36Sopenharmony_ci .ai_fifo_depth = 512, 60662306a36Sopenharmony_ci .alwaysdither = 1, 60762306a36Sopenharmony_ci .gainlkup = ai_gain_16, 60862306a36Sopenharmony_ci .ai_speed = 800, 60962306a36Sopenharmony_ci .n_aochan = 2, 61062306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 61162306a36Sopenharmony_ci .ao_fifo_depth = 2048, 61262306a36Sopenharmony_ci .ao_range_table = &range_ni_E_ao_ext, 61362306a36Sopenharmony_ci .ao_speed = 1000, 61462306a36Sopenharmony_ci .caldac = { ad8804_debug }, 61562306a36Sopenharmony_ci }, 61662306a36Sopenharmony_ci [BOARD_PXI6070E] = { 61762306a36Sopenharmony_ci .name = "pxi-6070e", 61862306a36Sopenharmony_ci .n_adchan = 16, 61962306a36Sopenharmony_ci .ai_maxdata = 0x0fff, 62062306a36Sopenharmony_ci .ai_fifo_depth = 512, 62162306a36Sopenharmony_ci .alwaysdither = 1, 62262306a36Sopenharmony_ci .gainlkup = ai_gain_16, 62362306a36Sopenharmony_ci .ai_speed = 800, 62462306a36Sopenharmony_ci .n_aochan = 2, 62562306a36Sopenharmony_ci .ao_maxdata = 0x0fff, 62662306a36Sopenharmony_ci .ao_fifo_depth = 2048, 62762306a36Sopenharmony_ci .ao_range_table = &range_ni_E_ao_ext, 62862306a36Sopenharmony_ci .ao_speed = 1000, 62962306a36Sopenharmony_ci .caldac = { ad8804_debug }, 63062306a36Sopenharmony_ci }, 63162306a36Sopenharmony_ci [BOARD_PXI6052E] = { 63262306a36Sopenharmony_ci .name = "pxi-6052e", 63362306a36Sopenharmony_ci .n_adchan = 16, 63462306a36Sopenharmony_ci .ai_maxdata = 0xffff, 63562306a36Sopenharmony_ci .ai_fifo_depth = 512, 63662306a36Sopenharmony_ci .alwaysdither = 1, 63762306a36Sopenharmony_ci .gainlkup = ai_gain_16, 63862306a36Sopenharmony_ci .ai_speed = 3000, 63962306a36Sopenharmony_ci .n_aochan = 2, 64062306a36Sopenharmony_ci .ao_maxdata = 0xffff, 64162306a36Sopenharmony_ci .ao_fifo_depth = 2048, 64262306a36Sopenharmony_ci .ao_range_table = &range_ni_E_ao_ext, 64362306a36Sopenharmony_ci .ao_speed = 3000, 64462306a36Sopenharmony_ci .caldac = { mb88341, mb88341, ad8522 }, 64562306a36Sopenharmony_ci }, 64662306a36Sopenharmony_ci [BOARD_PXI6031E] = { 64762306a36Sopenharmony_ci .name = "pxi-6031e", 64862306a36Sopenharmony_ci .n_adchan = 64, 64962306a36Sopenharmony_ci .ai_maxdata = 0xffff, 65062306a36Sopenharmony_ci .ai_fifo_depth = 512, 65162306a36Sopenharmony_ci .alwaysdither = 1, 65262306a36Sopenharmony_ci .gainlkup = ai_gain_14, 65362306a36Sopenharmony_ci .ai_speed = 10000, 65462306a36Sopenharmony_ci .n_aochan = 2, 65562306a36Sopenharmony_ci .ao_maxdata = 0xffff, 65662306a36Sopenharmony_ci .ao_fifo_depth = 2048, 65762306a36Sopenharmony_ci .ao_range_table = &range_ni_E_ao_ext, 65862306a36Sopenharmony_ci .ao_speed = 10000, 65962306a36Sopenharmony_ci .caldac = { dac8800, dac8043, ad8522 }, 66062306a36Sopenharmony_ci }, 66162306a36Sopenharmony_ci [BOARD_PCI6036E] = { 66262306a36Sopenharmony_ci .name = "pci-6036e", 66362306a36Sopenharmony_ci .n_adchan = 16, 66462306a36Sopenharmony_ci .ai_maxdata = 0xffff, 66562306a36Sopenharmony_ci .ai_fifo_depth = 512, 66662306a36Sopenharmony_ci .alwaysdither = 1, 66762306a36Sopenharmony_ci .gainlkup = ai_gain_4, 66862306a36Sopenharmony_ci .ai_speed = 5000, 66962306a36Sopenharmony_ci .n_aochan = 2, 67062306a36Sopenharmony_ci .ao_maxdata = 0xffff, 67162306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 67262306a36Sopenharmony_ci .ao_speed = 100000, 67362306a36Sopenharmony_ci .caldac = { ad8804_debug }, 67462306a36Sopenharmony_ci }, 67562306a36Sopenharmony_ci [BOARD_PCI6220] = { 67662306a36Sopenharmony_ci .name = "pci-6220", 67762306a36Sopenharmony_ci .n_adchan = 16, 67862306a36Sopenharmony_ci .ai_maxdata = 0xffff, 67962306a36Sopenharmony_ci .ai_fifo_depth = 512, /* FIXME: guess */ 68062306a36Sopenharmony_ci .gainlkup = ai_gain_622x, 68162306a36Sopenharmony_ci .ai_speed = 4000, 68262306a36Sopenharmony_ci .reg_type = ni_reg_622x, 68362306a36Sopenharmony_ci .caldac = { caldac_none }, 68462306a36Sopenharmony_ci }, 68562306a36Sopenharmony_ci [BOARD_PXI6220] = { 68662306a36Sopenharmony_ci .name = "pxi-6220", 68762306a36Sopenharmony_ci .n_adchan = 16, 68862306a36Sopenharmony_ci .ai_maxdata = 0xffff, 68962306a36Sopenharmony_ci .ai_fifo_depth = 512, /* FIXME: guess */ 69062306a36Sopenharmony_ci .gainlkup = ai_gain_622x, 69162306a36Sopenharmony_ci .ai_speed = 4000, 69262306a36Sopenharmony_ci .reg_type = ni_reg_622x, 69362306a36Sopenharmony_ci .caldac = { caldac_none }, 69462306a36Sopenharmony_ci .dio_speed = 1000, 69562306a36Sopenharmony_ci }, 69662306a36Sopenharmony_ci [BOARD_PCI6221] = { 69762306a36Sopenharmony_ci .name = "pci-6221", 69862306a36Sopenharmony_ci .n_adchan = 16, 69962306a36Sopenharmony_ci .ai_maxdata = 0xffff, 70062306a36Sopenharmony_ci .ai_fifo_depth = 4095, 70162306a36Sopenharmony_ci .gainlkup = ai_gain_622x, 70262306a36Sopenharmony_ci .ai_speed = 4000, 70362306a36Sopenharmony_ci .n_aochan = 2, 70462306a36Sopenharmony_ci .ao_maxdata = 0xffff, 70562306a36Sopenharmony_ci .ao_fifo_depth = 8191, 70662306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 70762306a36Sopenharmony_ci .reg_type = ni_reg_622x, 70862306a36Sopenharmony_ci .ao_speed = 1200, 70962306a36Sopenharmony_ci .caldac = { caldac_none }, 71062306a36Sopenharmony_ci .dio_speed = 1000, 71162306a36Sopenharmony_ci }, 71262306a36Sopenharmony_ci [BOARD_PCI6221_37PIN] = { 71362306a36Sopenharmony_ci .name = "pci-6221_37pin", 71462306a36Sopenharmony_ci .n_adchan = 16, 71562306a36Sopenharmony_ci .ai_maxdata = 0xffff, 71662306a36Sopenharmony_ci .ai_fifo_depth = 4095, 71762306a36Sopenharmony_ci .gainlkup = ai_gain_622x, 71862306a36Sopenharmony_ci .ai_speed = 4000, 71962306a36Sopenharmony_ci .n_aochan = 2, 72062306a36Sopenharmony_ci .ao_maxdata = 0xffff, 72162306a36Sopenharmony_ci .ao_fifo_depth = 8191, 72262306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 72362306a36Sopenharmony_ci .reg_type = ni_reg_622x, 72462306a36Sopenharmony_ci .ao_speed = 1200, 72562306a36Sopenharmony_ci .caldac = { caldac_none }, 72662306a36Sopenharmony_ci }, 72762306a36Sopenharmony_ci [BOARD_PXI6221] = { 72862306a36Sopenharmony_ci .name = "pxi-6221", 72962306a36Sopenharmony_ci .n_adchan = 16, 73062306a36Sopenharmony_ci .ai_maxdata = 0xffff, 73162306a36Sopenharmony_ci .ai_fifo_depth = 4095, 73262306a36Sopenharmony_ci .gainlkup = ai_gain_622x, 73362306a36Sopenharmony_ci .ai_speed = 4000, 73462306a36Sopenharmony_ci .n_aochan = 2, 73562306a36Sopenharmony_ci .ao_maxdata = 0xffff, 73662306a36Sopenharmony_ci .ao_fifo_depth = 8191, 73762306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 73862306a36Sopenharmony_ci .reg_type = ni_reg_622x, 73962306a36Sopenharmony_ci .ao_speed = 1200, 74062306a36Sopenharmony_ci .caldac = { caldac_none }, 74162306a36Sopenharmony_ci .dio_speed = 1000, 74262306a36Sopenharmony_ci }, 74362306a36Sopenharmony_ci [BOARD_PCI6224] = { 74462306a36Sopenharmony_ci .name = "pci-6224", 74562306a36Sopenharmony_ci .n_adchan = 32, 74662306a36Sopenharmony_ci .ai_maxdata = 0xffff, 74762306a36Sopenharmony_ci .ai_fifo_depth = 4095, 74862306a36Sopenharmony_ci .gainlkup = ai_gain_622x, 74962306a36Sopenharmony_ci .ai_speed = 4000, 75062306a36Sopenharmony_ci .reg_type = ni_reg_622x, 75162306a36Sopenharmony_ci .has_32dio_chan = 1, 75262306a36Sopenharmony_ci .caldac = { caldac_none }, 75362306a36Sopenharmony_ci .dio_speed = 1000, 75462306a36Sopenharmony_ci }, 75562306a36Sopenharmony_ci [BOARD_PXI6224] = { 75662306a36Sopenharmony_ci .name = "pxi-6224", 75762306a36Sopenharmony_ci .n_adchan = 32, 75862306a36Sopenharmony_ci .ai_maxdata = 0xffff, 75962306a36Sopenharmony_ci .ai_fifo_depth = 4095, 76062306a36Sopenharmony_ci .gainlkup = ai_gain_622x, 76162306a36Sopenharmony_ci .ai_speed = 4000, 76262306a36Sopenharmony_ci .reg_type = ni_reg_622x, 76362306a36Sopenharmony_ci .has_32dio_chan = 1, 76462306a36Sopenharmony_ci .caldac = { caldac_none }, 76562306a36Sopenharmony_ci .dio_speed = 1000, 76662306a36Sopenharmony_ci }, 76762306a36Sopenharmony_ci [BOARD_PCI6225] = { 76862306a36Sopenharmony_ci .name = "pci-6225", 76962306a36Sopenharmony_ci .n_adchan = 80, 77062306a36Sopenharmony_ci .ai_maxdata = 0xffff, 77162306a36Sopenharmony_ci .ai_fifo_depth = 4095, 77262306a36Sopenharmony_ci .gainlkup = ai_gain_622x, 77362306a36Sopenharmony_ci .ai_speed = 4000, 77462306a36Sopenharmony_ci .n_aochan = 2, 77562306a36Sopenharmony_ci .ao_maxdata = 0xffff, 77662306a36Sopenharmony_ci .ao_fifo_depth = 8191, 77762306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 77862306a36Sopenharmony_ci .reg_type = ni_reg_622x, 77962306a36Sopenharmony_ci .ao_speed = 1200, 78062306a36Sopenharmony_ci .has_32dio_chan = 1, 78162306a36Sopenharmony_ci .caldac = { caldac_none }, 78262306a36Sopenharmony_ci .dio_speed = 1000, 78362306a36Sopenharmony_ci }, 78462306a36Sopenharmony_ci [BOARD_PXI6225] = { 78562306a36Sopenharmony_ci .name = "pxi-6225", 78662306a36Sopenharmony_ci .n_adchan = 80, 78762306a36Sopenharmony_ci .ai_maxdata = 0xffff, 78862306a36Sopenharmony_ci .ai_fifo_depth = 4095, 78962306a36Sopenharmony_ci .gainlkup = ai_gain_622x, 79062306a36Sopenharmony_ci .ai_speed = 4000, 79162306a36Sopenharmony_ci .n_aochan = 2, 79262306a36Sopenharmony_ci .ao_maxdata = 0xffff, 79362306a36Sopenharmony_ci .ao_fifo_depth = 8191, 79462306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 79562306a36Sopenharmony_ci .reg_type = ni_reg_622x, 79662306a36Sopenharmony_ci .ao_speed = 1200, 79762306a36Sopenharmony_ci .has_32dio_chan = 1, 79862306a36Sopenharmony_ci .caldac = { caldac_none }, 79962306a36Sopenharmony_ci .dio_speed = 1000, 80062306a36Sopenharmony_ci }, 80162306a36Sopenharmony_ci [BOARD_PCI6229] = { 80262306a36Sopenharmony_ci .name = "pci-6229", 80362306a36Sopenharmony_ci .n_adchan = 32, 80462306a36Sopenharmony_ci .ai_maxdata = 0xffff, 80562306a36Sopenharmony_ci .ai_fifo_depth = 4095, 80662306a36Sopenharmony_ci .gainlkup = ai_gain_622x, 80762306a36Sopenharmony_ci .ai_speed = 4000, 80862306a36Sopenharmony_ci .n_aochan = 4, 80962306a36Sopenharmony_ci .ao_maxdata = 0xffff, 81062306a36Sopenharmony_ci .ao_fifo_depth = 8191, 81162306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 81262306a36Sopenharmony_ci .reg_type = ni_reg_622x, 81362306a36Sopenharmony_ci .ao_speed = 1200, 81462306a36Sopenharmony_ci .has_32dio_chan = 1, 81562306a36Sopenharmony_ci .caldac = { caldac_none }, 81662306a36Sopenharmony_ci }, 81762306a36Sopenharmony_ci [BOARD_PXI6229] = { 81862306a36Sopenharmony_ci .name = "pxi-6229", 81962306a36Sopenharmony_ci .n_adchan = 32, 82062306a36Sopenharmony_ci .ai_maxdata = 0xffff, 82162306a36Sopenharmony_ci .ai_fifo_depth = 4095, 82262306a36Sopenharmony_ci .gainlkup = ai_gain_622x, 82362306a36Sopenharmony_ci .ai_speed = 4000, 82462306a36Sopenharmony_ci .n_aochan = 4, 82562306a36Sopenharmony_ci .ao_maxdata = 0xffff, 82662306a36Sopenharmony_ci .ao_fifo_depth = 8191, 82762306a36Sopenharmony_ci .ao_range_table = &range_bipolar10, 82862306a36Sopenharmony_ci .reg_type = ni_reg_622x, 82962306a36Sopenharmony_ci .ao_speed = 1200, 83062306a36Sopenharmony_ci .has_32dio_chan = 1, 83162306a36Sopenharmony_ci .caldac = { caldac_none }, 83262306a36Sopenharmony_ci .dio_speed = 1000, 83362306a36Sopenharmony_ci }, 83462306a36Sopenharmony_ci [BOARD_PCI6250] = { 83562306a36Sopenharmony_ci .name = "pci-6250", 83662306a36Sopenharmony_ci .n_adchan = 16, 83762306a36Sopenharmony_ci .ai_maxdata = 0xffff, 83862306a36Sopenharmony_ci .ai_fifo_depth = 4095, 83962306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 84062306a36Sopenharmony_ci .ai_speed = 800, 84162306a36Sopenharmony_ci .reg_type = ni_reg_625x, 84262306a36Sopenharmony_ci .caldac = { caldac_none }, 84362306a36Sopenharmony_ci }, 84462306a36Sopenharmony_ci [BOARD_PXI6250] = { 84562306a36Sopenharmony_ci .name = "pxi-6250", 84662306a36Sopenharmony_ci .n_adchan = 16, 84762306a36Sopenharmony_ci .ai_maxdata = 0xffff, 84862306a36Sopenharmony_ci .ai_fifo_depth = 4095, 84962306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 85062306a36Sopenharmony_ci .ai_speed = 800, 85162306a36Sopenharmony_ci .reg_type = ni_reg_625x, 85262306a36Sopenharmony_ci .caldac = { caldac_none }, 85362306a36Sopenharmony_ci .dio_speed = 100, 85462306a36Sopenharmony_ci }, 85562306a36Sopenharmony_ci [BOARD_PCI6251] = { 85662306a36Sopenharmony_ci .name = "pci-6251", 85762306a36Sopenharmony_ci .n_adchan = 16, 85862306a36Sopenharmony_ci .ai_maxdata = 0xffff, 85962306a36Sopenharmony_ci .ai_fifo_depth = 4095, 86062306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 86162306a36Sopenharmony_ci .ai_speed = 800, 86262306a36Sopenharmony_ci .n_aochan = 2, 86362306a36Sopenharmony_ci .ao_maxdata = 0xffff, 86462306a36Sopenharmony_ci .ao_fifo_depth = 8191, 86562306a36Sopenharmony_ci .ao_range_table = &range_ni_M_625x_ao, 86662306a36Sopenharmony_ci .reg_type = ni_reg_625x, 86762306a36Sopenharmony_ci .ao_speed = 350, 86862306a36Sopenharmony_ci .caldac = { caldac_none }, 86962306a36Sopenharmony_ci .dio_speed = 100, 87062306a36Sopenharmony_ci }, 87162306a36Sopenharmony_ci [BOARD_PXI6251] = { 87262306a36Sopenharmony_ci .name = "pxi-6251", 87362306a36Sopenharmony_ci .n_adchan = 16, 87462306a36Sopenharmony_ci .ai_maxdata = 0xffff, 87562306a36Sopenharmony_ci .ai_fifo_depth = 4095, 87662306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 87762306a36Sopenharmony_ci .ai_speed = 800, 87862306a36Sopenharmony_ci .n_aochan = 2, 87962306a36Sopenharmony_ci .ao_maxdata = 0xffff, 88062306a36Sopenharmony_ci .ao_fifo_depth = 8191, 88162306a36Sopenharmony_ci .ao_range_table = &range_ni_M_625x_ao, 88262306a36Sopenharmony_ci .reg_type = ni_reg_625x, 88362306a36Sopenharmony_ci .ao_speed = 350, 88462306a36Sopenharmony_ci .caldac = { caldac_none }, 88562306a36Sopenharmony_ci .dio_speed = 100, 88662306a36Sopenharmony_ci }, 88762306a36Sopenharmony_ci [BOARD_PCIE6251] = { 88862306a36Sopenharmony_ci .name = "pcie-6251", 88962306a36Sopenharmony_ci .alt_route_name = "pci-6251", 89062306a36Sopenharmony_ci .n_adchan = 16, 89162306a36Sopenharmony_ci .ai_maxdata = 0xffff, 89262306a36Sopenharmony_ci .ai_fifo_depth = 4095, 89362306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 89462306a36Sopenharmony_ci .ai_speed = 800, 89562306a36Sopenharmony_ci .n_aochan = 2, 89662306a36Sopenharmony_ci .ao_maxdata = 0xffff, 89762306a36Sopenharmony_ci .ao_fifo_depth = 8191, 89862306a36Sopenharmony_ci .ao_range_table = &range_ni_M_625x_ao, 89962306a36Sopenharmony_ci .reg_type = ni_reg_625x, 90062306a36Sopenharmony_ci .ao_speed = 350, 90162306a36Sopenharmony_ci .caldac = { caldac_none }, 90262306a36Sopenharmony_ci .dio_speed = 100, 90362306a36Sopenharmony_ci }, 90462306a36Sopenharmony_ci [BOARD_PXIE6251] = { 90562306a36Sopenharmony_ci .name = "pxie-6251", 90662306a36Sopenharmony_ci .n_adchan = 16, 90762306a36Sopenharmony_ci .ai_maxdata = 0xffff, 90862306a36Sopenharmony_ci .ai_fifo_depth = 4095, 90962306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 91062306a36Sopenharmony_ci .ai_speed = 800, 91162306a36Sopenharmony_ci .n_aochan = 2, 91262306a36Sopenharmony_ci .ao_maxdata = 0xffff, 91362306a36Sopenharmony_ci .ao_fifo_depth = 8191, 91462306a36Sopenharmony_ci .ao_range_table = &range_ni_M_625x_ao, 91562306a36Sopenharmony_ci .reg_type = ni_reg_625x, 91662306a36Sopenharmony_ci .ao_speed = 350, 91762306a36Sopenharmony_ci .caldac = { caldac_none }, 91862306a36Sopenharmony_ci .dio_speed = 100, 91962306a36Sopenharmony_ci }, 92062306a36Sopenharmony_ci [BOARD_PCI6254] = { 92162306a36Sopenharmony_ci .name = "pci-6254", 92262306a36Sopenharmony_ci .n_adchan = 32, 92362306a36Sopenharmony_ci .ai_maxdata = 0xffff, 92462306a36Sopenharmony_ci .ai_fifo_depth = 4095, 92562306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 92662306a36Sopenharmony_ci .ai_speed = 800, 92762306a36Sopenharmony_ci .reg_type = ni_reg_625x, 92862306a36Sopenharmony_ci .has_32dio_chan = 1, 92962306a36Sopenharmony_ci .caldac = { caldac_none }, 93062306a36Sopenharmony_ci }, 93162306a36Sopenharmony_ci [BOARD_PXI6254] = { 93262306a36Sopenharmony_ci .name = "pxi-6254", 93362306a36Sopenharmony_ci .n_adchan = 32, 93462306a36Sopenharmony_ci .ai_maxdata = 0xffff, 93562306a36Sopenharmony_ci .ai_fifo_depth = 4095, 93662306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 93762306a36Sopenharmony_ci .ai_speed = 800, 93862306a36Sopenharmony_ci .reg_type = ni_reg_625x, 93962306a36Sopenharmony_ci .has_32dio_chan = 1, 94062306a36Sopenharmony_ci .caldac = { caldac_none }, 94162306a36Sopenharmony_ci .dio_speed = 100, 94262306a36Sopenharmony_ci }, 94362306a36Sopenharmony_ci [BOARD_PCI6259] = { 94462306a36Sopenharmony_ci .name = "pci-6259", 94562306a36Sopenharmony_ci .n_adchan = 32, 94662306a36Sopenharmony_ci .ai_maxdata = 0xffff, 94762306a36Sopenharmony_ci .ai_fifo_depth = 4095, 94862306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 94962306a36Sopenharmony_ci .ai_speed = 800, 95062306a36Sopenharmony_ci .n_aochan = 4, 95162306a36Sopenharmony_ci .ao_maxdata = 0xffff, 95262306a36Sopenharmony_ci .ao_fifo_depth = 8191, 95362306a36Sopenharmony_ci .ao_range_table = &range_ni_M_625x_ao, 95462306a36Sopenharmony_ci .reg_type = ni_reg_625x, 95562306a36Sopenharmony_ci .ao_speed = 350, 95662306a36Sopenharmony_ci .has_32dio_chan = 1, 95762306a36Sopenharmony_ci .caldac = { caldac_none }, 95862306a36Sopenharmony_ci }, 95962306a36Sopenharmony_ci [BOARD_PXI6259] = { 96062306a36Sopenharmony_ci .name = "pxi-6259", 96162306a36Sopenharmony_ci .n_adchan = 32, 96262306a36Sopenharmony_ci .ai_maxdata = 0xffff, 96362306a36Sopenharmony_ci .ai_fifo_depth = 4095, 96462306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 96562306a36Sopenharmony_ci .ai_speed = 800, 96662306a36Sopenharmony_ci .n_aochan = 4, 96762306a36Sopenharmony_ci .ao_maxdata = 0xffff, 96862306a36Sopenharmony_ci .ao_fifo_depth = 8191, 96962306a36Sopenharmony_ci .ao_range_table = &range_ni_M_625x_ao, 97062306a36Sopenharmony_ci .reg_type = ni_reg_625x, 97162306a36Sopenharmony_ci .ao_speed = 350, 97262306a36Sopenharmony_ci .has_32dio_chan = 1, 97362306a36Sopenharmony_ci .caldac = { caldac_none }, 97462306a36Sopenharmony_ci .dio_speed = 100, 97562306a36Sopenharmony_ci }, 97662306a36Sopenharmony_ci [BOARD_PCIE6259] = { 97762306a36Sopenharmony_ci .name = "pcie-6259", 97862306a36Sopenharmony_ci .alt_route_name = "pci-6259", 97962306a36Sopenharmony_ci .n_adchan = 32, 98062306a36Sopenharmony_ci .ai_maxdata = 0xffff, 98162306a36Sopenharmony_ci .ai_fifo_depth = 4095, 98262306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 98362306a36Sopenharmony_ci .ai_speed = 800, 98462306a36Sopenharmony_ci .n_aochan = 4, 98562306a36Sopenharmony_ci .ao_maxdata = 0xffff, 98662306a36Sopenharmony_ci .ao_fifo_depth = 8191, 98762306a36Sopenharmony_ci .ao_range_table = &range_ni_M_625x_ao, 98862306a36Sopenharmony_ci .reg_type = ni_reg_625x, 98962306a36Sopenharmony_ci .ao_speed = 350, 99062306a36Sopenharmony_ci .has_32dio_chan = 1, 99162306a36Sopenharmony_ci .caldac = { caldac_none }, 99262306a36Sopenharmony_ci }, 99362306a36Sopenharmony_ci [BOARD_PXIE6259] = { 99462306a36Sopenharmony_ci .name = "pxie-6259", 99562306a36Sopenharmony_ci .n_adchan = 32, 99662306a36Sopenharmony_ci .ai_maxdata = 0xffff, 99762306a36Sopenharmony_ci .ai_fifo_depth = 4095, 99862306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 99962306a36Sopenharmony_ci .ai_speed = 800, 100062306a36Sopenharmony_ci .n_aochan = 4, 100162306a36Sopenharmony_ci .ao_maxdata = 0xffff, 100262306a36Sopenharmony_ci .ao_fifo_depth = 8191, 100362306a36Sopenharmony_ci .ao_range_table = &range_ni_M_625x_ao, 100462306a36Sopenharmony_ci .reg_type = ni_reg_625x, 100562306a36Sopenharmony_ci .ao_speed = 350, 100662306a36Sopenharmony_ci .has_32dio_chan = 1, 100762306a36Sopenharmony_ci .caldac = { caldac_none }, 100862306a36Sopenharmony_ci .dio_speed = 100, 100962306a36Sopenharmony_ci }, 101062306a36Sopenharmony_ci [BOARD_PCI6280] = { 101162306a36Sopenharmony_ci .name = "pci-6280", 101262306a36Sopenharmony_ci .n_adchan = 16, 101362306a36Sopenharmony_ci .ai_maxdata = 0x3ffff, 101462306a36Sopenharmony_ci .ai_fifo_depth = 2047, 101562306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 101662306a36Sopenharmony_ci .ai_speed = 1600, 101762306a36Sopenharmony_ci .ao_fifo_depth = 8191, 101862306a36Sopenharmony_ci .reg_type = ni_reg_628x, 101962306a36Sopenharmony_ci .caldac = { caldac_none }, 102062306a36Sopenharmony_ci }, 102162306a36Sopenharmony_ci [BOARD_PXI6280] = { 102262306a36Sopenharmony_ci .name = "pxi-6280", 102362306a36Sopenharmony_ci .n_adchan = 16, 102462306a36Sopenharmony_ci .ai_maxdata = 0x3ffff, 102562306a36Sopenharmony_ci .ai_fifo_depth = 2047, 102662306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 102762306a36Sopenharmony_ci .ai_speed = 1600, 102862306a36Sopenharmony_ci .ao_fifo_depth = 8191, 102962306a36Sopenharmony_ci .reg_type = ni_reg_628x, 103062306a36Sopenharmony_ci .caldac = { caldac_none }, 103162306a36Sopenharmony_ci .dio_speed = 100, 103262306a36Sopenharmony_ci }, 103362306a36Sopenharmony_ci [BOARD_PCI6281] = { 103462306a36Sopenharmony_ci .name = "pci-6281", 103562306a36Sopenharmony_ci .n_adchan = 16, 103662306a36Sopenharmony_ci .ai_maxdata = 0x3ffff, 103762306a36Sopenharmony_ci .ai_fifo_depth = 2047, 103862306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 103962306a36Sopenharmony_ci .ai_speed = 1600, 104062306a36Sopenharmony_ci .n_aochan = 2, 104162306a36Sopenharmony_ci .ao_maxdata = 0xffff, 104262306a36Sopenharmony_ci .ao_fifo_depth = 8191, 104362306a36Sopenharmony_ci .ao_range_table = &range_ni_M_628x_ao, 104462306a36Sopenharmony_ci .reg_type = ni_reg_628x, 104562306a36Sopenharmony_ci .ao_speed = 350, 104662306a36Sopenharmony_ci .caldac = { caldac_none }, 104762306a36Sopenharmony_ci .dio_speed = 100, 104862306a36Sopenharmony_ci }, 104962306a36Sopenharmony_ci [BOARD_PXI6281] = { 105062306a36Sopenharmony_ci .name = "pxi-6281", 105162306a36Sopenharmony_ci .n_adchan = 16, 105262306a36Sopenharmony_ci .ai_maxdata = 0x3ffff, 105362306a36Sopenharmony_ci .ai_fifo_depth = 2047, 105462306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 105562306a36Sopenharmony_ci .ai_speed = 1600, 105662306a36Sopenharmony_ci .n_aochan = 2, 105762306a36Sopenharmony_ci .ao_maxdata = 0xffff, 105862306a36Sopenharmony_ci .ao_fifo_depth = 8191, 105962306a36Sopenharmony_ci .ao_range_table = &range_ni_M_628x_ao, 106062306a36Sopenharmony_ci .reg_type = ni_reg_628x, 106162306a36Sopenharmony_ci .ao_speed = 350, 106262306a36Sopenharmony_ci .caldac = { caldac_none }, 106362306a36Sopenharmony_ci .dio_speed = 100, 106462306a36Sopenharmony_ci }, 106562306a36Sopenharmony_ci [BOARD_PCI6284] = { 106662306a36Sopenharmony_ci .name = "pci-6284", 106762306a36Sopenharmony_ci .n_adchan = 32, 106862306a36Sopenharmony_ci .ai_maxdata = 0x3ffff, 106962306a36Sopenharmony_ci .ai_fifo_depth = 2047, 107062306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 107162306a36Sopenharmony_ci .ai_speed = 1600, 107262306a36Sopenharmony_ci .reg_type = ni_reg_628x, 107362306a36Sopenharmony_ci .has_32dio_chan = 1, 107462306a36Sopenharmony_ci .caldac = { caldac_none }, 107562306a36Sopenharmony_ci }, 107662306a36Sopenharmony_ci [BOARD_PXI6284] = { 107762306a36Sopenharmony_ci .name = "pxi-6284", 107862306a36Sopenharmony_ci .n_adchan = 32, 107962306a36Sopenharmony_ci .ai_maxdata = 0x3ffff, 108062306a36Sopenharmony_ci .ai_fifo_depth = 2047, 108162306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 108262306a36Sopenharmony_ci .ai_speed = 1600, 108362306a36Sopenharmony_ci .reg_type = ni_reg_628x, 108462306a36Sopenharmony_ci .has_32dio_chan = 1, 108562306a36Sopenharmony_ci .caldac = { caldac_none }, 108662306a36Sopenharmony_ci .dio_speed = 100, 108762306a36Sopenharmony_ci }, 108862306a36Sopenharmony_ci [BOARD_PCI6289] = { 108962306a36Sopenharmony_ci .name = "pci-6289", 109062306a36Sopenharmony_ci .n_adchan = 32, 109162306a36Sopenharmony_ci .ai_maxdata = 0x3ffff, 109262306a36Sopenharmony_ci .ai_fifo_depth = 2047, 109362306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 109462306a36Sopenharmony_ci .ai_speed = 1600, 109562306a36Sopenharmony_ci .n_aochan = 4, 109662306a36Sopenharmony_ci .ao_maxdata = 0xffff, 109762306a36Sopenharmony_ci .ao_fifo_depth = 8191, 109862306a36Sopenharmony_ci .ao_range_table = &range_ni_M_628x_ao, 109962306a36Sopenharmony_ci .reg_type = ni_reg_628x, 110062306a36Sopenharmony_ci .ao_speed = 350, 110162306a36Sopenharmony_ci .has_32dio_chan = 1, 110262306a36Sopenharmony_ci .caldac = { caldac_none }, 110362306a36Sopenharmony_ci }, 110462306a36Sopenharmony_ci [BOARD_PXI6289] = { 110562306a36Sopenharmony_ci .name = "pxi-6289", 110662306a36Sopenharmony_ci .n_adchan = 32, 110762306a36Sopenharmony_ci .ai_maxdata = 0x3ffff, 110862306a36Sopenharmony_ci .ai_fifo_depth = 2047, 110962306a36Sopenharmony_ci .gainlkup = ai_gain_628x, 111062306a36Sopenharmony_ci .ai_speed = 1600, 111162306a36Sopenharmony_ci .n_aochan = 4, 111262306a36Sopenharmony_ci .ao_maxdata = 0xffff, 111362306a36Sopenharmony_ci .ao_fifo_depth = 8191, 111462306a36Sopenharmony_ci .ao_range_table = &range_ni_M_628x_ao, 111562306a36Sopenharmony_ci .reg_type = ni_reg_628x, 111662306a36Sopenharmony_ci .ao_speed = 350, 111762306a36Sopenharmony_ci .has_32dio_chan = 1, 111862306a36Sopenharmony_ci .caldac = { caldac_none }, 111962306a36Sopenharmony_ci .dio_speed = 100, 112062306a36Sopenharmony_ci }, 112162306a36Sopenharmony_ci [BOARD_PCI6143] = { 112262306a36Sopenharmony_ci .name = "pci-6143", 112362306a36Sopenharmony_ci .n_adchan = 8, 112462306a36Sopenharmony_ci .ai_maxdata = 0xffff, 112562306a36Sopenharmony_ci .ai_fifo_depth = 1024, 112662306a36Sopenharmony_ci .gainlkup = ai_gain_6143, 112762306a36Sopenharmony_ci .ai_speed = 4000, 112862306a36Sopenharmony_ci .reg_type = ni_reg_6143, 112962306a36Sopenharmony_ci .caldac = { ad8804_debug, ad8804_debug }, 113062306a36Sopenharmony_ci }, 113162306a36Sopenharmony_ci [BOARD_PXI6143] = { 113262306a36Sopenharmony_ci .name = "pxi-6143", 113362306a36Sopenharmony_ci .n_adchan = 8, 113462306a36Sopenharmony_ci .ai_maxdata = 0xffff, 113562306a36Sopenharmony_ci .ai_fifo_depth = 1024, 113662306a36Sopenharmony_ci .gainlkup = ai_gain_6143, 113762306a36Sopenharmony_ci .ai_speed = 4000, 113862306a36Sopenharmony_ci .reg_type = ni_reg_6143, 113962306a36Sopenharmony_ci .caldac = { ad8804_debug, ad8804_debug }, 114062306a36Sopenharmony_ci }, 114162306a36Sopenharmony_ci}; 114262306a36Sopenharmony_ci 114362306a36Sopenharmony_ci#include "ni_mio_common.c" 114462306a36Sopenharmony_ci 114562306a36Sopenharmony_cistatic int pcimio_ai_change(struct comedi_device *dev, 114662306a36Sopenharmony_ci struct comedi_subdevice *s) 114762306a36Sopenharmony_ci{ 114862306a36Sopenharmony_ci struct ni_private *devpriv = dev->private; 114962306a36Sopenharmony_ci int ret; 115062306a36Sopenharmony_ci 115162306a36Sopenharmony_ci ret = mite_buf_change(devpriv->ai_mite_ring, s); 115262306a36Sopenharmony_ci if (ret < 0) 115362306a36Sopenharmony_ci return ret; 115462306a36Sopenharmony_ci 115562306a36Sopenharmony_ci return 0; 115662306a36Sopenharmony_ci} 115762306a36Sopenharmony_ci 115862306a36Sopenharmony_cistatic int pcimio_ao_change(struct comedi_device *dev, 115962306a36Sopenharmony_ci struct comedi_subdevice *s) 116062306a36Sopenharmony_ci{ 116162306a36Sopenharmony_ci struct ni_private *devpriv = dev->private; 116262306a36Sopenharmony_ci int ret; 116362306a36Sopenharmony_ci 116462306a36Sopenharmony_ci ret = mite_buf_change(devpriv->ao_mite_ring, s); 116562306a36Sopenharmony_ci if (ret < 0) 116662306a36Sopenharmony_ci return ret; 116762306a36Sopenharmony_ci 116862306a36Sopenharmony_ci return 0; 116962306a36Sopenharmony_ci} 117062306a36Sopenharmony_ci 117162306a36Sopenharmony_cistatic int pcimio_gpct0_change(struct comedi_device *dev, 117262306a36Sopenharmony_ci struct comedi_subdevice *s) 117362306a36Sopenharmony_ci{ 117462306a36Sopenharmony_ci struct ni_private *devpriv = dev->private; 117562306a36Sopenharmony_ci int ret; 117662306a36Sopenharmony_ci 117762306a36Sopenharmony_ci ret = mite_buf_change(devpriv->gpct_mite_ring[0], s); 117862306a36Sopenharmony_ci if (ret < 0) 117962306a36Sopenharmony_ci return ret; 118062306a36Sopenharmony_ci 118162306a36Sopenharmony_ci return 0; 118262306a36Sopenharmony_ci} 118362306a36Sopenharmony_ci 118462306a36Sopenharmony_cistatic int pcimio_gpct1_change(struct comedi_device *dev, 118562306a36Sopenharmony_ci struct comedi_subdevice *s) 118662306a36Sopenharmony_ci{ 118762306a36Sopenharmony_ci struct ni_private *devpriv = dev->private; 118862306a36Sopenharmony_ci int ret; 118962306a36Sopenharmony_ci 119062306a36Sopenharmony_ci ret = mite_buf_change(devpriv->gpct_mite_ring[1], s); 119162306a36Sopenharmony_ci if (ret < 0) 119262306a36Sopenharmony_ci return ret; 119362306a36Sopenharmony_ci 119462306a36Sopenharmony_ci return 0; 119562306a36Sopenharmony_ci} 119662306a36Sopenharmony_ci 119762306a36Sopenharmony_cistatic int pcimio_dio_change(struct comedi_device *dev, 119862306a36Sopenharmony_ci struct comedi_subdevice *s) 119962306a36Sopenharmony_ci{ 120062306a36Sopenharmony_ci struct ni_private *devpriv = dev->private; 120162306a36Sopenharmony_ci int ret; 120262306a36Sopenharmony_ci 120362306a36Sopenharmony_ci ret = mite_buf_change(devpriv->cdo_mite_ring, s); 120462306a36Sopenharmony_ci if (ret < 0) 120562306a36Sopenharmony_ci return ret; 120662306a36Sopenharmony_ci 120762306a36Sopenharmony_ci return 0; 120862306a36Sopenharmony_ci} 120962306a36Sopenharmony_ci 121062306a36Sopenharmony_cistatic void m_series_init_eeprom_buffer(struct comedi_device *dev) 121162306a36Sopenharmony_ci{ 121262306a36Sopenharmony_ci struct ni_private *devpriv = dev->private; 121362306a36Sopenharmony_ci struct mite *mite = devpriv->mite; 121462306a36Sopenharmony_ci resource_size_t daq_phys_addr; 121562306a36Sopenharmony_ci static const int start_cal_eeprom = 0x400; 121662306a36Sopenharmony_ci static const unsigned int window_size = 10; 121762306a36Sopenharmony_ci unsigned int old_iodwbsr_bits; 121862306a36Sopenharmony_ci unsigned int old_iodwbsr1_bits; 121962306a36Sopenharmony_ci unsigned int old_iodwcr1_bits; 122062306a36Sopenharmony_ci int i; 122162306a36Sopenharmony_ci 122262306a36Sopenharmony_ci /* IO Window 1 needs to be temporarily mapped to read the eeprom */ 122362306a36Sopenharmony_ci daq_phys_addr = pci_resource_start(mite->pcidev, 1); 122462306a36Sopenharmony_ci 122562306a36Sopenharmony_ci old_iodwbsr_bits = readl(mite->mmio + MITE_IODWBSR); 122662306a36Sopenharmony_ci old_iodwbsr1_bits = readl(mite->mmio + MITE_IODWBSR_1); 122762306a36Sopenharmony_ci old_iodwcr1_bits = readl(mite->mmio + MITE_IODWCR_1); 122862306a36Sopenharmony_ci writel(0x0, mite->mmio + MITE_IODWBSR); 122962306a36Sopenharmony_ci writel(((0x80 | window_size) | daq_phys_addr), 123062306a36Sopenharmony_ci mite->mmio + MITE_IODWBSR_1); 123162306a36Sopenharmony_ci writel(0x1 | old_iodwcr1_bits, mite->mmio + MITE_IODWCR_1); 123262306a36Sopenharmony_ci writel(0xf, mite->mmio + 0x30); 123362306a36Sopenharmony_ci 123462306a36Sopenharmony_ci for (i = 0; i < M_SERIES_EEPROM_SIZE; ++i) 123562306a36Sopenharmony_ci devpriv->eeprom_buffer[i] = ni_readb(dev, start_cal_eeprom + i); 123662306a36Sopenharmony_ci 123762306a36Sopenharmony_ci writel(old_iodwbsr1_bits, mite->mmio + MITE_IODWBSR_1); 123862306a36Sopenharmony_ci writel(old_iodwbsr_bits, mite->mmio + MITE_IODWBSR); 123962306a36Sopenharmony_ci writel(old_iodwcr1_bits, mite->mmio + MITE_IODWCR_1); 124062306a36Sopenharmony_ci writel(0x0, mite->mmio + 0x30); 124162306a36Sopenharmony_ci} 124262306a36Sopenharmony_ci 124362306a36Sopenharmony_cistatic void init_6143(struct comedi_device *dev) 124462306a36Sopenharmony_ci{ 124562306a36Sopenharmony_ci const struct ni_board_struct *board = dev->board_ptr; 124662306a36Sopenharmony_ci struct ni_private *devpriv = dev->private; 124762306a36Sopenharmony_ci 124862306a36Sopenharmony_ci /* Disable interrupts */ 124962306a36Sopenharmony_ci ni_stc_writew(dev, 0, NISTC_INT_CTRL_REG); 125062306a36Sopenharmony_ci 125162306a36Sopenharmony_ci /* Initialise 6143 AI specific bits */ 125262306a36Sopenharmony_ci 125362306a36Sopenharmony_ci /* Set G0,G1 DMA mode to E series version */ 125462306a36Sopenharmony_ci ni_writeb(dev, 0x00, NI6143_MAGIC_REG); 125562306a36Sopenharmony_ci /* Set EOCMode, ADCMode and pipelinedelay */ 125662306a36Sopenharmony_ci ni_writeb(dev, 0x80, NI6143_PIPELINE_DELAY_REG); 125762306a36Sopenharmony_ci /* Set EOC Delay */ 125862306a36Sopenharmony_ci ni_writeb(dev, 0x00, NI6143_EOC_SET_REG); 125962306a36Sopenharmony_ci 126062306a36Sopenharmony_ci /* Set the FIFO half full level */ 126162306a36Sopenharmony_ci ni_writel(dev, board->ai_fifo_depth / 2, NI6143_AI_FIFO_FLAG_REG); 126262306a36Sopenharmony_ci 126362306a36Sopenharmony_ci /* Strobe Relay disable bit */ 126462306a36Sopenharmony_ci devpriv->ai_calib_source_enabled = 0; 126562306a36Sopenharmony_ci ni_writew(dev, devpriv->ai_calib_source | NI6143_CALIB_CHAN_RELAY_OFF, 126662306a36Sopenharmony_ci NI6143_CALIB_CHAN_REG); 126762306a36Sopenharmony_ci ni_writew(dev, devpriv->ai_calib_source, NI6143_CALIB_CHAN_REG); 126862306a36Sopenharmony_ci} 126962306a36Sopenharmony_ci 127062306a36Sopenharmony_cistatic void pcimio_detach(struct comedi_device *dev) 127162306a36Sopenharmony_ci{ 127262306a36Sopenharmony_ci struct ni_private *devpriv = dev->private; 127362306a36Sopenharmony_ci 127462306a36Sopenharmony_ci mio_common_detach(dev); 127562306a36Sopenharmony_ci if (dev->irq) 127662306a36Sopenharmony_ci free_irq(dev->irq, dev); 127762306a36Sopenharmony_ci if (devpriv) { 127862306a36Sopenharmony_ci mite_free_ring(devpriv->ai_mite_ring); 127962306a36Sopenharmony_ci mite_free_ring(devpriv->ao_mite_ring); 128062306a36Sopenharmony_ci mite_free_ring(devpriv->cdo_mite_ring); 128162306a36Sopenharmony_ci mite_free_ring(devpriv->gpct_mite_ring[0]); 128262306a36Sopenharmony_ci mite_free_ring(devpriv->gpct_mite_ring[1]); 128362306a36Sopenharmony_ci mite_detach(devpriv->mite); 128462306a36Sopenharmony_ci } 128562306a36Sopenharmony_ci if (dev->mmio) 128662306a36Sopenharmony_ci iounmap(dev->mmio); 128762306a36Sopenharmony_ci comedi_pci_disable(dev); 128862306a36Sopenharmony_ci} 128962306a36Sopenharmony_ci 129062306a36Sopenharmony_cistatic int pcimio_auto_attach(struct comedi_device *dev, 129162306a36Sopenharmony_ci unsigned long context) 129262306a36Sopenharmony_ci{ 129362306a36Sopenharmony_ci struct pci_dev *pcidev = comedi_to_pci_dev(dev); 129462306a36Sopenharmony_ci const struct ni_board_struct *board = NULL; 129562306a36Sopenharmony_ci struct ni_private *devpriv; 129662306a36Sopenharmony_ci unsigned int irq; 129762306a36Sopenharmony_ci int ret; 129862306a36Sopenharmony_ci 129962306a36Sopenharmony_ci if (context < ARRAY_SIZE(ni_boards)) 130062306a36Sopenharmony_ci board = &ni_boards[context]; 130162306a36Sopenharmony_ci if (!board) 130262306a36Sopenharmony_ci return -ENODEV; 130362306a36Sopenharmony_ci dev->board_ptr = board; 130462306a36Sopenharmony_ci dev->board_name = board->name; 130562306a36Sopenharmony_ci 130662306a36Sopenharmony_ci ret = comedi_pci_enable(dev); 130762306a36Sopenharmony_ci if (ret) 130862306a36Sopenharmony_ci return ret; 130962306a36Sopenharmony_ci 131062306a36Sopenharmony_ci ret = ni_alloc_private(dev); 131162306a36Sopenharmony_ci if (ret) 131262306a36Sopenharmony_ci return ret; 131362306a36Sopenharmony_ci devpriv = dev->private; 131462306a36Sopenharmony_ci 131562306a36Sopenharmony_ci devpriv->mite = mite_attach(dev, false); /* use win0 */ 131662306a36Sopenharmony_ci if (!devpriv->mite) 131762306a36Sopenharmony_ci return -ENOMEM; 131862306a36Sopenharmony_ci 131962306a36Sopenharmony_ci if (board->reg_type & ni_reg_m_series_mask) 132062306a36Sopenharmony_ci devpriv->is_m_series = 1; 132162306a36Sopenharmony_ci if (board->reg_type & ni_reg_6xxx_mask) 132262306a36Sopenharmony_ci devpriv->is_6xxx = 1; 132362306a36Sopenharmony_ci if (board->reg_type == ni_reg_611x) 132462306a36Sopenharmony_ci devpriv->is_611x = 1; 132562306a36Sopenharmony_ci if (board->reg_type == ni_reg_6143) 132662306a36Sopenharmony_ci devpriv->is_6143 = 1; 132762306a36Sopenharmony_ci if (board->reg_type == ni_reg_622x) 132862306a36Sopenharmony_ci devpriv->is_622x = 1; 132962306a36Sopenharmony_ci if (board->reg_type == ni_reg_625x) 133062306a36Sopenharmony_ci devpriv->is_625x = 1; 133162306a36Sopenharmony_ci if (board->reg_type == ni_reg_628x) 133262306a36Sopenharmony_ci devpriv->is_628x = 1; 133362306a36Sopenharmony_ci if (board->reg_type & ni_reg_67xx_mask) 133462306a36Sopenharmony_ci devpriv->is_67xx = 1; 133562306a36Sopenharmony_ci if (board->reg_type == ni_reg_6711) 133662306a36Sopenharmony_ci devpriv->is_6711 = 1; 133762306a36Sopenharmony_ci if (board->reg_type == ni_reg_6713) 133862306a36Sopenharmony_ci devpriv->is_6713 = 1; 133962306a36Sopenharmony_ci 134062306a36Sopenharmony_ci devpriv->ai_mite_ring = mite_alloc_ring(devpriv->mite); 134162306a36Sopenharmony_ci if (!devpriv->ai_mite_ring) 134262306a36Sopenharmony_ci return -ENOMEM; 134362306a36Sopenharmony_ci devpriv->ao_mite_ring = mite_alloc_ring(devpriv->mite); 134462306a36Sopenharmony_ci if (!devpriv->ao_mite_ring) 134562306a36Sopenharmony_ci return -ENOMEM; 134662306a36Sopenharmony_ci devpriv->cdo_mite_ring = mite_alloc_ring(devpriv->mite); 134762306a36Sopenharmony_ci if (!devpriv->cdo_mite_ring) 134862306a36Sopenharmony_ci return -ENOMEM; 134962306a36Sopenharmony_ci devpriv->gpct_mite_ring[0] = mite_alloc_ring(devpriv->mite); 135062306a36Sopenharmony_ci if (!devpriv->gpct_mite_ring[0]) 135162306a36Sopenharmony_ci return -ENOMEM; 135262306a36Sopenharmony_ci devpriv->gpct_mite_ring[1] = mite_alloc_ring(devpriv->mite); 135362306a36Sopenharmony_ci if (!devpriv->gpct_mite_ring[1]) 135462306a36Sopenharmony_ci return -ENOMEM; 135562306a36Sopenharmony_ci 135662306a36Sopenharmony_ci if (devpriv->is_m_series) 135762306a36Sopenharmony_ci m_series_init_eeprom_buffer(dev); 135862306a36Sopenharmony_ci if (devpriv->is_6143) 135962306a36Sopenharmony_ci init_6143(dev); 136062306a36Sopenharmony_ci 136162306a36Sopenharmony_ci irq = pcidev->irq; 136262306a36Sopenharmony_ci if (irq) { 136362306a36Sopenharmony_ci ret = request_irq(irq, ni_E_interrupt, IRQF_SHARED, 136462306a36Sopenharmony_ci dev->board_name, dev); 136562306a36Sopenharmony_ci if (ret == 0) 136662306a36Sopenharmony_ci dev->irq = irq; 136762306a36Sopenharmony_ci } 136862306a36Sopenharmony_ci 136962306a36Sopenharmony_ci ret = ni_E_init(dev, 0, 1); 137062306a36Sopenharmony_ci if (ret < 0) 137162306a36Sopenharmony_ci return ret; 137262306a36Sopenharmony_ci 137362306a36Sopenharmony_ci dev->subdevices[NI_AI_SUBDEV].buf_change = &pcimio_ai_change; 137462306a36Sopenharmony_ci dev->subdevices[NI_AO_SUBDEV].buf_change = &pcimio_ao_change; 137562306a36Sopenharmony_ci dev->subdevices[NI_GPCT_SUBDEV(0)].buf_change = &pcimio_gpct0_change; 137662306a36Sopenharmony_ci dev->subdevices[NI_GPCT_SUBDEV(1)].buf_change = &pcimio_gpct1_change; 137762306a36Sopenharmony_ci dev->subdevices[NI_DIO_SUBDEV].buf_change = &pcimio_dio_change; 137862306a36Sopenharmony_ci 137962306a36Sopenharmony_ci return 0; 138062306a36Sopenharmony_ci} 138162306a36Sopenharmony_ci 138262306a36Sopenharmony_cistatic struct comedi_driver ni_pcimio_driver = { 138362306a36Sopenharmony_ci .driver_name = "ni_pcimio", 138462306a36Sopenharmony_ci .module = THIS_MODULE, 138562306a36Sopenharmony_ci .auto_attach = pcimio_auto_attach, 138662306a36Sopenharmony_ci .detach = pcimio_detach, 138762306a36Sopenharmony_ci}; 138862306a36Sopenharmony_ci 138962306a36Sopenharmony_cistatic int ni_pcimio_pci_probe(struct pci_dev *dev, 139062306a36Sopenharmony_ci const struct pci_device_id *id) 139162306a36Sopenharmony_ci{ 139262306a36Sopenharmony_ci return comedi_pci_auto_config(dev, &ni_pcimio_driver, id->driver_data); 139362306a36Sopenharmony_ci} 139462306a36Sopenharmony_ci 139562306a36Sopenharmony_cistatic const struct pci_device_id ni_pcimio_pci_table[] = { 139662306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x0162), BOARD_PCIMIO_16XE_50 }, /* 0x1620? */ 139762306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x1170), BOARD_PCIMIO_16XE_10 }, 139862306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x1180), BOARD_PCIMIO_16E_1 }, 139962306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x1190), BOARD_PCIMIO_16E_4 }, 140062306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x11b0), BOARD_PXI6070E }, 140162306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x11c0), BOARD_PXI6040E }, 140262306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x11d0), BOARD_PXI6030E }, 140362306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x1270), BOARD_PCI6032E }, 140462306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x1330), BOARD_PCI6031E }, 140562306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x1340), BOARD_PCI6033E }, 140662306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x1350), BOARD_PCI6071E }, 140762306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x14e0), BOARD_PCI6110 }, 140862306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x14f0), BOARD_PCI6111 }, 140962306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x1580), BOARD_PXI6031E }, 141062306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x15b0), BOARD_PXI6071E }, 141162306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x1880), BOARD_PCI6711 }, 141262306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x1870), BOARD_PCI6713 }, 141362306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x18b0), BOARD_PCI6052E }, 141462306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x18c0), BOARD_PXI6052E }, 141562306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x2410), BOARD_PCI6733 }, 141662306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x2420), BOARD_PXI6733 }, 141762306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x2430), BOARD_PCI6731 }, 141862306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x2890), BOARD_PCI6036E }, 141962306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x28c0), BOARD_PCI6014 }, 142062306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x2a60), BOARD_PCI6023E }, 142162306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x2a70), BOARD_PCI6024E }, 142262306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x2a80), BOARD_PCI6025E }, 142362306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x2ab0), BOARD_PXI6025E }, 142462306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x2b80), BOARD_PXI6713 }, 142562306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x2b90), BOARD_PXI6711 }, 142662306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x2c80), BOARD_PCI6035E }, 142762306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x2ca0), BOARD_PCI6034E }, 142862306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70aa), BOARD_PCI6229 }, 142962306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70ab), BOARD_PCI6259 }, 143062306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70ac), BOARD_PCI6289 }, 143162306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70ad), BOARD_PXI6251 }, 143262306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70ae), BOARD_PXI6220 }, 143362306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70af), BOARD_PCI6221 }, 143462306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70b0), BOARD_PCI6220 }, 143562306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70b1), BOARD_PXI6229 }, 143662306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70b2), BOARD_PXI6259 }, 143762306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70b3), BOARD_PXI6289 }, 143862306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70b4), BOARD_PCI6250 }, 143962306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70b5), BOARD_PXI6221 }, 144062306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70b6), BOARD_PCI6280 }, 144162306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70b7), BOARD_PCI6254 }, 144262306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70b8), BOARD_PCI6251 }, 144362306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70b9), BOARD_PXI6250 }, 144462306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70ba), BOARD_PXI6254 }, 144562306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70bb), BOARD_PXI6280 }, 144662306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70bc), BOARD_PCI6284 }, 144762306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70bd), BOARD_PCI6281 }, 144862306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70be), BOARD_PXI6284 }, 144962306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70bf), BOARD_PXI6281 }, 145062306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70c0), BOARD_PCI6143 }, 145162306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70f2), BOARD_PCI6224 }, 145262306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x70f3), BOARD_PXI6224 }, 145362306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x710d), BOARD_PXI6143 }, 145462306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x716c), BOARD_PCI6225 }, 145562306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x716d), BOARD_PXI6225 }, 145662306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x717d), BOARD_PCIE6251 }, 145762306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x717f), BOARD_PCIE6259 }, 145862306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x71bc), BOARD_PCI6221_37PIN }, 145962306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x72e8), BOARD_PXIE6251 }, 146062306a36Sopenharmony_ci { PCI_VDEVICE(NI, 0x72e9), BOARD_PXIE6259 }, 146162306a36Sopenharmony_ci { 0 } 146262306a36Sopenharmony_ci}; 146362306a36Sopenharmony_ciMODULE_DEVICE_TABLE(pci, ni_pcimio_pci_table); 146462306a36Sopenharmony_ci 146562306a36Sopenharmony_cistatic struct pci_driver ni_pcimio_pci_driver = { 146662306a36Sopenharmony_ci .name = "ni_pcimio", 146762306a36Sopenharmony_ci .id_table = ni_pcimio_pci_table, 146862306a36Sopenharmony_ci .probe = ni_pcimio_pci_probe, 146962306a36Sopenharmony_ci .remove = comedi_pci_auto_unconfig, 147062306a36Sopenharmony_ci}; 147162306a36Sopenharmony_cimodule_comedi_pci_driver(ni_pcimio_driver, ni_pcimio_pci_driver); 147262306a36Sopenharmony_ci 147362306a36Sopenharmony_ciMODULE_AUTHOR("Comedi https://www.comedi.org"); 147462306a36Sopenharmony_ciMODULE_DESCRIPTION("Comedi low-level driver"); 147562306a36Sopenharmony_ciMODULE_LICENSE("GPL"); 1476