addi_apci_3xxx.c revision 2107347327f7bfd47e6af9fe0510a1750f10f884
133782dd5edf8db3cdb7c81a3523bf743dd0209b7H Hartley Sweeten#include <linux/pci.h>
233782dd5edf8db3cdb7c81a3523bf743dd0209b7H Hartley Sweeten
33d41c44370a9a1e78e53c9997289347ec97d46eeH Hartley Sweeten#include "../comedidev.h"
43d41c44370a9a1e78e53c9997289347ec97d46eeH Hartley Sweeten#include "comedi_fc.h"
5bf36f012c7ddaff083bb0ef187feddf4d85507a0H Hartley Sweeten#include "amcc_s5933.h"
63d41c44370a9a1e78e53c9997289347ec97d46eeH Hartley Sweeten
73d41c44370a9a1e78e53c9997289347ec97d46eeH Hartley Sweeten#include "addi-data/addi_common.h"
83d41c44370a9a1e78e53c9997289347ec97d46eeH Hartley Sweeten
9bf6a1578c10a4f3ef94a3c744267f18f9c3642bdH Hartley Sweeten#include "addi-data/addi_eeprom.c"
10bf6a1578c10a4f3ef94a3c744267f18f9c3642bdH Hartley Sweeten#include "addi-data/hwdrv_apci3xxx.c"
1198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
1298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten#ifndef COMEDI_SUBD_TTLIO
1398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten#define COMEDI_SUBD_TTLIO   11	/* Digital Input Output But TTL */
1498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten#endif
15c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten
1698a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweetenstatic const struct comedi_lrange apci3xxx_ai_range = {
1798a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten	8, {
1898a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten		BIP_RANGE(10),
1998a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten		BIP_RANGE(5),
2098a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten		BIP_RANGE(2),
2198a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten		BIP_RANGE(1),
2298a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten		UNI_RANGE(10),
2398a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten		UNI_RANGE(5),
2498a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten		UNI_RANGE(2),
2598a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten		UNI_RANGE(1)
2698a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten	}
2798a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten};
2898a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten
2998a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweetenstatic const struct comedi_lrange apci3xxx_ao_range = {
3098a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten	2, {
3198a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten		BIP_RANGE(10),
3298a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten		UNI_RANGE(10)
3398a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten	}
3498a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten};
3598a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten
36dbae4575661da840353f12dd76499ad587c92519H Hartley Sweetenenum apci3xxx_boardid {
37dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3000_16,
38dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3000_8,
39dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3000_4,
40dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3006_16,
41dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3006_8,
42dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3006_4,
43dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3010_16,
44dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3010_8,
45dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3010_4,
46dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3016_16,
47dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3016_8,
48dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3016_4,
49dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3100_16_4,
50dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3100_8_4,
51dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3106_16_4,
52dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3106_8_4,
53dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3110_16_4,
54dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3110_8_4,
55dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3116_16_4,
56dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3116_8_4,
57dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3003,
58dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3002_16,
59dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3002_8,
60dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3002_4,
61dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	BOARD_APCI3500,
62dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten};
63dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten
6420a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenstatic const struct addi_board apci3xxx_boardtypes[] = {
65dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3000_16] = {
66c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3000-16",
67c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
68c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
69c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
70c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 16,
71c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 8,
72c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 16,
73c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 4095,
74c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
75c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
76c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 10000,
77c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
78c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
79c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
80c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
81c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
82c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
83dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
84dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3000_8] = {
85c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3000-8",
86c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
87c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
88c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
89c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 8,
90c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 4,
91c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 8,
92c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 4095,
93c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
94c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
95c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 10000,
96c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
97c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
98c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
99c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
100c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
101c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
102dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
103dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3000_4] = {
104c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3000-4",
105c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
106c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
107c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
108c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 4,
109c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 2,
110c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 4,
111c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 4095,
112c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
113c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
114c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 10000,
115c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
116c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
117c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
118c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
119c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
120c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
121dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
122dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3006_16] = {
123c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3006-16",
124c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
125c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
126c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
127c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 16,
128c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 8,
129c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 16,
130c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
131c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
132c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
133c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 10000,
134c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
135c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
136c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
137c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
138c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
139c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
140dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
141dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3006_8] = {
142c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3006-8",
143c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
144c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
145c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
146c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 8,
147c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 4,
148c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 8,
149c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
150c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
151c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
152c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 10000,
153c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
154c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
155c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
156c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
157c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
158c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
159dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
160dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3006_4] = {
161c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3006-4",
162c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
163c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
164c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
165c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 4,
166c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 2,
167c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 4,
168c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
169c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
170c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
171c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 10000,
172c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
173c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
174c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
175c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
176c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
177c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
178dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
179dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3010_16] = {
180c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3010-16",
181c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
182c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
183c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
184c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 16,
185c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 8,
186c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 16,
187c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 4095,
188c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
189c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
190c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
191c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
192c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
193c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 5000,
194c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
195c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
196c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
197c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
198c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
199c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
200dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
201dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3010_8] = {
202c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3010-8",
203c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
204c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
205c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
206c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 8,
207c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 4,
208c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 8,
209c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 4095,
210c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
211c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
212c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
213c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
214c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
215c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 5000,
216c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
217c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
218c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
219c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
220c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
221c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
222dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
223dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3010_4] = {
224c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3010-4",
225c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
226c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
227c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
228c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 4,
229c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 2,
230c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 4,
231c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 4095,
232c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
233c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
234c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
235c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
236c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
237c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 5000,
238c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
239c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
240c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
241c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
242c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
243c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
244dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
245dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3016_16] = {
246c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3016-16",
247c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
248c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
249c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
250c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 16,
251c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 8,
252c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 16,
253c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
254c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
255c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
256c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
257c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
258c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
259c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 5000,
260c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
261c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
262c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
263c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
264c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
265c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
266dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
267dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3016_8] = {
268c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3016-8",
269c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
270c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
271c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
272c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 8,
273c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 4,
274c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 8,
275c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
276c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
277c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
278c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
279c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
280c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
281c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 5000,
282c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
283c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
284c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
285c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
286c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
287c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
288dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
289dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3016_4] = {
290c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3016-4",
291c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
292c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
293c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
294c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 4,
295c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 2,
296c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 4,
297c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
298c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
299c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
300c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
301c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
302c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
303c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 5000,
304c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
305c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
306c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
307c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
308c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
309c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
310dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
311dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3100_16_4] = {
312c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3100-16-4",
313c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
314c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
315c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
316c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 16,
317c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 8,
318c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 16,
319c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAoChannel		= 4,
320c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 4095,
321c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AoMaxdata		= 4095,
322c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
323c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
324c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 10000,
325c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
326c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
327c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
328c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
329c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
330c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
331c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
332dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
333dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3100_8_4] = {
334c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3100-8-4",
335c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
336c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
337c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
338c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 8,
339c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 4,
340c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 8,
341c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAoChannel		= 4,
342c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 4095,
343c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AoMaxdata		= 4095,
344c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
345c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
346c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 10000,
347c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
348c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
349c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
350c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
351c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
352c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
353c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
354dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
355dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3106_16_4] = {
356c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3106-16-4",
357c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
358c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
359c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
360c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 16,
361c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 8,
362c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 16,
363c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAoChannel		= 4,
364c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
365c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AoMaxdata		= 4095,
366c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
367c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
368c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 10000,
369c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
370c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
371c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
372c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
373c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
374c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
375c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
376dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
377dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3106_8_4] = {
378c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3106-8-4",
379c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
380c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
381c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
382c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 8,
383c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 4,
384c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 8,
385c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAoChannel		= 4,
386c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
387c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AoMaxdata		= 4095,
388c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
389c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
390c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 10000,
391c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
392c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
393c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
394c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
395c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
396c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
397c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
398dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
399dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3110_16_4] = {
400c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3110-16-4",
401c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
402c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
403c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
404c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 16,
405c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 8,
406c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 16,
407c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAoChannel		= 4,
408c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 4095,
409c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AoMaxdata		= 4095,
410c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
411c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
412c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
413c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
414c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
415c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 5000,
416c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
417c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
418c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
419c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
420c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
421c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
422c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
423dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
424dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3110_8_4] = {
425c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3110-8-4",
426c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
427c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
428c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
429c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 8,
430c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 4,
431c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 8,
432c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAoChannel		= 4,
433c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 4095,
434c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AoMaxdata		= 4095,
435c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
436c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
437c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
438c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
439c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
440c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 5000,
441c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
442c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
443c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
444c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
445c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
446c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
447c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
448dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
449dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3116_16_4] = {
450c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3116-16-4",
451c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
452c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
453c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
454c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 16,
455c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 8,
456c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 16,
457c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAoChannel		= 4,
458c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
459c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AoMaxdata		= 4095,
460c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
461c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
462c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
463c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
464c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
465c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 5000,
466c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
467c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
468c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
469c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
470c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
471c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
472c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
473dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
474dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3116_8_4] = {
475c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3116-8-4",
476c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
477c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
478c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
479c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannel		= 8,
480c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 4,
481c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 8,
482c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAoChannel		= 4,
483c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
484c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AoMaxdata		= 4095,
485c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
486c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
487c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
488c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
489c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
490c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 5000,
491c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
492c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
493c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
494c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
495c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
496c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
497c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
498dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
499dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3003] = {
500c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3003",
501c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
502c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
503c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
504c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 4,
505c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 4,
506c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
507c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
508c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
509c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
510c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 7,
511c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 2500,
512c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
513c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
514dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
515dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3002_16] = {
516c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3002-16",
517c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
518c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
519c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
520c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 16,
521c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 16,
522c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
523c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
524c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
525c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
526c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
527c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 5000,
528c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
529c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
530dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
531dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3002_8] = {
532c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3002-8",
533c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
534c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
535c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
536c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 8,
537c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 8,
538c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
539c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
540c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
541c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
542c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
543c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 5000,
544c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
545c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
546dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
547dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3002_4] = {
548c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3002-4",
549c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
550c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
551c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
552c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAiChannelDiff	= 4,
553c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiChannelList	= 4,
554c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AiMaxdata		= 65535,
555c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDiChannel		= 4,
556c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrDoChannel		= 4,
557c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_DoMaxdata		= 1,
558c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.b_AvailableConvertUnit	= 6,
559c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ui_MinAcquisitiontimeNs = 5000,
560c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_config		= i_APCI3XXX_InsnConfigAnalogInput,
561c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ai_read		= i_APCI3XXX_InsnReadAnalogInput,
562dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	},
563dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	[BOARD_APCI3500] = {
564c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_DriverName		= "apci3500",
565c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_IorangeBase1		= 256,
566c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_PCIEeprom		= ADDIDATA_NO_EEPROM,
567c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.pc_EepromChip		= ADDIDATA_9054,
568c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrAoChannel		= 4,
569c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_AoMaxdata		= 4095,
570c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.i_NbrTTLChannel	= 24,
571c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ao_write		= i_APCI3XXX_InsnWriteAnalogOutput,
572c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_config		= i_APCI3XXX_InsnConfigInitTTLIO,
573c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_bits		= i_APCI3XXX_InsnBitsTTLIO,
574c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_read		= i_APCI3XXX_InsnReadTTLIO,
575c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten		.ttl_write		= i_APCI3XXX_InsnWriteTTLIO,
576c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten	},
577c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten};
578c0a053b8b24d72413a82a16a41f635e6040ccf34H Hartley Sweeten
5796c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweetenstatic irqreturn_t apci3xxx_irq_handler(int irq, void *d)
5806c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten{
5816c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten	struct comedi_device *dev = d;
5826c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten	struct addi_private *devpriv = dev->private;
5836c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten	unsigned int status;
5846c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten	int i;
5856c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten
5866c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten	/* Test if interrupt occur */
5876c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten	status = readl(devpriv->dw_AiBase + 16);
5886c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten	if ((status & 0x2) == 0x2) {
5896c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten		/* Reset the interrupt */
5906c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten		writel(status, devpriv->dw_AiBase + 16);
5916c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten
5926c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten		/* Test if interrupt enabled */
5936c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten		if (devpriv->b_EocEosInterrupt == 1) {
5946c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten			/* Read all analog inputs value */
5956c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten			for (i = 0; i < devpriv->ui_AiNbrofChannels; i++) {
5966c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten				unsigned int val;
5976c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten
5986c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten				val = readl(devpriv->dw_AiBase + 28);
5996c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten				devpriv->ui_AiReadData[i] = val;
6006c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten			}
6016c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten
6026c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten			/* Set the interrupt flag */
6036c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten			devpriv->b_EocEosInterrupt = 2;
6046c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten
6056c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten			/* Send a signal to from kernel to user space */
6066c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten			send_sig(SIGIO, devpriv->tsk_Current, 0);
6076c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten		}
6086c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten	}
6096c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten	return IRQ_RETVAL(1);
6106c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten}
6116c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten
612ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweetenstatic int apci3xxx_di_insn_bits(struct comedi_device *dev,
613ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten				 struct comedi_subdevice *s,
614ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten				 struct comedi_insn *insn,
615ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten				 unsigned int *data)
616ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten{
617ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten	struct addi_private *devpriv = dev->private;
618ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten
619ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten	data[1] = inl(devpriv->iobase + 32) & 0xf;
620ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten
621ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten	return insn->n;
622ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten}
623ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten
624c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweetenstatic int apci3xxx_do_insn_bits(struct comedi_device *dev,
625c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten				 struct comedi_subdevice *s,
626c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten				 struct comedi_insn *insn,
627c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten				 unsigned int *data)
628c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten{
629c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten	struct addi_private *devpriv = dev->private;
630c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten	unsigned int mask = data[0];
631c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten	unsigned int bits = data[1];
632c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten
633c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten	s->state = inl(devpriv->iobase + 48) & 0xf;
634c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten	if (mask) {
635c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten		s->state &= ~mask;
636c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten		s->state |= (bits & mask);
637c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten
638c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten		outl(s->state, devpriv->iobase + 48);
639c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten	}
640c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten
641c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten	data[1] = s->state;
642c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten
643c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten	return insn->n;
644c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten}
645c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten
64698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweetenstatic int i_ADDIDATA_InsnReadEeprom(struct comedi_device *dev,
64798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten				     struct comedi_subdevice *s,
64898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten				     struct comedi_insn *insn,
64998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten				     unsigned int *data)
65098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten{
65198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	const struct addi_board *this_board = comedi_board(dev);
65298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	struct addi_private *devpriv = dev->private;
65398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	unsigned short w_Address = CR_CHAN(insn->chanspec);
65498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	unsigned short w_Data;
65598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
65698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	w_Data = addi_eeprom_readw(devpriv->i_IobaseAmcc,
65798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		this_board->pc_EepromChip, 2 * w_Address);
65898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	data[0] = w_Data;
65998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
66098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	return insn->n;
66198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten}
66298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
6635e72c7a50709e60663217704b30501bf34afa448H Hartley Sweetenstatic int apci3xxx_reset(struct comedi_device *dev)
66498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten{
6655e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	struct addi_private *devpriv = dev->private;
6665e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	unsigned int val;
6675e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	int i;
6685e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten
6695e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	/* Disable the interrupt */
6705e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	disable_irq(dev->irq);
6715e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten
6725e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	/* Reset the interrupt flag */
6735e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	devpriv->b_EocEosInterrupt = 0;
6745e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten
6755e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	/* Clear the start command */
6765e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	writel(0, devpriv->dw_AiBase + 8);
6775e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten
6785e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	/* Reset the interrupt flags */
6795e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	val = readl(devpriv->dw_AiBase + 16);
6805e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	writel(val, devpriv->dw_AiBase + 16);
6815e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten
6825e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	/* clear the EOS */
6835e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	readl(devpriv->dw_AiBase + 20);
6845e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten
6855e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	/* Clear the FIFO */
6865e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	for (i = 0; i < 16; i++)
6875e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten		val = readl(devpriv->dw_AiBase + 28);
6885e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten
6895e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	/* Enable the interrupt */
6905e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	enable_irq(dev->irq);
69198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
69298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	return 0;
69398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten}
69498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
695dbae4575661da840353f12dd76499ad587c92519H Hartley Sweetenstatic int apci3xxx_auto_attach(struct comedi_device *dev,
696dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten				unsigned long context)
697dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten{
69898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	struct pci_dev *pcidev = comedi_to_pci_dev(dev);
699dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	const struct addi_board *board = NULL;
70098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	struct addi_private *devpriv;
70198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	struct comedi_subdevice *s;
70298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	int ret, n_subdevices;
70398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	unsigned int dw_Dummy;
704dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten
705dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	if (context < ARRAY_SIZE(apci3xxx_boardtypes))
706dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten		board = &apci3xxx_boardtypes[context];
707dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	if (!board)
708dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten		return -ENODEV;
709dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	dev->board_ptr = board;
71098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	dev->board_name = board->pc_DriverName;
71198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
71298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
71398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	if (!devpriv)
71498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		return -ENOMEM;
71598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	dev->private = devpriv;
71698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
71798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	ret = comedi_pci_enable(dev);
71898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	if (ret)
71998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		return ret;
72098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
7212107347327f7bfd47e6af9fe0510a1750f10f884H Hartley Sweeten	/* board has an ADDIDATA_9054 eeprom */
7222107347327f7bfd47e6af9fe0510a1750f10f884H Hartley Sweeten	dev->iobase = pci_resource_start(pcidev, 2);
7232107347327f7bfd47e6af9fe0510a1750f10f884H Hartley Sweeten	devpriv->iobase = pci_resource_start(pcidev, 2);
7242107347327f7bfd47e6af9fe0510a1750f10f884H Hartley Sweeten	devpriv->dw_AiBase = pci_ioremap_bar(pcidev, 3);
72598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	devpriv->i_IobaseReserved = pci_resource_start(pcidev, 3);
72698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
72798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	/* Initialize parameters that can be overridden in EEPROM */
72898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	devpriv->s_EeParameters.i_NbrAiChannel = board->i_NbrAiChannel;
72998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	devpriv->s_EeParameters.i_NbrAoChannel = board->i_NbrAoChannel;
73098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	devpriv->s_EeParameters.i_AiMaxdata = board->i_AiMaxdata;
73198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	devpriv->s_EeParameters.i_AoMaxdata = board->i_AoMaxdata;
73298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	devpriv->s_EeParameters.i_NbrDiChannel = board->i_NbrDiChannel;
73398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	devpriv->s_EeParameters.i_NbrDoChannel = board->i_NbrDoChannel;
73498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	devpriv->s_EeParameters.i_DoMaxdata = board->i_DoMaxdata;
73598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	devpriv->s_EeParameters.i_Dma = board->i_Dma;
73698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	devpriv->s_EeParameters.i_Timer = board->i_Timer;
73798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	devpriv->s_EeParameters.ui_MinAcquisitiontimeNs =
73898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten						board->ui_MinAcquisitiontimeNs;
73998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	devpriv->s_EeParameters.ui_MinDelaytimeNs = board->ui_MinDelaytimeNs;
74098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
74198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	/* ## */
74298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
74398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	if (pcidev->irq > 0) {
7446c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten		ret = request_irq(pcidev->irq, apci3xxx_irq_handler,
7456c5b0fff8eb76913f0d38e72f4e68e19ea91de04H Hartley Sweeten				  IRQF_SHARED, dev->board_name, dev);
74698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		if (ret == 0)
74798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			dev->irq = pcidev->irq;
74898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	}
74998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
75098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	/*  Read eepeom and fill addi_board Structure */
75198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
75298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	if (board->i_PCIEeprom) {
75398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		if (!(strcmp(board->pc_EepromChip, "S5920"))) {
75498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			/*  Set 3 wait stait */
75598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			if (!(strcmp(dev->board_name, "apci035")))
75698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten				outl(0x80808082, devpriv->i_IobaseAmcc + 0x60);
75798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			else
75898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten				outl(0x83838383, devpriv->i_IobaseAmcc + 0x60);
75998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
76098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			/*  Enable the interrupt for the controller */
76198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			dw_Dummy = inl(devpriv->i_IobaseAmcc + 0x38);
76298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			outl(dw_Dummy | 0x2000, devpriv->i_IobaseAmcc + 0x38);
76398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		}
76498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		addi_eeprom_read_info(dev, pci_resource_start(pcidev, 0));
76598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	}
76698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
76798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	n_subdevices = 7;
76898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	ret = comedi_alloc_subdevices(dev, n_subdevices);
76998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	if (ret)
77098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		return ret;
77198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
77298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	/*  Allocate and Initialise AI Subdevice Structures */
77398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	s = &dev->subdevices[0];
77498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	if (devpriv->s_EeParameters.i_NbrAiChannel ||
77598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	    board->i_NbrAiChannelDiff) {
77698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		dev->read_subdev = s;
77798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_AI;
77898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->subdev_flags = SDF_READABLE | SDF_COMMON | SDF_GROUND |
77998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten				  SDF_DIFF;
78098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		if (devpriv->s_EeParameters.i_NbrAiChannel) {
78198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			s->n_chan = devpriv->s_EeParameters.i_NbrAiChannel;
78298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			devpriv->b_SingelDiff = 0;
78398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		} else {
78498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			s->n_chan = board->i_NbrAiChannelDiff;
78598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			devpriv->b_SingelDiff = 1;
78698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		}
78798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->maxdata = devpriv->s_EeParameters.i_AiMaxdata;
78898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->len_chanlist = board->i_AiChannelList;
78998a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten		s->range_table = &apci3xxx_ai_range;
79098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
79198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		/* Set the initialisation flag */
79298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		devpriv->b_AiInitialisation = 1;
79398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
79498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_config = board->ai_config;
79598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_read = board->ai_read;
79698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_write = board->ai_write;
79798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_bits = board->ai_bits;
79898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->do_cmdtest = board->ai_cmdtest;
79998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->do_cmd = board->ai_cmd;
80098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->cancel = board->ai_cancel;
80198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
80298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	} else {
80398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_UNUSED;
80498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	}
80598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
80698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	/*  Allocate and Initialise AO Subdevice Structures */
80798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	s = &dev->subdevices[1];
80898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	if (devpriv->s_EeParameters.i_NbrAoChannel) {
80998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_AO;
81098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
81198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->n_chan = devpriv->s_EeParameters.i_NbrAoChannel;
81298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->maxdata = devpriv->s_EeParameters.i_AoMaxdata;
81398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->len_chanlist = devpriv->s_EeParameters.i_NbrAoChannel;
81498a856213efb9fec7a45491170d9b589ce55572dH Hartley Sweeten		s->range_table = &apci3xxx_ao_range;
81598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_config = board->ao_config;
81698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_write = board->ao_write;
81798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	} else {
81898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_UNUSED;
81998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	}
82098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	/*  Allocate and Initialise DI Subdevice Structures */
82198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	s = &dev->subdevices[2];
82298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	if (devpriv->s_EeParameters.i_NbrDiChannel) {
82398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_DI;
82498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_COMMON;
82598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->n_chan = devpriv->s_EeParameters.i_NbrDiChannel;
82698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->maxdata = 1;
82798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->len_chanlist = devpriv->s_EeParameters.i_NbrDiChannel;
82898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->range_table = &range_digital;
82998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->io_bits = 0;	/* all bits input */
830ae57b69639bcbd653821f7a4a14b87f6fa6743c0H Hartley Sweeten		s->insn_bits = apci3xxx_di_insn_bits;
83198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	} else {
83298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_UNUSED;
83398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	}
83498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	/*  Allocate and Initialise DO Subdevice Structures */
83598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	s = &dev->subdevices[3];
83698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	if (devpriv->s_EeParameters.i_NbrDoChannel) {
83798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_DO;
83898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->subdev_flags =
83998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			SDF_READABLE | SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
84098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->n_chan = devpriv->s_EeParameters.i_NbrDoChannel;
84198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->maxdata = devpriv->s_EeParameters.i_DoMaxdata;
84298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->len_chanlist = devpriv->s_EeParameters.i_NbrDoChannel;
84398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->range_table = &range_digital;
84498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->io_bits = 0xf;	/* all bits output */
845c3d8605fca03adb70f712512b3df0e0311ac9b61H Hartley Sweeten		s->insn_bits = apci3xxx_do_insn_bits;
84698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	} else {
84798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_UNUSED;
84898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	}
84998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
85098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	/*  Allocate and Initialise Timer Subdevice Structures */
85198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	s = &dev->subdevices[4];
85298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	if (devpriv->s_EeParameters.i_Timer) {
85398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_TIMER;
85498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
85598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->n_chan = 1;
85698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->maxdata = 0;
85798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->len_chanlist = 1;
85898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->range_table = &range_digital;
85998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
86098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_write = board->timer_write;
86198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_read = board->timer_read;
86298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_config = board->timer_config;
86398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_bits = board->timer_bits;
86498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	} else {
86598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_UNUSED;
86698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	}
86798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
86898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	/*  Allocate and Initialise TTL */
86998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	s = &dev->subdevices[5];
87098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	if (board->i_NbrTTLChannel) {
87198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_TTLIO;
87298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->subdev_flags =
87398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			SDF_WRITEABLE | SDF_READABLE | SDF_GROUND | SDF_COMMON;
87498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->n_chan = board->i_NbrTTLChannel;
87598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->maxdata = 1;
87698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->io_bits = 0;	/* all bits input */
87798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->len_chanlist = board->i_NbrTTLChannel;
87898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->range_table = &range_digital;
87998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_config = board->ttl_config;
88098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_bits = board->ttl_bits;
88198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_read = board->ttl_read;
88298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_write = board->ttl_write;
88398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	} else {
88498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_UNUSED;
88598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	}
88698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
88798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	/* EEPROM */
88898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	s = &dev->subdevices[6];
88998d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	if (board->i_PCIEeprom) {
89098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_MEMORY;
89198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->subdev_flags = SDF_READABLE | SDF_INTERNAL;
89298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->n_chan = 256;
89398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->maxdata = 0xffff;
89498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->insn_read = i_ADDIDATA_InsnReadEeprom;
89598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	} else {
89698d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		s->type = COMEDI_SUBD_UNUSED;
89798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	}
89898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
8995e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten	apci3xxx_reset(dev);
90098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	return 0;
90198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten}
90298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten
90398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweetenstatic void apci3xxx_detach(struct comedi_device *dev)
90498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten{
90598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	struct addi_private *devpriv = dev->private;
906dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten
90798d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	if (devpriv) {
90898d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		if (dev->iobase)
9095e72c7a50709e60663217704b30501bf34afa448H Hartley Sweeten			apci3xxx_reset(dev);
91098d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		if (dev->irq)
91198d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			free_irq(dev->irq, dev);
91298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten		if (devpriv->dw_AiBase)
91398d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten			iounmap(devpriv->dw_AiBase);
91498d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	}
91598d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	comedi_pci_disable(dev);
916dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten}
917dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten
91820a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenstatic struct comedi_driver apci3xxx_driver = {
91920a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten	.driver_name	= "addi_apci_3xxx",
92020a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten	.module		= THIS_MODULE,
921dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	.auto_attach	= apci3xxx_auto_attach,
92298d3385dd68381dd2738a825f8513366c44018b2H Hartley Sweeten	.detach		= apci3xxx_detach,
92320a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten};
92420a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten
925a690b7e535f2f97a3a05ee570715abeb60a8910fBill Pembertonstatic int apci3xxx_pci_probe(struct pci_dev *dev,
926b8f4ac237e382accd4b30c75043939f7ed9e79a6H Hartley Sweeten			      const struct pci_device_id *id)
92720a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten{
928b8f4ac237e382accd4b30c75043939f7ed9e79a6H Hartley Sweeten	return comedi_pci_auto_config(dev, &apci3xxx_driver, id->driver_data);
92920a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten}
93020a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten
93120a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenstatic DEFINE_PCI_DEVICE_TABLE(apci3xxx_pci_table) = {
932dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3010), BOARD_APCI3000_16 },
933dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x300f), BOARD_APCI3000_8 },
934dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x300e), BOARD_APCI3000_4 },
935dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3013), BOARD_APCI3006_16 },
936dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3014), BOARD_APCI3006_8 },
937dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3015), BOARD_APCI3006_4 },
938dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3016), BOARD_APCI3010_16 },
939dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3017), BOARD_APCI3010_8 },
940dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3018), BOARD_APCI3010_4 },
941dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3019), BOARD_APCI3016_16 },
942dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x301a), BOARD_APCI3016_8 },
943dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x301b), BOARD_APCI3016_4 },
944dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x301c), BOARD_APCI3100_16_4 },
945dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x301d), BOARD_APCI3100_8_4 },
946dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x301e), BOARD_APCI3106_16_4 },
947dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x301f), BOARD_APCI3106_8_4 },
948dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3020), BOARD_APCI3110_16_4 },
949dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3021), BOARD_APCI3110_8_4 },
950dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3022), BOARD_APCI3116_16_4 },
951dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3023), BOARD_APCI3116_8_4 },
952dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x300B), BOARD_APCI3003 },
953dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3002), BOARD_APCI3002_16 },
954dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3003), BOARD_APCI3002_8 },
955dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3004), BOARD_APCI3002_4 },
956dbae4575661da840353f12dd76499ad587c92519H Hartley Sweeten	{ PCI_VDEVICE(ADDIDATA, 0x3024), BOARD_APCI3500 },
957317285d71acccbda2fbab7e53d6b33c52a151a32H Hartley Sweeten	{ 0 }
958317285d71acccbda2fbab7e53d6b33c52a151a32H Hartley Sweeten};
95920a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley SweetenMODULE_DEVICE_TABLE(pci, apci3xxx_pci_table);
960317285d71acccbda2fbab7e53d6b33c52a151a32H Hartley Sweeten
96120a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenstatic struct pci_driver apci3xxx_pci_driver = {
96220a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten	.name		= "addi_apci_3xxx",
96320a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten	.id_table	= apci3xxx_pci_table,
96420a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten	.probe		= apci3xxx_pci_probe,
9659901a4d75d007686e8f6473189cafc4b216b7449Peter Huewe	.remove		= comedi_pci_auto_unconfig,
96620a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweeten};
96720a22b706b8ee37d1a2282f2c9bf7f2c73a5a7a5H Hartley Sweetenmodule_comedi_pci_driver(apci3xxx_driver, apci3xxx_pci_driver);
96890f703d30dd3e0c16ff80f35e34e511385a05ad5Arun Thomas
96990f703d30dd3e0c16ff80f35e34e511385a05ad5Arun ThomasMODULE_AUTHOR("Comedi http://www.comedi.org");
97090f703d30dd3e0c16ff80f35e34e511385a05ad5Arun ThomasMODULE_DESCRIPTION("Comedi low-level driver");
97190f703d30dd3e0c16ff80f35e34e511385a05ad5Arun ThomasMODULE_LICENSE("GPL");
972