1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62#include "../comedidev.h"
63
64#include <linux/delay.h>
65#include <linux/slab.h>
66
67#include "8253.h"
68#include "8255.h"
69#include "comedi_fc.h"
70#include "ni_labpc.h"
71
72#include <pcmcia/cistpl.h>
73#include <pcmcia/cisreg.h>
74#include <pcmcia/ds.h>
75
76static const struct labpc_board_struct labpc_cs_boards[] = {
77 {
78 .name = "daqcard-1200",
79 .device_id = 0x103,
80 .ai_speed = 10000,
81 .bustype = pcmcia_bustype,
82 .register_layout = labpc_1200_layout,
83 .has_ao = 1,
84 .ai_range_table = &range_labpc_1200_ai,
85 .ai_range_code = labpc_1200_ai_gain_bits,
86 .ai_range_is_unipolar = labpc_1200_is_unipolar,
87 },
88};
89
90static int labpc_auto_attach(struct comedi_device *dev,
91 unsigned long context)
92{
93 struct pcmcia_device *link = comedi_to_pcmcia_dev(dev);
94 struct labpc_private *devpriv;
95 int ret;
96
97
98 dev->board_ptr = &labpc_cs_boards[0];
99
100 link->config_flags |= CONF_AUTO_SET_IO |
101 CONF_ENABLE_IRQ | CONF_ENABLE_PULSE_IRQ;
102 ret = comedi_pcmcia_enable(dev, NULL);
103 if (ret)
104 return ret;
105 dev->iobase = link->resource[0]->start;
106
107 if (!link->irq)
108 return -EINVAL;
109
110 devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
111 if (!devpriv)
112 return -ENOMEM;
113 dev->private = devpriv;
114
115 return labpc_common_attach(dev, dev->iobase, link->irq, 0);
116}
117
118static void labpc_detach(struct comedi_device *dev)
119{
120 labpc_common_detach(dev);
121 comedi_pcmcia_disable(dev);
122}
123
124static struct comedi_driver driver_labpc_cs = {
125 .driver_name = "ni_labpc_cs",
126 .module = THIS_MODULE,
127 .auto_attach = labpc_auto_attach,
128 .detach = labpc_detach,
129};
130
131static int labpc_cs_attach(struct pcmcia_device *link)
132{
133 return comedi_pcmcia_auto_config(link, &driver_labpc_cs);
134}
135
136static const struct pcmcia_device_id labpc_cs_ids[] = {
137 PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0103),
138 PCMCIA_DEVICE_NULL
139};
140MODULE_DEVICE_TABLE(pcmcia, labpc_cs_ids);
141
142static struct pcmcia_driver labpc_cs_driver = {
143 .name = "daqcard-1200",
144 .owner = THIS_MODULE,
145 .id_table = labpc_cs_ids,
146 .probe = labpc_cs_attach,
147 .remove = comedi_pcmcia_auto_unconfig,
148};
149module_comedi_pcmcia_driver(driver_labpc_cs, labpc_cs_driver);
150
151MODULE_DESCRIPTION("Comedi driver for National Instruments Lab-PC");
152MODULE_AUTHOR("Frank Mori Hess <fmhess@users.sourceforge.net>");
153MODULE_LICENSE("GPL");
154