struct gspca_dev gspca_dev;     /* !! must be the first item */
 
        struct work_struct work_struct;
-       struct workqueue_struct *work_thread;
 };
 
 /* Delay after which claim the next frame. If the delay is too small,
        /* Again, reset bulk in endpoint */
        usb_clear_halt(gspca_dev->dev, gspca_dev->urb[0]->pipe);
 
-       /* Start the workqueue function to do the streaming */
-       dev->work_thread = create_singlethread_workqueue(MODULE_NAME);
-       queue_work(dev->work_thread, &dev->work_struct);
+       schedule_work(&dev->work_struct);
 
        return 0;
 }
 
        /* wait for the work queue to terminate */
        mutex_unlock(&gspca_dev->usb_lock);
-       destroy_workqueue(dev->work_thread);
+       flush_work(&dev->work_struct);
        mutex_lock(&gspca_dev->usb_lock);
-       dev->work_thread = NULL;
 }
 
 /* Table of supported USB devices */