[go: nahoru, domu]

14fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef/*
24fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef    comedi/drivers/ni_mio_cs.c
34fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef    Hardware driver for NI PCMCIA MIO E series cards
44fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
54fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef    COMEDI - Linux Control and Measurement Device Interface
64fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef    Copyright (C) 1997-2000 David A. Schleef <ds@schleef.org>
74fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
84fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef    This program is free software; you can redistribute it and/or modify
94fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef    it under the terms of the GNU General Public License as published by
104fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef    the Free Software Foundation; either version 2 of the License, or
114fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef    (at your option) any later version.
124fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
134fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef    This program is distributed in the hope that it will be useful,
144fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef    but WITHOUT ANY WARRANTY; without even the implied warranty of
154fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
164fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef    GNU General Public License for more details.
174fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef*/
184fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef/*
194fecf4a2a64c453ea8e57c166edb5385082e3948David SchleefDriver: ni_mio_cs
204fecf4a2a64c453ea8e57c166edb5385082e3948David SchleefDescription: National Instruments DAQCard E series
214fecf4a2a64c453ea8e57c166edb5385082e3948David SchleefAuthor: ds
224fecf4a2a64c453ea8e57c166edb5385082e3948David SchleefStatus: works
234fecf4a2a64c453ea8e57c166edb5385082e3948David SchleefDevices: [National Instruments] DAQCard-AI-16XE-50 (ni_mio_cs),
244fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef  DAQCard-AI-16E-4, DAQCard-6062E, DAQCard-6024E, DAQCard-6036E
254fecf4a2a64c453ea8e57c166edb5385082e3948David SchleefUpdated: Thu Oct 23 19:43:17 CDT 2003
264fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
274fecf4a2a64c453ea8e57c166edb5385082e3948David SchleefSee the notes in the ni_atmio.o driver.
284fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef*/
294fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef/*
304fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef	The real guts of the driver is in ni_mio_common.c, which is
314fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef	included by all the E series drivers.
324fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
334fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef	References for specifications:
344fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
354fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef	   341080a.pdf  DAQCard E Series Register Level Programmer Manual
364fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
374fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef*/
384fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
39ce157f8032bbd46d9427034c335b0afd751da25dH Hartley Sweeten#include <linux/module.h>
404fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef#include "../comedidev.h"
414fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
424fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef#include <linux/delay.h>
434fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
444fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef#include "ni_stc.h"
454fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef#include "8255.h"
464fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
474fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef#include <pcmcia/cistpl.h>
484fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef#include <pcmcia/ds.h>
494fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
504fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef/*
514fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef *  AT specific setup
524fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef */
534fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
5472a822807272f8bb29a527e7e3c60efc7032a9baGreg Kroah-Hartmanstatic const struct ni_board_struct ni_boards[] = {
55885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten	{
56885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.name		= "DAQCard-ai-16xe-50",
57b674f9df207dc7da7b77ada82e0fb072ba06267cH Hartley Sweeten		.device_id	= 0x010d,
58885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.n_adchan	= 16,
59db2255f5a0394fc5bc295a4b3e96667c46a7b9efH Hartley Sweeten		.ai_maxdata	= 0xffff,
60885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ai_fifo_depth	= 1024,
61885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.gainlkup	= ai_gain_8,
62885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ai_speed	= 5000,
63885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.caldac		= { dac8800, dac8043 },
64885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten	}, {
65885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.name		= "DAQCard-ai-16e-4",
66b674f9df207dc7da7b77ada82e0fb072ba06267cH Hartley Sweeten		.device_id	= 0x010c,
67885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.n_adchan	= 16,
68db2255f5a0394fc5bc295a4b3e96667c46a7b9efH Hartley Sweeten		.ai_maxdata	= 0x0fff,
69885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ai_fifo_depth	= 1024,
70885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.gainlkup	= ai_gain_16,
71885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ai_speed	= 4000,
72885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.caldac		= { mb88341 },		/* verified */
73885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten	}, {
74885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.name		= "DAQCard-6062E",
75b674f9df207dc7da7b77ada82e0fb072ba06267cH Hartley Sweeten		.device_id	= 0x02c4,
76885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.n_adchan	= 16,
77db2255f5a0394fc5bc295a4b3e96667c46a7b9efH Hartley Sweeten		.ai_maxdata	= 0x0fff,
78885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ai_fifo_depth	= 8192,
79885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.gainlkup	= ai_gain_16,
80885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ai_speed	= 2000,
81885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.n_aochan	= 2,
82c5f26499998476edf599b599cd88163305dee5b2H Hartley Sweeten		.ao_maxdata	= 0x0fff,
83885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ao_fifo_depth	= 2048,
84885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ao_range_table	= &range_bipolar10,
85885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ao_speed	= 1176,
86885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.caldac		= { ad8804_debug },	/* verified */
87885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten	 }, {
88885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		/* specs incorrect! */
89885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.name		= "DAQCard-6024E",
90b674f9df207dc7da7b77ada82e0fb072ba06267cH Hartley Sweeten		.device_id	= 0x075e,
91885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.n_adchan	= 16,
92db2255f5a0394fc5bc295a4b3e96667c46a7b9efH Hartley Sweeten		.ai_maxdata	= 0x0fff,
93885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ai_fifo_depth	= 1024,
94885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.gainlkup	= ai_gain_4,
95885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ai_speed	= 5000,
96885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.n_aochan	= 2,
97c5f26499998476edf599b599cd88163305dee5b2H Hartley Sweeten		.ao_maxdata	= 0x0fff,
98885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ao_range_table	= &range_bipolar10,
99885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ao_speed	= 1000000,
100885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.caldac		= { ad8804_debug },
101885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten	}, {
102885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		/* specs incorrect! */
103885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.name		= "DAQCard-6036E",
104b674f9df207dc7da7b77ada82e0fb072ba06267cH Hartley Sweeten		.device_id	= 0x0245,
105885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.n_adchan	= 16,
106db2255f5a0394fc5bc295a4b3e96667c46a7b9efH Hartley Sweeten		.ai_maxdata	= 0xffff,
107885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ai_fifo_depth	= 1024,
108885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.alwaysdither	= 1,
109885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.gainlkup	= ai_gain_4,
110885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ai_speed	= 5000,
111885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.n_aochan	= 2,
112c5f26499998476edf599b599cd88163305dee5b2H Hartley Sweeten		.ao_maxdata	= 0xffff,
113885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ao_range_table	= &range_bipolar10,
114885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ao_speed	= 1000000,
115885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.caldac		= { ad8804_debug },
1160a85b6f0ab0d2edb0d41b32697111ce0e4f43496Mithlesh Thukral	 },
1174fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef#if 0
118885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten	{
119885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.name		= "DAQCard-6715",
120b674f9df207dc7da7b77ada82e0fb072ba06267cH Hartley Sweeten		.device_id	= 0x0000,	/* unknown */
121885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.n_aochan	= 8,
122c5f26499998476edf599b599cd88163305dee5b2H Hartley Sweeten		.ao_maxdata	= 0x0fff,
123885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.ao_671x	= 8192,
124885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten		.caldac		= { mb88341, mb88341 },
125885d8bce7f6e834c190ee3c60561c1c6c0e6174bH Hartley Sweeten	},
1264fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef#endif
1274fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef};
1284fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
129ac63baf5517cb7c22d63e2c5d269994f3002c7e0H Hartley Sweeten#include "ni_mio_common.c"
1304fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
13142d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweetenstatic const void *ni_getboardtype(struct comedi_device *dev,
13242d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten				   struct pcmcia_device *link)
133616b7a479e190e099f75073231c027fa393da5b2H Hartley Sweeten{
13442d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	static const struct ni_board_struct *board;
135616b7a479e190e099f75073231c027fa393da5b2H Hartley Sweeten	int i;
1364fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
13742d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	for (i = 0; i < ARRAY_SIZE(ni_boards); i++) {
13842d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten		board = &ni_boards[i];
13942d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten		if (board->device_id == link->card_id)
14042d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten			return board;
141616b7a479e190e099f75073231c027fa393da5b2H Hartley Sweeten	}
14242d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	return NULL;
14342d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten}
14442d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten
14542d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweetenstatic int mio_pcmcia_config_loop(struct pcmcia_device *p_dev, void *priv_data)
14642d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten{
14742d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	int base, ret;
148616b7a479e190e099f75073231c027fa393da5b2H Hartley Sweeten
14942d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH;
15042d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	p_dev->resource[0]->flags |= IO_DATA_PATH_WIDTH_16;
151616b7a479e190e099f75073231c027fa393da5b2H Hartley Sweeten
15242d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	for (base = 0x000; base < 0x400; base += 0x20) {
15342d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten		p_dev->resource[0]->start = base;
15442d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten		ret = pcmcia_request_io(p_dev);
15542d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten		if (!ret)
15642d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten			return 0;
15742d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	}
15842d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	return -ENODEV;
159616b7a479e190e099f75073231c027fa393da5b2H Hartley Sweeten}
1600a85b6f0ab0d2edb0d41b32697111ce0e4f43496Mithlesh Thukral
16142d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweetenstatic int mio_cs_auto_attach(struct comedi_device *dev,
16242d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten			      unsigned long context)
1634fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef{
16442d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	struct pcmcia_device *link = comedi_to_pcmcia_dev(dev);
16542d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	static const struct ni_board_struct *board;
1660e05c55226bffcdd3f1393d5ab74cd0d9faff385H Hartley Sweeten	struct ni_private *devpriv;
1674fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef	int ret;
1684fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
16942d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	board = ni_getboardtype(dev, link);
17042d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	if (!board)
17142d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten		return -ENODEV;
17242d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	dev->board_ptr = board;
17342d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	dev->board_name = board->name;
17442d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten
1755cd8e852629fc7f1bdaacbdd32fe4139b9944f8bH Hartley Sweeten	link->config_flags |= CONF_AUTO_SET_IO | CONF_ENABLE_IRQ;
1765cd8e852629fc7f1bdaacbdd32fe4139b9944f8bH Hartley Sweeten	ret = comedi_pcmcia_enable(dev, mio_pcmcia_config_loop);
17742d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	if (ret)
17842d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten		return ret;
1795cd8e852629fc7f1bdaacbdd32fe4139b9944f8bH Hartley Sweeten	dev->iobase = link->resource[0]->start;
18042d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten
18182e9ee616a89f152f42c7051c5f9f5f0d7663652H Hartley Sweeten	link->priv = dev;
18282e9ee616a89f152f42c7051c5f9f5f0d7663652H Hartley Sweeten	ret = pcmcia_request_irq(link, ni_E_interrupt);
18382e9ee616a89f152f42c7051c5f9f5f0d7663652H Hartley Sweeten	if (ret)
184678a6ff3e98ddbb049f3a012520c36da3065af4dH Hartley Sweeten		return ret;
185678a6ff3e98ddbb049f3a012520c36da3065af4dH Hartley Sweeten	dev->irq = link->irq;
1864fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
187c3744138715045adb316284ee7a1e608f0278f6cBill Pemberton	ret = ni_alloc_private(dev);
1880e05c55226bffcdd3f1393d5ab74cd0d9faff385H Hartley Sweeten	if (ret)
1894fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef		return ret;
1904fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
191678a6ff3e98ddbb049f3a012520c36da3065af4dH Hartley Sweeten	devpriv = dev->private;
1929c340ac934dbbfd46e776465b08391baac32d486H Hartley Sweeten
1931fa955ba355bfa6eb83b8fd9cc6064a561291d1fH Hartley Sweeten	return ni_E_init(dev, 0, 1);
1944fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef}
1954fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
196abbe0796baa03610f3147c786c7c3f20b0050c1dH Hartley Sweetenstatic void mio_cs_detach(struct comedi_device *dev)
197abbe0796baa03610f3147c786c7c3f20b0050c1dH Hartley Sweeten{
198abbe0796baa03610f3147c786c7c3f20b0050c1dH Hartley Sweeten	mio_common_detach(dev);
1995cd8e852629fc7f1bdaacbdd32fe4139b9944f8bH Hartley Sweeten	comedi_pcmcia_disable(dev);
200abbe0796baa03610f3147c786c7c3f20b0050c1dH Hartley Sweeten}
201abbe0796baa03610f3147c786c7c3f20b0050c1dH Hartley Sweeten
202aaefe848e056474a583b43c13c4891fbda50caa4H Hartley Sweetenstatic struct comedi_driver driver_ni_mio_cs = {
203aaefe848e056474a583b43c13c4891fbda50caa4H Hartley Sweeten	.driver_name	= "ni_mio_cs",
204aaefe848e056474a583b43c13c4891fbda50caa4H Hartley Sweeten	.module		= THIS_MODULE,
20542d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	.auto_attach	= mio_cs_auto_attach,
206aaefe848e056474a583b43c13c4891fbda50caa4H Hartley Sweeten	.detach		= mio_cs_detach,
207aaefe848e056474a583b43c13c4891fbda50caa4H Hartley Sweeten};
208aaefe848e056474a583b43c13c4891fbda50caa4H Hartley Sweeten
209e5e7ff89e660e8e1a0861062197f3fd4d7576c41H Hartley Sweetenstatic int cs_attach(struct pcmcia_device *link)
210bea5b9035dae264e5da4a8a6aacc8bace0647c35H Hartley Sweeten{
21142d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	return comedi_pcmcia_auto_config(link, &driver_ni_mio_cs);
212bea5b9035dae264e5da4a8a6aacc8bace0647c35H Hartley Sweeten}
213bea5b9035dae264e5da4a8a6aacc8bace0647c35H Hartley Sweeten
2142202a5a7490a9de282846ea8d4a56d0249e09033Joe Perchesstatic const struct pcmcia_device_id ni_mio_cs_ids[] = {
2154fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef	PCMCIA_DEVICE_MANF_CARD(0x010b, 0x010d),	/* DAQCard-ai-16xe-50 */
2164fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef	PCMCIA_DEVICE_MANF_CARD(0x010b, 0x010c),	/* DAQCard-ai-16e-4 */
2174fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef	PCMCIA_DEVICE_MANF_CARD(0x010b, 0x02c4),	/* DAQCard-6062E */
2184fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef	PCMCIA_DEVICE_MANF_CARD(0x010b, 0x075e),	/* DAQCard-6024E */
2194fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef	PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0245),	/* DAQCard-6036E */
2204fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef	PCMCIA_DEVICE_NULL
2214fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef};
2224fecf4a2a64c453ea8e57c166edb5385082e3948David SchleefMODULE_DEVICE_TABLE(pcmcia, ni_mio_cs_ids);
2234fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef
2243243785c39836fdded4ad76797941fad7e504227H Hartley Sweetenstatic struct pcmcia_driver ni_mio_cs_driver = {
225a7538b8271b2abe6fa4cc8b8ce684d2970de1bfbH Hartley Sweeten	.name		= "ni_mio_cs",
226a7538b8271b2abe6fa4cc8b8ce684d2970de1bfbH Hartley Sweeten	.owner		= THIS_MODULE,
227a7538b8271b2abe6fa4cc8b8ce684d2970de1bfbH Hartley Sweeten	.id_table	= ni_mio_cs_ids,
228a7538b8271b2abe6fa4cc8b8ce684d2970de1bfbH Hartley Sweeten	.probe		= cs_attach,
22942d1aeea844874961af00621f0a5584aa9b9e1a5H Hartley Sweeten	.remove		= comedi_pcmcia_auto_unconfig,
2304fecf4a2a64c453ea8e57c166edb5385082e3948David Schleef};
231235bee772b0fa4cf059c669bcaa733da08b4894cPeter Huewemodule_comedi_pcmcia_driver(driver_ni_mio_cs, ni_mio_cs_driver);
23227629c600d6090af0f9d5af9a09bf9dd2aff5adfH Hartley Sweeten
23327629c600d6090af0f9d5af9a09bf9dd2aff5adfH Hartley SweetenMODULE_DESCRIPTION("Comedi driver for National Instruments DAQCard E series");
23427629c600d6090af0f9d5af9a09bf9dd2aff5adfH Hartley SweetenMODULE_AUTHOR("David A. Schleef <ds@schleef.org>");
23527629c600d6090af0f9d5af9a09bf9dd2aff5adfH Hartley SweetenMODULE_LICENSE("GPL");
236