diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/video/gspca/gspca.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/media/video/gspca/gspca.c b/drivers/media/video/gspca/gspca.c index 4fb031cfb64f..9c9d7ea7e626 100644 --- a/drivers/media/video/gspca/gspca.c +++ b/drivers/media/video/gspca/gspca.c | |||
@@ -1503,7 +1503,7 @@ static int vidioc_reqbufs(struct file *file, void *priv, | |||
1503 | struct v4l2_requestbuffers *rb) | 1503 | struct v4l2_requestbuffers *rb) |
1504 | { | 1504 | { |
1505 | struct gspca_dev *gspca_dev = priv; | 1505 | struct gspca_dev *gspca_dev = priv; |
1506 | int i, ret = 0; | 1506 | int i, ret = 0, streaming; |
1507 | 1507 | ||
1508 | switch (rb->memory) { | 1508 | switch (rb->memory) { |
1509 | case GSPCA_MEMORY_READ: /* (internal call) */ | 1509 | case GSPCA_MEMORY_READ: /* (internal call) */ |
@@ -1538,7 +1538,8 @@ static int vidioc_reqbufs(struct file *file, void *priv, | |||
1538 | } | 1538 | } |
1539 | 1539 | ||
1540 | /* stop streaming */ | 1540 | /* stop streaming */ |
1541 | if (gspca_dev->streaming) { | 1541 | streaming = gspca_dev->streaming; |
1542 | if (streaming) { | ||
1542 | mutex_lock(&gspca_dev->usb_lock); | 1543 | mutex_lock(&gspca_dev->usb_lock); |
1543 | gspca_dev->usb_err = 0; | 1544 | gspca_dev->usb_err = 0; |
1544 | gspca_stream_off(gspca_dev); | 1545 | gspca_stream_off(gspca_dev); |
@@ -1557,6 +1558,8 @@ static int vidioc_reqbufs(struct file *file, void *priv, | |||
1557 | if (ret == 0) { | 1558 | if (ret == 0) { |
1558 | rb->count = gspca_dev->nframes; | 1559 | rb->count = gspca_dev->nframes; |
1559 | gspca_dev->capt_file = file; | 1560 | gspca_dev->capt_file = file; |
1561 | if (streaming) | ||
1562 | ret = gspca_init_transfer(gspca_dev); | ||
1560 | } | 1563 | } |
1561 | out: | 1564 | out: |
1562 | mutex_unlock(&gspca_dev->queue_lock); | 1565 | mutex_unlock(&gspca_dev->queue_lock); |