From patchwork Fri Apr 1 08:13:13 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guennadi Liakhovetski X-Patchwork-Id: 680661 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p318DMCe031440 for ; Fri, 1 Apr 2011 08:13:22 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753694Ab1DAINT (ORCPT ); Fri, 1 Apr 2011 04:13:19 -0400 Received: from moutng.kundenserver.de ([212.227.126.187]:57493 "EHLO moutng.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753614Ab1DAINQ (ORCPT ); Fri, 1 Apr 2011 04:13:16 -0400 Received: from axis700.grange (pD9EB8EBA.dip0.t-ipconnect.de [217.235.142.186]) by mrelayeu.kundenserver.de (node=mrbap4) with ESMTP (Nemesis) id 0MgNde-1QIJTA0aBS-00NepA; Fri, 01 Apr 2011 10:13:14 +0200 Received: by axis700.grange (Postfix, from userid 1000) id C8DB0189B86; Fri, 1 Apr 2011 10:13:13 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by axis700.grange (Postfix) with ESMTP id C631A189B85; Fri, 1 Apr 2011 10:13:13 +0200 (CEST) Date: Fri, 1 Apr 2011 10:13:13 +0200 (CEST) From: Guennadi Liakhovetski X-X-Sender: lyakh@axis700.grange To: Linux Media Mailing List cc: Hans Verkuil , Laurent Pinchart , Mauro Carvalho Chehab Subject: [PATCH/RFC 3/4] V4L: soc-camera: add support for new multi-size video-buffer ioctl()s In-Reply-To: Message-ID: References: MIME-Version: 1.0 X-Provags-ID: V02:K0:mee2aXx1oEL9V8aS/dH299NfSaXoHpOPGA30xrcqi6H ddSE2lucFhSTG0KMapvAIpijn6L+Od5v/xSfoErCGHYsQrOO1O sG9gy6tmvP9/XS+cY7k0vxBiyzOQ9pIfQ1W0QebUHZ55yncJqS J1S03Hn3dpQlKZKaDchmQkn3Me6eGxynC0VPxhoPx2LwXsvHze BoNgg8yjpskDkkuFMo4DaV0KrFkNhdz6GYJluVuies= Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Fri, 01 Apr 2011 08:13:23 +0000 (UTC) diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c index 11f0f1e..6a41e89 100644 --- a/drivers/media/video/soc_camera.c +++ b/drivers/media/video/soc_camera.c @@ -286,6 +286,45 @@ static int soc_camera_dqbuf(struct file *file, void *priv, return vb2_dqbuf(&icd->vb2_vidq, p, file->f_flags & O_NONBLOCK); } +static int soc_camera_create_bufs(struct file *file, void *priv, + struct v4l2_create_buffers *create) +{ + struct soc_camera_device *icd = file->private_data; + struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); + + /* videobuf2 only */ + if (ici->ops->init_videobuf) + return -EINVAL; + else + return vb2_create_bufs(&icd->vb2_vidq, create); +} + +static int soc_camera_destroy_bufs(struct file *file, void *priv, + struct v4l2_buffer_span *span) +{ + struct soc_camera_device *icd = file->private_data; + struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); + + /* videobuf2 only */ + if (ici->ops->init_videobuf) + return -EINVAL; + else + return vb2_destroy_bufs(&icd->vb2_vidq, span); +} + +static int soc_camera_submit_buf(struct file *file, void *priv, + unsigned int idx) +{ + struct soc_camera_device *icd = file->private_data; + struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); + + /* videobuf2 only */ + if (ici->ops->init_videobuf) + return -EINVAL; + else + return vb2_submit_buf(&icd->vb2_vidq, idx); +} + /* Always entered with .video_lock held */ static int soc_camera_init_user_formats(struct soc_camera_device *icd) { @@ -1420,19 +1459,22 @@ static void soc_camera_device_unregister(struct soc_camera_device *icd) static const struct v4l2_ioctl_ops soc_camera_ioctl_ops = { .vidioc_querycap = soc_camera_querycap, + .vidioc_try_fmt_vid_cap = soc_camera_try_fmt_vid_cap, .vidioc_g_fmt_vid_cap = soc_camera_g_fmt_vid_cap, - .vidioc_enum_fmt_vid_cap = soc_camera_enum_fmt_vid_cap, .vidioc_s_fmt_vid_cap = soc_camera_s_fmt_vid_cap, + .vidioc_enum_fmt_vid_cap = soc_camera_enum_fmt_vid_cap, .vidioc_enum_input = soc_camera_enum_input, .vidioc_g_input = soc_camera_g_input, .vidioc_s_input = soc_camera_s_input, .vidioc_s_std = soc_camera_s_std, .vidioc_enum_framesizes = soc_camera_enum_fsizes, .vidioc_reqbufs = soc_camera_reqbufs, - .vidioc_try_fmt_vid_cap = soc_camera_try_fmt_vid_cap, .vidioc_querybuf = soc_camera_querybuf, .vidioc_qbuf = soc_camera_qbuf, .vidioc_dqbuf = soc_camera_dqbuf, + .vidioc_create_bufs = soc_camera_create_bufs, + .vidioc_destroy_bufs = soc_camera_destroy_bufs, + .vidioc_submit_buf = soc_camera_submit_buf, .vidioc_streamon = soc_camera_streamon, .vidioc_streamoff = soc_camera_streamoff, .vidioc_queryctrl = soc_camera_queryctrl,