|
@@ -92,7 +92,6 @@ struct sd {
|
|
|
struct v4l2_ctrl *jpegqual;
|
|
|
|
|
|
struct work_struct work;
|
|
|
- struct workqueue_struct *work_thread;
|
|
|
|
|
|
u32 pktsz; /* (used by pkt_scan) */
|
|
|
u16 npkt;
|
|
@@ -2051,8 +2050,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
|
|
|
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;
|
|
@@ -2070,12 +2067,9 @@ static void sd_stop0(struct gspca_dev *gspca_dev)
|
|
|
{
|
|
|
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)
|
|
@@ -2228,7 +2222,7 @@ static void transfer_check(struct gspca_dev *gspca_dev,
|
|
|
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 {
|