diff options
Diffstat (limited to 'drivers/media/video/gspca/gspca.c')
-rw-r--r-- | drivers/media/video/gspca/gspca.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/drivers/media/video/gspca/gspca.c b/drivers/media/video/gspca/gspca.c index b7cb9977f778..38b124ec23a3 100644 --- a/drivers/media/video/gspca/gspca.c +++ b/drivers/media/video/gspca/gspca.c @@ -595,6 +595,7 @@ static int gspca_set_alt0(struct gspca_dev *gspca_dev) static void gspca_stream_off(struct gspca_dev *gspca_dev) { gspca_dev->streaming = 0; + gspca_dev->usb_err = 0; if (gspca_dev->sd_desc->stopN) gspca_dev->sd_desc->stopN(gspca_dev); destroy_urbs(gspca_dev); @@ -1331,10 +1332,8 @@ static int dev_close(struct file *file) /* if the file did the capture, free the streaming resources */ if (gspca_dev->capt_file == file) { - if (gspca_dev->streaming) { - gspca_dev->usb_err = 0; + if (gspca_dev->streaming) gspca_stream_off(gspca_dev); - } frame_free(gspca_dev); } module_put(gspca_dev->module); @@ -1569,7 +1568,6 @@ static int vidioc_reqbufs(struct file *file, void *priv, /* stop streaming */ streaming = gspca_dev->streaming; if (streaming) { - gspca_dev->usb_err = 0; gspca_stream_off(gspca_dev); /* Don't restart the stream when switching from read @@ -1675,7 +1673,6 @@ static int vidioc_streamoff(struct file *file, void *priv, } /* stop streaming */ - gspca_dev->usb_err = 0; gspca_stream_off(gspca_dev); /* In case another thread is waiting in dqbuf */ wake_up_interruptible(&gspca_dev->wq); |