diff options
-rw-r--r-- | drivers/media/video/videobuf-dvb.c | 108 | ||||
-rw-r--r-- | include/media/videobuf-dvb.h | 10 |
2 files changed, 50 insertions, 68 deletions
diff --git a/drivers/media/video/videobuf-dvb.c b/drivers/media/video/videobuf-dvb.c index adf7674b4a02..917277d36605 100644 --- a/drivers/media/video/videobuf-dvb.c +++ b/drivers/media/video/videobuf-dvb.c | |||
@@ -133,55 +133,7 @@ static int videobuf_dvb_stop_feed(struct dvb_demux_feed *feed) | |||
133 | return err; | 133 | return err; |
134 | } | 134 | } |
135 | 135 | ||
136 | /* ------------------------------------------------------------------ */ | 136 | static int videobuf_dvb_register_adapter(struct videobuf_dvb_frontends *fe, |
137 | /* Register a single adapter and one or more frontends */ | ||
138 | int videobuf_dvb_register_bus(struct videobuf_dvb_frontends *f, | ||
139 | struct module *module, | ||
140 | void *adapter_priv, | ||
141 | struct device *device, | ||
142 | short *adapter_nr, | ||
143 | int mfe_shared) | ||
144 | { | ||
145 | struct list_head *list, *q; | ||
146 | struct videobuf_dvb_frontend *fe; | ||
147 | int res; | ||
148 | |||
149 | fe = videobuf_dvb_get_frontend(f, 1); | ||
150 | if (!fe) { | ||
151 | printk(KERN_WARNING "Unable to register the adapter which has no frontends\n"); | ||
152 | return -EINVAL; | ||
153 | } | ||
154 | |||
155 | /* Bring up the adapter */ | ||
156 | res = videobuf_dvb_register_adapter(f, module, adapter_priv, device, | ||
157 | fe->dvb.name, adapter_nr, mfe_shared); | ||
158 | if (res < 0) { | ||
159 | printk(KERN_WARNING "videobuf_dvb_register_adapter failed (errno = %d)\n", res); | ||
160 | return res; | ||
161 | } | ||
162 | |||
163 | /* Attach all of the frontends to the adapter */ | ||
164 | mutex_lock(&f->lock); | ||
165 | list_for_each_safe(list, q, &f->felist) { | ||
166 | fe = list_entry(list, struct videobuf_dvb_frontend, felist); | ||
167 | res = videobuf_dvb_register_frontend(&f->adapter, &fe->dvb); | ||
168 | if (res < 0) { | ||
169 | printk(KERN_WARNING "%s: videobuf_dvb_register_frontend failed (errno = %d)\n", | ||
170 | fe->dvb.name, res); | ||
171 | goto err; | ||
172 | } | ||
173 | } | ||
174 | mutex_unlock(&f->lock); | ||
175 | return 0; | ||
176 | |||
177 | err: | ||
178 | mutex_unlock(&f->lock); | ||
179 | videobuf_dvb_unregister_bus(f); | ||
180 | return res; | ||
181 | } | ||
182 | EXPORT_SYMBOL(videobuf_dvb_register_bus); | ||
183 | |||
184 | int videobuf_dvb_register_adapter(struct videobuf_dvb_frontends *fe, | ||
185 | struct module *module, | 137 | struct module *module, |
186 | void *adapter_priv, | 138 | void *adapter_priv, |
187 | struct device *device, | 139 | struct device *device, |
@@ -206,7 +158,7 @@ int videobuf_dvb_register_adapter(struct videobuf_dvb_frontends *fe, | |||
206 | return result; | 158 | return result; |
207 | } | 159 | } |
208 | 160 | ||
209 | int videobuf_dvb_register_frontend(struct dvb_adapter *adapter, | 161 | static int videobuf_dvb_register_frontend(struct dvb_adapter *adapter, |
210 | struct videobuf_dvb *dvb) | 162 | struct videobuf_dvb *dvb) |
211 | { | 163 | { |
212 | int result; | 164 | int result; |
@@ -294,6 +246,54 @@ fail_frontend: | |||
294 | return result; | 246 | return result; |
295 | } | 247 | } |
296 | 248 | ||
249 | /* ------------------------------------------------------------------ */ | ||
250 | /* Register a single adapter and one or more frontends */ | ||
251 | int videobuf_dvb_register_bus(struct videobuf_dvb_frontends *f, | ||
252 | struct module *module, | ||
253 | void *adapter_priv, | ||
254 | struct device *device, | ||
255 | short *adapter_nr, | ||
256 | int mfe_shared) | ||
257 | { | ||
258 | struct list_head *list, *q; | ||
259 | struct videobuf_dvb_frontend *fe; | ||
260 | int res; | ||
261 | |||
262 | fe = videobuf_dvb_get_frontend(f, 1); | ||
263 | if (!fe) { | ||
264 | printk(KERN_WARNING "Unable to register the adapter which has no frontends\n"); | ||
265 | return -EINVAL; | ||
266 | } | ||
267 | |||
268 | /* Bring up the adapter */ | ||
269 | res = videobuf_dvb_register_adapter(f, module, adapter_priv, device, | ||
270 | fe->dvb.name, adapter_nr, mfe_shared); | ||
271 | if (res < 0) { | ||
272 | printk(KERN_WARNING "videobuf_dvb_register_adapter failed (errno = %d)\n", res); | ||
273 | return res; | ||
274 | } | ||
275 | |||
276 | /* Attach all of the frontends to the adapter */ | ||
277 | mutex_lock(&f->lock); | ||
278 | list_for_each_safe(list, q, &f->felist) { | ||
279 | fe = list_entry(list, struct videobuf_dvb_frontend, felist); | ||
280 | res = videobuf_dvb_register_frontend(&f->adapter, &fe->dvb); | ||
281 | if (res < 0) { | ||
282 | printk(KERN_WARNING "%s: videobuf_dvb_register_frontend failed (errno = %d)\n", | ||
283 | fe->dvb.name, res); | ||
284 | goto err; | ||
285 | } | ||
286 | } | ||
287 | mutex_unlock(&f->lock); | ||
288 | return 0; | ||
289 | |||
290 | err: | ||
291 | mutex_unlock(&f->lock); | ||
292 | videobuf_dvb_unregister_bus(f); | ||
293 | return res; | ||
294 | } | ||
295 | EXPORT_SYMBOL(videobuf_dvb_register_bus); | ||
296 | |||
297 | void videobuf_dvb_unregister_bus(struct videobuf_dvb_frontends *f) | 297 | void videobuf_dvb_unregister_bus(struct videobuf_dvb_frontends *f) |
298 | { | 298 | { |
299 | struct list_head *list, *q; | 299 | struct list_head *list, *q; |
@@ -389,11 +389,3 @@ fail_alloc: | |||
389 | return fe; | 389 | return fe; |
390 | } | 390 | } |
391 | EXPORT_SYMBOL(videobuf_dvb_alloc_frontend); | 391 | EXPORT_SYMBOL(videobuf_dvb_alloc_frontend); |
392 | |||
393 | /* ------------------------------------------------------------------ */ | ||
394 | /* | ||
395 | * Local variables: | ||
396 | * c-basic-offset: 8 | ||
397 | * compile-command: "make DVB=1" | ||
398 | * End: | ||
399 | */ | ||
diff --git a/include/media/videobuf-dvb.h b/include/media/videobuf-dvb.h index 52ddda90d3f6..80471c2b6343 100644 --- a/include/media/videobuf-dvb.h +++ b/include/media/videobuf-dvb.h | |||
@@ -46,16 +46,6 @@ int videobuf_dvb_register_bus(struct videobuf_dvb_frontends *f, | |||
46 | 46 | ||
47 | void videobuf_dvb_unregister_bus(struct videobuf_dvb_frontends *f); | 47 | void videobuf_dvb_unregister_bus(struct videobuf_dvb_frontends *f); |
48 | 48 | ||
49 | int videobuf_dvb_register_adapter(struct videobuf_dvb_frontends *f, | ||
50 | struct module *module, | ||
51 | void *adapter_priv, | ||
52 | struct device *device, | ||
53 | char *adapter_name, | ||
54 | short *adapter_nr, | ||
55 | int mfe_shared); | ||
56 | |||
57 | int videobuf_dvb_register_frontend(struct dvb_adapter *adapter, struct videobuf_dvb *dvb); | ||
58 | |||
59 | struct videobuf_dvb_frontend * videobuf_dvb_alloc_frontend(struct videobuf_dvb_frontends *f, int id); | 49 | struct videobuf_dvb_frontend * videobuf_dvb_alloc_frontend(struct videobuf_dvb_frontends *f, int id); |
60 | 50 | ||
61 | struct videobuf_dvb_frontend * videobuf_dvb_get_frontend(struct videobuf_dvb_frontends *f, int id); | 51 | struct videobuf_dvb_frontend * videobuf_dvb_get_frontend(struct videobuf_dvb_frontends *f, int id); |