|
@@ -54,7 +54,6 @@ struct sd {
|
|
|
u32 exposure;
|
|
|
|
|
|
struct work_struct work;
|
|
|
- struct workqueue_struct *work_thread;
|
|
|
|
|
|
u32 pktsz; /* (used by pkt_scan) */
|
|
|
u16 npkt;
|
|
@@ -2485,7 +2484,6 @@ static int sd_start(struct gspca_dev *gspca_dev)
|
|
|
|
|
|
sd->pktsz = sd->npkt = 0;
|
|
|
sd->nchg = sd->short_mark = 0;
|
|
|
- sd->work_thread = create_singlethread_workqueue(MODULE_NAME);
|
|
|
|
|
|
return gspca_dev->usb_err;
|
|
|
}
|
|
@@ -2569,12 +2567,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_autogain(struct gspca_dev *gspca_dev)
|
|
@@ -2785,7 +2780,7 @@ marker_found:
|
|
|
new_qual = QUALITY_MAX;
|
|
|
if (new_qual != sd->quality) {
|
|
|
sd->quality = new_qual;
|
|
|
- queue_work(sd->work_thread, &sd->work);
|
|
|
+ schedule_work(&sd->work);
|
|
|
}
|
|
|
}
|
|
|
} else {
|