diff options
author | Andrew de Quincey <adq_dvb@lidskialf.net> | 2006-08-08 08:10:09 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2006-09-26 10:53:29 -0400 |
commit | f52a838b74be70b4054ab27e435e9acb92d8c50a (patch) | |
tree | 81b9b3dff85a069781244636c0a4cf29f0220d86 /drivers/media/dvb/dvb-core | |
parent | 2a514dea5fda67958c79f5137d4dcb272f8561e8 (diff) |
V4L/DVB (4391): Refactor dvb_detach calls into a single dvb_frontend_detach function.
Remove buggy dvb_detach() macro and replace with unified
dvb_frontend_detach() call.
Signed-off-by: Andrew de Quincey <adq_dvb@lidskialf.net>
Acked-by: Trent Piepho <xyzzy@speakeasy.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/dvb/dvb-core')
-rw-r--r-- | drivers/media/dvb/dvb-core/dvb_frontend.c | 32 | ||||
-rw-r--r-- | drivers/media/dvb/dvb-core/dvb_frontend.h | 2 | ||||
-rw-r--r-- | drivers/media/dvb/dvb-core/dvbdev.h | 18 |
3 files changed, 34 insertions, 18 deletions
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.c b/drivers/media/dvb/dvb-core/dvb_frontend.c index d544731bed7d..86dadc71cd61 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.c +++ b/drivers/media/dvb/dvb-core/dvb_frontend.c | |||
@@ -1112,3 +1112,35 @@ int dvb_unregister_frontend(struct dvb_frontend* fe) | |||
1112 | return 0; | 1112 | return 0; |
1113 | } | 1113 | } |
1114 | EXPORT_SYMBOL(dvb_unregister_frontend); | 1114 | EXPORT_SYMBOL(dvb_unregister_frontend); |
1115 | |||
1116 | #ifdef CONFIG_DVB_DETACH | ||
1117 | void dvb_frontend_detach(struct dvb_frontend* fe) | ||
1118 | { | ||
1119 | void *ptr; | ||
1120 | |||
1121 | if (fe->ops.release_sec) { | ||
1122 | fe->ops.release_sec(fe); | ||
1123 | symbol_put_addr(fe->ops.release_sec); | ||
1124 | } | ||
1125 | if (fe->ops.tuner_ops.release) { | ||
1126 | fe->ops.tuner_ops.release(fe); | ||
1127 | symbol_put_addr(fe->ops.tuner_ops.release); | ||
1128 | } | ||
1129 | ptr = (void*)fe->ops.release; | ||
1130 | if (ptr) { | ||
1131 | fe->ops.release(fe); | ||
1132 | symbol_put_addr(ptr); | ||
1133 | } | ||
1134 | } | ||
1135 | #else | ||
1136 | void dvb_frontend_detach(struct dvb_frontend* fe) | ||
1137 | { | ||
1138 | if (fe->ops.release_sec) | ||
1139 | fe->ops.release_sec(fe); | ||
1140 | if (fe->ops.tuner_ops.release) | ||
1141 | fe->ops.tuner_ops.release(fe); | ||
1142 | if (fe->ops.release) | ||
1143 | fe->ops.release(fe); | ||
1144 | } | ||
1145 | #endif | ||
1146 | EXPORT_SYMBOL(dvb_frontend_detach); | ||
diff --git a/drivers/media/dvb/dvb-core/dvb_frontend.h b/drivers/media/dvb/dvb-core/dvb_frontend.h index 6bea01af4400..e5d5028b3694 100644 --- a/drivers/media/dvb/dvb-core/dvb_frontend.h +++ b/drivers/media/dvb/dvb-core/dvb_frontend.h | |||
@@ -158,6 +158,8 @@ extern int dvb_register_frontend(struct dvb_adapter* dvb, | |||
158 | 158 | ||
159 | extern int dvb_unregister_frontend(struct dvb_frontend* fe); | 159 | extern int dvb_unregister_frontend(struct dvb_frontend* fe); |
160 | 160 | ||
161 | extern void dvb_frontend_detach(struct dvb_frontend* fe); | ||
162 | |||
161 | extern void dvb_frontend_reinitialise(struct dvb_frontend *fe); | 163 | extern void dvb_frontend_reinitialise(struct dvb_frontend *fe); |
162 | 164 | ||
163 | extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec); | 165 | extern void dvb_frontend_sleep_until(struct timeval *waketime, u32 add_usec); |
diff --git a/drivers/media/dvb/dvb-core/dvbdev.h b/drivers/media/dvb/dvb-core/dvbdev.h index 66d91e530f85..620e7887b3d3 100644 --- a/drivers/media/dvb/dvb-core/dvbdev.h +++ b/drivers/media/dvb/dvb-core/dvbdev.h | |||
@@ -102,7 +102,6 @@ extern int dvb_usercopy(struct inode *inode, struct file *file, | |||
102 | int (*func)(struct inode *inode, struct file *file, | 102 | int (*func)(struct inode *inode, struct file *file, |
103 | unsigned int cmd, void *arg)); | 103 | unsigned int cmd, void *arg)); |
104 | 104 | ||
105 | |||
106 | /** generic DVB attach function. */ | 105 | /** generic DVB attach function. */ |
107 | #ifdef CONFIG_DVB_CORE_ATTACH | 106 | #ifdef CONFIG_DVB_CORE_ATTACH |
108 | #define dvb_attach(FUNCTION, ARGS...) ({ \ | 107 | #define dvb_attach(FUNCTION, ARGS...) ({ \ |
@@ -118,28 +117,11 @@ extern int dvb_usercopy(struct inode *inode, struct file *file, | |||
118 | __r; \ | 117 | __r; \ |
119 | }) | 118 | }) |
120 | 119 | ||
121 | #define dvb_detach(FUNCPTR, ARGS...) ({ \ | ||
122 | typeof((FUNCPTR)) __funcptrtmp = FUNCPTR; \ | ||
123 | if (__funcptrtmp) { \ | ||
124 | __funcptrtmp(ARGS); \ | ||
125 | symbol_put_addr(__funcptrtmp); \ | ||
126 | } \ | ||
127 | FUNCPTR = NULL; \ | ||
128 | }) | ||
129 | |||
130 | #else | 120 | #else |
131 | #define dvb_attach(FUNCTION, ARGS...) ({ \ | 121 | #define dvb_attach(FUNCTION, ARGS...) ({ \ |
132 | FUNCTION(ARGS); \ | 122 | FUNCTION(ARGS); \ |
133 | }) | 123 | }) |
134 | 124 | ||
135 | #define dvb_detach(FUNCPTR, ARGS...) \ | ||
136 | do { \ | ||
137 | if (FUNCPTR) \ | ||
138 | FUNCPTR(ARGS); \ | ||
139 | FUNCPTR = NULL; \ | ||
140 | } while(0) | ||
141 | |||
142 | #endif | 125 | #endif |
143 | 126 | ||
144 | |||
145 | #endif /* #ifndef _DVBDEV_H_ */ | 127 | #endif /* #ifndef _DVBDEV_H_ */ |