From patchwork Thu Jul 19 12:00:21 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans Verkuil X-Patchwork-Id: 1216271 Return-Path: X-Original-To: patchwork-linux-media@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 4FE60E006E for ; Thu, 19 Jul 2012 12:01:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751258Ab2GSMA5 (ORCPT ); Thu, 19 Jul 2012 08:00:57 -0400 Received: from ams-iport-4.cisco.com ([144.254.224.147]:11907 "EHLO ams-iport-4.cisco.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750832Ab2GSMAx (ORCPT ); Thu, 19 Jul 2012 08:00:53 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=hans.verkuil@cisco.com; l=1943; q=dns/txt; s=iport; t=1342699253; x=1343908853; h=from:to:cc:subject:date:message-id; bh=4wMJ3+dspPeNR4pPErT7ehl4smZMmO+cDSv91ViXo+0=; b=QmIAkbiWwYJkeWWA2RvQ0u8UhAiS468elIreoXJrJIqcUFWuxNY/S0oq RTv4F18qXflEGSsAgMaRijcZJmNWKO9F/OSYBXvUgYVx7KzMu+DE0aEB+ 7jcfU6E2qOCu0h1l8fYJHCUY/UgpAkTOJNYLarJd3JTsOyaHZud8AzPeb s=; X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: Av0EAL31B1CQ/khN/2dsb2JhbABFuUCBB4IhAQEEEgEUUhBRVxkih2ueOqAGi1WDa4McA5VEiSmEeoFmgmGBVA X-IronPort-AV: E=Sophos;i="4.77,615,1336348800"; d="scan'208";a="6755198" Received: from ams-core-4.cisco.com ([144.254.72.77]) by ams-iport-4.cisco.com with ESMTP; 19 Jul 2012 12:00:52 +0000 Received: from cobaltpc1.cisco.com (dhcp-10-54-92-107.cisco.com [10.54.92.107]) by ams-core-4.cisco.com (8.14.5/8.14.5) with ESMTP id q6JC0pxt030906; Thu, 19 Jul 2012 12:00:52 GMT From: Hans Verkuil To: linux-media@vger.kernel.org Cc: Pawel Osciak , Marek Szyprowski Subject: [RFC PATCH 3/6] v4l2-mem2mem: support events in v4l2_m2m_poll. Date: Thu, 19 Jul 2012 14:00:21 +0200 Message-Id: <3c54845122c69b570236a6e2200b2697202b85e8.1342699069.git.hans.verkuil@cisco.com> X-Mailer: git-send-email 1.7.10 In-Reply-To: <1342699224-12642-1-git-send-email-hans.verkuil@cisco.com> References: <1342699224-12642-1-git-send-email-hans.verkuil@cisco.com> In-Reply-To: <903c0da0d6e7354d6f884f0ddec783143165e54c.1342699069.git.hans.verkuil@cisco.com> References: <903c0da0d6e7354d6f884f0ddec783143165e54c.1342699069.git.hans.verkuil@cisco.com> Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org v4l2_m2m_poll didn't support events, but that's essential if you want to be able to use control events for example. Signed-off-by: Hans Verkuil --- drivers/media/video/v4l2-mem2mem.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/drivers/media/video/v4l2-mem2mem.c b/drivers/media/video/v4l2-mem2mem.c index 975d0fa..97b4831 100644 --- a/drivers/media/video/v4l2-mem2mem.c +++ b/drivers/media/video/v4l2-mem2mem.c @@ -19,6 +19,9 @@ #include #include +#include +#include +#include MODULE_DESCRIPTION("Mem to mem device framework for videobuf"); MODULE_AUTHOR("Pawel Osciak, "); @@ -407,11 +410,24 @@ EXPORT_SYMBOL_GPL(v4l2_m2m_streamoff); unsigned int v4l2_m2m_poll(struct file *file, struct v4l2_m2m_ctx *m2m_ctx, struct poll_table_struct *wait) { + struct video_device *vfd = video_devdata(file); + unsigned long req_events = poll_requested_events(wait); struct vb2_queue *src_q, *dst_q; struct vb2_buffer *src_vb = NULL, *dst_vb = NULL; unsigned int rc = 0; unsigned long flags; + if (test_bit(V4L2_FL_USES_V4L2_FH, &vfd->flags)) { + struct v4l2_fh *fh = file->private_data; + + if (v4l2_event_pending(fh)) + rc = POLLPRI; + else if (req_events & POLLPRI) + poll_wait(file, &fh->wait, wait); + if (!(req_events & (POLLOUT | POLLWRNORM | POLLIN | POLLRDNORM))) + return rc; + } + src_q = v4l2_m2m_get_src_vq(m2m_ctx); dst_q = v4l2_m2m_get_dst_vq(m2m_ctx); @@ -422,7 +438,7 @@ unsigned int v4l2_m2m_poll(struct file *file, struct v4l2_m2m_ctx *m2m_ctx, */ if ((!src_q->streaming || list_empty(&src_q->queued_list)) && (!dst_q->streaming || list_empty(&dst_q->queued_list))) { - rc = POLLERR; + rc |= POLLERR; goto end; }