@@ -617,7 +617,8 @@ static int uvc_v4l2_release(struct file *file)
uvc_ctrl_cleanup_fh(handle);
- if (handle->is_streaming)
+ if (stream->queue.queue.owner == file->private_data &&
+ uvc_queue_streaming(&stream->queue))
uvc_pm_put(stream->dev);
/* Release the file handle. */
@@ -684,7 +685,7 @@ static int uvc_ioctl_streamon(struct file *file, void *fh,
struct uvc_streaming *stream = handle->stream;
int ret;
- if (handle->is_streaming)
+ if (uvc_queue_streaming(&stream->queue))
return 0;
ret = uvc_pm_get(stream->dev);
@@ -697,8 +698,6 @@ static int uvc_ioctl_streamon(struct file *file, void *fh,
return ret;
}
- handle->is_streaming = true;
-
return 0;
}
@@ -707,16 +706,15 @@ static int uvc_ioctl_streamoff(struct file *file, void *fh,
{
struct uvc_fh *handle = fh;
struct uvc_streaming *stream = handle->stream;
+ bool was_streaming = uvc_queue_streaming(&stream->queue);
int ret;
ret = vb2_ioctl_streamoff(file, fh, type);
if (ret)
return ret;
- if (handle->is_streaming) {
- handle->is_streaming = false;
+ if (was_streaming)
uvc_pm_put(stream->dev);
- }
return 0;
}
@@ -626,7 +626,6 @@ struct uvc_fh {
struct uvc_video_chain *chain;
struct uvc_streaming *stream;
unsigned int pending_async_ctrls;
- bool is_streaming;
};
/* ------------------------------------------------------------------------
The is_streaming field is used by modular PM to know if the device is currently streaming or not. With the transition to vb2 and fop helpers, we can use vb2 functions for the same functionality. Signed-off-by: Ricardo Ribalda <ribalda@chromium.org> --- drivers/media/usb/uvc/uvc_v4l2.c | 12 +++++------- drivers/media/usb/uvc/uvcvideo.h | 1 - 2 files changed, 5 insertions(+), 8 deletions(-)