struct v4l2_ctrl *jpegqual;
 
        struct work_struct work;
-       struct workqueue_struct *work_thread;
 
        u32 pktsz;                      /* (used by pkt_scan) */
        u16 npkt;
        if (mode & MODE_JPEG) {
                sd->pktsz = sd->npkt = 0;
                sd->nchg = 0;
-               sd->work_thread =
-                       create_singlethread_workqueue(KBUILD_MODNAME);
        }
 
        return gspca_dev->usb_err;
 {
        struct sd *sd = (struct sd *) gspca_dev;
 
-       if (sd->work_thread != NULL) {
-               mutex_unlock(&gspca_dev->usb_lock);
-               destroy_workqueue(sd->work_thread);
-               mutex_lock(&gspca_dev->usb_lock);
-               sd->work_thread = NULL;
-       }
+       mutex_unlock(&gspca_dev->usb_lock);
+       flush_work(&sd->work);
+       mutex_lock(&gspca_dev->usb_lock);
 }
 
 static void do_autoexposure(struct gspca_dev *gspca_dev, u16 avg_lum)
                                new_qual = sd->jpegqual->maximum;
                        if (new_qual != curqual) {
                                sd->jpegqual->cur.val = new_qual;
-                               queue_work(sd->work_thread, &sd->work);
+                               schedule_work(&sd->work);
                        }
                }
        } else {