aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/em28xx
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2011-01-07 19:58:04 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-07 19:58:04 -0500
commit23d69b09b78c4876e134f104a3814c30747c53f1 (patch)
tree40744de4f4126c21027ce537264524095e0e7979 /drivers/media/video/em28xx
parente744070fd4ff9d3114277e52d77afa21579adce2 (diff)
parent569ff2de2e1c8ac67c8df3a7367d46d0d9460a35 (diff)
Merge branch 'for-2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq
* 'for-2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/wq: (33 commits) usb: don't use flush_scheduled_work() speedtch: don't abuse struct delayed_work media/video: don't use flush_scheduled_work() media/video: explicitly flush request_module work ioc4: use static work_struct for ioc4_load_modules() init: don't call flush_scheduled_work() from do_initcalls() s390: don't use flush_scheduled_work() rtc: don't use flush_scheduled_work() mmc: update workqueue usages mfd: update workqueue usages dvb: don't use flush_scheduled_work() leds-wm8350: don't use flush_scheduled_work() mISDN: don't use flush_scheduled_work() macintosh/ams: don't use flush_scheduled_work() vmwgfx: don't use flush_scheduled_work() tpm: don't use flush_scheduled_work() sonypi: don't use flush_scheduled_work() hvsi: don't use flush_scheduled_work() xen: don't use flush_scheduled_work() gdrom: don't use flush_scheduled_work() ... Fixed up trivial conflict in drivers/media/video/bt8xx/bttv-input.c as per Tejun.
Diffstat (limited to 'drivers/media/video/em28xx')
-rw-r--r--drivers/media/video/em28xx/em28xx-cards.c8
-rw-r--r--drivers/media/video/em28xx/em28xx-input.c2
2 files changed, 9 insertions, 1 deletions
diff --git a/drivers/media/video/em28xx/em28xx-cards.c b/drivers/media/video/em28xx/em28xx-cards.c
index 8af302b425b3..099d5df8c572 100644
--- a/drivers/media/video/em28xx/em28xx-cards.c
+++ b/drivers/media/video/em28xx/em28xx-cards.c
@@ -2690,8 +2690,14 @@ static void request_modules(struct em28xx *dev)
2690 INIT_WORK(&dev->request_module_wk, request_module_async); 2690 INIT_WORK(&dev->request_module_wk, request_module_async);
2691 schedule_work(&dev->request_module_wk); 2691 schedule_work(&dev->request_module_wk);
2692} 2692}
2693
2694static void flush_request_modules(struct em28xx *dev)
2695{
2696 flush_work_sync(&dev->request_module_wk);
2697}
2693#else 2698#else
2694#define request_modules(dev) 2699#define request_modules(dev)
2700#define flush_request_modules(dev)
2695#endif /* CONFIG_MODULES */ 2701#endif /* CONFIG_MODULES */
2696 2702
2697/* 2703/*
@@ -3118,6 +3124,8 @@ static void em28xx_usb_disconnect(struct usb_interface *interface)
3118 3124
3119 em28xx_info("disconnecting %s\n", dev->vdev->name); 3125 em28xx_info("disconnecting %s\n", dev->vdev->name);
3120 3126
3127 flush_request_modules(dev);
3128
3121 /* wait until all current v4l2 io is finished then deallocate 3129 /* wait until all current v4l2 io is finished then deallocate
3122 resources */ 3130 resources */
3123 mutex_lock(&dev->lock); 3131 mutex_lock(&dev->lock);
diff --git a/drivers/media/video/em28xx/em28xx-input.c b/drivers/media/video/em28xx/em28xx-input.c
index 29cc74441a7d..ba1ba8648c81 100644
--- a/drivers/media/video/em28xx/em28xx-input.c
+++ b/drivers/media/video/em28xx/em28xx-input.c
@@ -551,7 +551,7 @@ void em28xx_deregister_snapshot_button(struct em28xx *dev)
551{ 551{
552 if (dev->sbutton_input_dev != NULL) { 552 if (dev->sbutton_input_dev != NULL) {
553 em28xx_info("Deregistering snapshot button\n"); 553 em28xx_info("Deregistering snapshot button\n");
554 cancel_rearming_delayed_work(&dev->sbutton_query_work); 554 cancel_delayed_work_sync(&dev->sbutton_query_work);
555 input_unregister_device(dev->sbutton_input_dev); 555 input_unregister_device(dev->sbutton_input_dev);
556 dev->sbutton_input_dev = NULL; 556 dev->sbutton_input_dev = NULL;
557 } 557 }