1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#include <linux/module.h>
20#include <linux/kernel.h>
21
22#include "comedi_pcmcia.h"
23
24
25
26
27
28struct pcmcia_device *comedi_to_pcmcia_dev(struct comedi_device *dev)
29{
30 return dev->hw_dev ? to_pcmcia_dev(dev->hw_dev) : NULL;
31}
32EXPORT_SYMBOL_GPL(comedi_to_pcmcia_dev);
33
34static int comedi_pcmcia_conf_check(struct pcmcia_device *link,
35 void *priv_data)
36{
37 if (link->config_index == 0)
38 return -EINVAL;
39
40 return pcmcia_request_io(link);
41}
42
43
44
45
46
47
48
49
50
51
52int comedi_pcmcia_enable(struct comedi_device *dev,
53 int (*conf_check)(struct pcmcia_device *, void *))
54{
55 struct pcmcia_device *link = comedi_to_pcmcia_dev(dev);
56 int ret;
57
58 if (!link)
59 return -ENODEV;
60
61 if (!conf_check)
62 conf_check = comedi_pcmcia_conf_check;
63
64 ret = pcmcia_loop_config(link, conf_check, NULL);
65 if (ret)
66 return ret;
67
68 return pcmcia_enable_device(link);
69}
70EXPORT_SYMBOL_GPL(comedi_pcmcia_enable);
71
72
73
74
75
76void comedi_pcmcia_disable(struct comedi_device *dev)
77{
78 struct pcmcia_device *link = comedi_to_pcmcia_dev(dev);
79
80 if (link)
81 pcmcia_disable_device(link);
82}
83EXPORT_SYMBOL_GPL(comedi_pcmcia_disable);
84
85
86
87
88
89
90
91
92int comedi_pcmcia_auto_config(struct pcmcia_device *link,
93 struct comedi_driver *driver)
94{
95 return comedi_auto_config(&link->dev, driver, 0);
96}
97EXPORT_SYMBOL_GPL(comedi_pcmcia_auto_config);
98
99
100
101
102
103
104
105void comedi_pcmcia_auto_unconfig(struct pcmcia_device *link)
106{
107 comedi_auto_unconfig(&link->dev);
108}
109EXPORT_SYMBOL_GPL(comedi_pcmcia_auto_unconfig);
110
111
112
113
114
115
116
117
118
119
120int comedi_pcmcia_driver_register(struct comedi_driver *comedi_driver,
121 struct pcmcia_driver *pcmcia_driver)
122{
123 int ret;
124
125 ret = comedi_driver_register(comedi_driver);
126 if (ret < 0)
127 return ret;
128
129 ret = pcmcia_register_driver(pcmcia_driver);
130 if (ret < 0) {
131 comedi_driver_unregister(comedi_driver);
132 return ret;
133 }
134
135 return 0;
136}
137EXPORT_SYMBOL_GPL(comedi_pcmcia_driver_register);
138
139
140
141
142
143
144
145
146
147
148void comedi_pcmcia_driver_unregister(struct comedi_driver *comedi_driver,
149 struct pcmcia_driver *pcmcia_driver)
150{
151 pcmcia_unregister_driver(pcmcia_driver);
152 comedi_driver_unregister(comedi_driver);
153}
154EXPORT_SYMBOL_GPL(comedi_pcmcia_driver_unregister);
155
156static int __init comedi_pcmcia_init(void)
157{
158 return 0;
159}
160module_init(comedi_pcmcia_init);
161
162static void __exit comedi_pcmcia_exit(void)
163{
164}
165module_exit(comedi_pcmcia_exit);
166
167MODULE_AUTHOR("http://www.comedi.org");
168MODULE_DESCRIPTION("Comedi PCMCIA interface module");
169MODULE_LICENSE("GPL");
170