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_boardinfo labpc_cs_boards[] = {
77 {
78 .name = "daqcard-1200",
79 .device_id = 0x103,
80 .ai_speed = 10000,
81 .register_layout = labpc_1200_layout,
82 .has_ao = 1,
83 .ai_range_table = &range_labpc_1200_ai,
84 .ai_range_code = labpc_1200_ai_gain_bits,
85 },
86};
87
88static int labpc_auto_attach(struct comedi_device *dev,
89 unsigned long context)
90{
91 struct pcmcia_device *link = comedi_to_pcmcia_dev(dev);
92 struct labpc_private *devpriv;
93 int ret;
94
95
96 dev->board_ptr = &labpc_cs_boards[0];
97
98 link->config_flags |= CONF_AUTO_SET_IO |
99 CONF_ENABLE_IRQ | CONF_ENABLE_PULSE_IRQ;
100 ret = comedi_pcmcia_enable(dev, NULL);
101 if (ret)
102 return ret;
103 dev->iobase = link->resource[0]->start;
104
105 if (!link->irq)
106 return -EINVAL;
107
108 devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
109 if (!devpriv)
110 return -ENOMEM;
111 dev->private = devpriv;
112
113 return labpc_common_attach(dev, link->irq, IRQF_SHARED);
114}
115
116static void labpc_detach(struct comedi_device *dev)
117{
118 labpc_common_detach(dev);
119 comedi_pcmcia_disable(dev);
120}
121
122static struct comedi_driver driver_labpc_cs = {
123 .driver_name = "ni_labpc_cs",
124 .module = THIS_MODULE,
125 .auto_attach = labpc_auto_attach,
126 .detach = labpc_detach,
127};
128
129static int labpc_cs_attach(struct pcmcia_device *link)
130{
131 return comedi_pcmcia_auto_config(link, &driver_labpc_cs);
132}
133
134static const struct pcmcia_device_id labpc_cs_ids[] = {
135 PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0103),
136 PCMCIA_DEVICE_NULL
137};
138MODULE_DEVICE_TABLE(pcmcia, labpc_cs_ids);
139
140static struct pcmcia_driver labpc_cs_driver = {
141 .name = "daqcard-1200",
142 .owner = THIS_MODULE,
143 .id_table = labpc_cs_ids,
144 .probe = labpc_cs_attach,
145 .remove = comedi_pcmcia_auto_unconfig,
146};
147module_comedi_pcmcia_driver(driver_labpc_cs, labpc_cs_driver);
148
149MODULE_DESCRIPTION("Comedi driver for National Instruments Lab-PC");
150MODULE_AUTHOR("Frank Mori Hess <fmhess@users.sourceforge.net>");
151MODULE_LICENSE("GPL");
152