[v2] v4l: videobuf: make poll() report proper flags for output video devices
Commit Message
According to the V4L2 specification, poll() should set POLLOUT | POLLWRNORM
flags for output devices after the frame has been displayed.
Signed-off-by: Pawel Osciak <p.osciak@samsung.com>
Reviewed-by: Kyungmin Park <kyungmin.park@samsung.com>
---
drivers/media/video/videobuf-core.c | 14 ++++++++++++--
1 files changed, 12 insertions(+), 2 deletions(-)
Comments
On Monday 29 March 2010 10:16:31 Pawel Osciak wrote:
> According to the V4L2 specification, poll() should set POLLOUT | POLLWRNORM
> flags for output devices after the frame has been displayed.
>
> Signed-off-by: Pawel Osciak <p.osciak@samsung.com>
> Reviewed-by: Kyungmin Park <kyungmin.park@samsung.com>
Looks good to me!
Reviewed-by: Hans Verkuil <hverkuil@xs4all.nl>
Regards,
Hans
> ---
> drivers/media/video/videobuf-core.c | 14 ++++++++++++--
> 1 files changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/video/videobuf-core.c b/drivers/media/video/videobuf-core.c
> index 63d7043..921277f 100644
> --- a/drivers/media/video/videobuf-core.c
> +++ b/drivers/media/video/videobuf-core.c
> @@ -1075,8 +1075,18 @@ unsigned int videobuf_poll_stream(struct file *file,
> if (0 == rc) {
> poll_wait(file, &buf->done, wait);
> if (buf->state == VIDEOBUF_DONE ||
> - buf->state == VIDEOBUF_ERROR)
> - rc = POLLIN|POLLRDNORM;
> + buf->state == VIDEOBUF_ERROR) {
> + switch (q->type) {
> + case V4L2_BUF_TYPE_VIDEO_OUTPUT:
> + case V4L2_BUF_TYPE_VBI_OUTPUT:
> + case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
> + rc = POLLOUT | POLLWRNORM;
> + break;
> + default:
> + rc = POLLIN | POLLRDNORM;
> + break;
> + }
> + }
> }
> mutex_unlock(&q->vb_lock);
> return rc;
>
@@ -1075,8 +1075,18 @@ unsigned int videobuf_poll_stream(struct file *file,
if (0 == rc) {
poll_wait(file, &buf->done, wait);
if (buf->state == VIDEOBUF_DONE ||
- buf->state == VIDEOBUF_ERROR)
- rc = POLLIN|POLLRDNORM;
+ buf->state == VIDEOBUF_ERROR) {
+ switch (q->type) {
+ case V4L2_BUF_TYPE_VIDEO_OUTPUT:
+ case V4L2_BUF_TYPE_VBI_OUTPUT:
+ case V4L2_BUF_TYPE_SLICED_VBI_OUTPUT:
+ rc = POLLOUT | POLLWRNORM;
+ break;
+ default:
+ rc = POLLIN | POLLRDNORM;
+ break;
+ }
+ }
}
mutex_unlock(&q->vb_lock);
return rc;