aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <m.chehab@samsung.com>2014-05-29 08:20:13 -0400
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-06-17 11:04:47 -0400
commit4647f487083ded0d42a61bf2e066ce5328624ed3 (patch)
tree1ee5bb6b0cf671a96a12e48cf86d9be99102ca02
parent3a370222b0c514360863ec79c1481dffbbf1ddab (diff)
[media] dvbdev: add a dvb_detach() macro
The dvb_attach() was unbalanced, as there was no dvb_dettach. Ok, on current cases, the dettach is done by dvbdev, but that are some future corner cases where we may need to do this before registering the frontend. So, add a dvb_detach() and use it at dvb_frontend.c. Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
-rw-r--r--drivers/media/dvb-core/dvb_frontend.c8
-rw-r--r--drivers/media/dvb-core/dvbdev.h4
2 files changed, 8 insertions, 4 deletions
diff --git a/drivers/media/dvb-core/dvb_frontend.c b/drivers/media/dvb-core/dvb_frontend.c
index 6ce435ac866f..6cc2631d8f0e 100644
--- a/drivers/media/dvb-core/dvb_frontend.c
+++ b/drivers/media/dvb-core/dvb_frontend.c
@@ -2666,20 +2666,20 @@ void dvb_frontend_detach(struct dvb_frontend* fe)
2666 2666
2667 if (fe->ops.release_sec) { 2667 if (fe->ops.release_sec) {
2668 fe->ops.release_sec(fe); 2668 fe->ops.release_sec(fe);
2669 symbol_put_addr(fe->ops.release_sec); 2669 dvb_detach(fe->ops.release_sec);
2670 } 2670 }
2671 if (fe->ops.tuner_ops.release) { 2671 if (fe->ops.tuner_ops.release) {
2672 fe->ops.tuner_ops.release(fe); 2672 fe->ops.tuner_ops.release(fe);
2673 symbol_put_addr(fe->ops.tuner_ops.release); 2673 dvb_detach(fe->ops.tuner_ops.release);
2674 } 2674 }
2675 if (fe->ops.analog_ops.release) { 2675 if (fe->ops.analog_ops.release) {
2676 fe->ops.analog_ops.release(fe); 2676 fe->ops.analog_ops.release(fe);
2677 symbol_put_addr(fe->ops.analog_ops.release); 2677 dvb_detach(fe->ops.analog_ops.release);
2678 } 2678 }
2679 ptr = (void*)fe->ops.release; 2679 ptr = (void*)fe->ops.release;
2680 if (ptr) { 2680 if (ptr) {
2681 fe->ops.release(fe); 2681 fe->ops.release(fe);
2682 symbol_put_addr(ptr); 2682 dvb_detach(ptr);
2683 } 2683 }
2684} 2684}
2685#else 2685#else
diff --git a/drivers/media/dvb-core/dvbdev.h b/drivers/media/dvb-core/dvbdev.h
index 93a9470d3f0c..f96b28e7fc95 100644
--- a/drivers/media/dvb-core/dvbdev.h
+++ b/drivers/media/dvb-core/dvbdev.h
@@ -136,11 +136,15 @@ extern int dvb_usercopy(struct file *file, unsigned int cmd, unsigned long arg,
136 __r; \ 136 __r; \
137}) 137})
138 138
139#define dvb_detach(FUNC) symbol_put_addr(FUNC)
140
139#else 141#else
140#define dvb_attach(FUNCTION, ARGS...) ({ \ 142#define dvb_attach(FUNCTION, ARGS...) ({ \
141 FUNCTION(ARGS); \ 143 FUNCTION(ARGS); \
142}) 144})
143 145
146#define dvb_detach(FUNC) {}
147
144#endif 148#endif
145 149
146#endif /* #ifndef _DVBDEV_H_ */ 150#endif /* #ifndef _DVBDEV_H_ */