static void bttv_ir_stop(struct bttv *btv)
 {
-       if (btv->remote->polling) {
+       if (btv->remote->polling)
                del_timer_sync(&btv->remote->timer);
-               flush_scheduled_work();
-       }
 
        if (btv->remote->rc5_gpio) {
                u32 gpio;
 
                del_timer_sync(&btv->remote->timer_end);
-               flush_scheduled_work();
 
                gpio = bttv_gpio_read(&btv->c);
                bttv_gpio_write(&btv->c, gpio & ~(1 << 4));
 
                v4l2_subdev_call(dev->sd_ir, ir, rx_s_parameters, ¶ms);
                v4l2_subdev_call(dev->sd_ir, ir, rx_g_parameters, ¶ms);
        }
-
-       flush_scheduled_work();
 }
 
 static void cx23885_input_ir_close(void *priv)
 
 
        atomic_inc(&cam->reset_disable);
 
-       flush_scheduled_work();
+       flush_work_sync(&cam->sensor_reset_work);
 
        rval = videobuf_streamoff(q);
        if (!rval) {
 
        atomic_inc(&cam->reset_disable);
 
-       flush_scheduled_work();
+       flush_work_sync(&cam->sensor_reset_work);
 
        /* stop streaming capture */
        videobuf_streamoff(&fh->vbq);
         * not be scheduled anymore since streaming is already
         * disabled.)
         */
-       flush_scheduled_work();
+       flush_work_sync(&cam->sensor_reset_work);
 
        mutex_lock(&cam->mutex);
        if (atomic_dec_return(&cam->users) == 0) {
 
 
        if (NULL == dev->empress_dev)
                return 0;
-       flush_scheduled_work();
+       flush_work_sync(&dev->empress_workqueue);
        video_unregister_device(dev->empress_dev);
        dev->empress_dev = NULL;
        return 0;