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#include <linux/module.h>
57
58#include "../comedi_pcmcia.h"
59
60#include "ni_labpc.h"
61
62static const struct labpc_boardinfo labpc_cs_boards[] = {
63 {
64 .name = "daqcard-1200",
65 .ai_speed = 10000,
66 .has_ao = 1,
67 .is_labpc1200 = 1,
68 },
69};
70
71static int labpc_cs_auto_attach(struct comedi_device *dev,
72 unsigned long context)
73{
74 struct pcmcia_device *link = comedi_to_pcmcia_dev(dev);
75 int ret;
76
77
78 dev->board_ptr = &labpc_cs_boards[0];
79
80 link->config_flags |= CONF_AUTO_SET_IO |
81 CONF_ENABLE_IRQ | CONF_ENABLE_PULSE_IRQ;
82 ret = comedi_pcmcia_enable(dev, NULL);
83 if (ret)
84 return ret;
85 dev->iobase = link->resource[0]->start;
86
87 if (!link->irq)
88 return -EINVAL;
89
90 return labpc_common_attach(dev, link->irq, IRQF_SHARED);
91}
92
93static void labpc_cs_detach(struct comedi_device *dev)
94{
95 labpc_common_detach(dev);
96 comedi_pcmcia_disable(dev);
97}
98
99static struct comedi_driver driver_labpc_cs = {
100 .driver_name = "ni_labpc_cs",
101 .module = THIS_MODULE,
102 .auto_attach = labpc_cs_auto_attach,
103 .detach = labpc_cs_detach,
104};
105
106static int labpc_cs_attach(struct pcmcia_device *link)
107{
108 return comedi_pcmcia_auto_config(link, &driver_labpc_cs);
109}
110
111static const struct pcmcia_device_id labpc_cs_ids[] = {
112 PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0103),
113 PCMCIA_DEVICE_NULL
114};
115MODULE_DEVICE_TABLE(pcmcia, labpc_cs_ids);
116
117static struct pcmcia_driver labpc_cs_driver = {
118 .name = "daqcard-1200",
119 .owner = THIS_MODULE,
120 .id_table = labpc_cs_ids,
121 .probe = labpc_cs_attach,
122 .remove = comedi_pcmcia_auto_unconfig,
123};
124module_comedi_pcmcia_driver(driver_labpc_cs, labpc_cs_driver);
125
126MODULE_DESCRIPTION("Comedi driver for National Instruments Lab-PC");
127MODULE_AUTHOR("Frank Mori Hess <fmhess@users.sourceforge.net>");
128MODULE_LICENSE("GPL");
129