summaryrefslogtreecommitdiff
path: root/drivers/media/video/videobuf-dvb.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2008-10-23 16:59:29 (GMT)
committerLinus Torvalds <torvalds@linux-foundation.org>2008-10-23 16:59:29 (GMT)
commit296e1ce0dc36bb106c139e25482d02da43c70e71 (patch)
treeb473ef8735dbdf437ae8caf1bb0e742e9fda342a /drivers/media/video/videobuf-dvb.c
parentb14ea38e13686799b9d2545d467a0ec84732981c (diff)
parentbecd43056c8f65e3b8510b1a8a0940683ee185a2 (diff)
downloadlinux-fsl-qoriq-296e1ce0dc36bb106c139e25482d02da43c70e71.tar.xz
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (36 commits) V4L/DVB (9336): cx88: always de-alloc frontends on fault condition V4L/DVB (9335): videobuf: split unregister bus creating self-contained frontend de-allocator V4L/DVB (9334): cx88: dvb_remove debug output V4L/DVB (9333): cx88: Not all boards that requires cx88-mpeg has frontends V4L/DVB (9332): cx88: initial fix for analogue only compilation V4L/DVB (9331): Remove unused inode parameter from video_ioctl2 V4L/DVB (9330): Get rid of inode parameter at v4l_compat_translate_ioctl() V4L/DVB (9328): ivtvfb: FB_BLANK_POWERDOWN turns off video output V4L/DVB (9327): v4l: use video_device.num instead of minor in video%d V4L/DVB (9326): ivtv: avoid green flashing when loading ivtv V4L/DVB (9325): ivtv: switch to unlocked_ioctl. V4L/DVB (9324): v4l2: add video_ioctl2_unlocked for unlocked_ioctl support. V4L/DVB (9323): v4l2-int-if: Add enum_framesizes and enum_frameintervals ioctls. V4L/DVB (9322): v4l2-int-if: Export more interfaces to modules V4L/DVB (9321): v4l2-int-if: Define new power state changes V4L/DVB (9320): v4l2: Add 10-bit RAW Bayer formats V4L/DVB (9319): v4l2-int-if: Add cropcap, g_crop and s_crop commands. V4L/DVB (9318): v4l2-int-if: Add command to get slave private data. V4L/DVB (9316): s5h1411: Power down s5h1411 when not in use V4L/DVB (9315): s5h1411: Skip reconfiguring demod modulation if already at the desired modulation ...
Diffstat (limited to 'drivers/media/video/videobuf-dvb.c')
-rw-r--r--drivers/media/video/videobuf-dvb.c52
1 files changed, 29 insertions, 23 deletions
diff --git a/drivers/media/video/videobuf-dvb.c b/drivers/media/video/videobuf-dvb.c
index 917277d..0e7dcba 100644
--- a/drivers/media/video/videobuf-dvb.c
+++ b/drivers/media/video/videobuf-dvb.c
@@ -296,29 +296,7 @@ EXPORT_SYMBOL(videobuf_dvb_register_bus);
void videobuf_dvb_unregister_bus(struct videobuf_dvb_frontends *f)
{
- struct list_head *list, *q;
- struct videobuf_dvb_frontend *fe;
-
- mutex_lock(&f->lock);
- list_for_each_safe(list, q, &f->felist) {
- fe = list_entry(list, struct videobuf_dvb_frontend, felist);
- if (fe->dvb.net.dvbdev) {
- dvb_net_release(&fe->dvb.net);
- fe->dvb.demux.dmx.remove_frontend(&fe->dvb.demux.dmx,
- &fe->dvb.fe_mem);
- fe->dvb.demux.dmx.remove_frontend(&fe->dvb.demux.dmx,
- &fe->dvb.fe_hw);
- dvb_dmxdev_release(&fe->dvb.dmxdev);
- dvb_dmx_release(&fe->dvb.demux);
- dvb_unregister_frontend(fe->dvb.frontend);
- }
- if (fe->dvb.frontend)
- /* always allocated, may have been reset */
- dvb_frontend_detach(fe->dvb.frontend);
- list_del(list);
- kfree(fe);
- }
- mutex_unlock(&f->lock);
+ videobuf_dvb_dealloc_frontends(f);
dvb_unregister_adapter(&f->adapter);
}
@@ -389,3 +367,31 @@ fail_alloc:
return fe;
}
EXPORT_SYMBOL(videobuf_dvb_alloc_frontend);
+
+void videobuf_dvb_dealloc_frontends(struct videobuf_dvb_frontends *f)
+{
+ struct list_head *list, *q;
+ struct videobuf_dvb_frontend *fe;
+
+ mutex_lock(&f->lock);
+ list_for_each_safe(list, q, &f->felist) {
+ fe = list_entry(list, struct videobuf_dvb_frontend, felist);
+ if (fe->dvb.net.dvbdev) {
+ dvb_net_release(&fe->dvb.net);
+ fe->dvb.demux.dmx.remove_frontend(&fe->dvb.demux.dmx,
+ &fe->dvb.fe_mem);
+ fe->dvb.demux.dmx.remove_frontend(&fe->dvb.demux.dmx,
+ &fe->dvb.fe_hw);
+ dvb_dmxdev_release(&fe->dvb.dmxdev);
+ dvb_dmx_release(&fe->dvb.demux);
+ dvb_unregister_frontend(fe->dvb.frontend);
+ }
+ if (fe->dvb.frontend)
+ /* always allocated, may have been reset */
+ dvb_frontend_detach(fe->dvb.frontend);
+ list_del(list); /* remove list entry */
+ kfree(fe); /* free frontend allocation */
+ }
+ mutex_unlock(&f->lock);
+}
+EXPORT_SYMBOL(videobuf_dvb_dealloc_frontends);