From patchwork Tue Mar 8 00:54:51 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Aguirre Rodriguez, Sergio Alberto" X-Patchwork-Id: 6032 Return-path: Envelope-to: mchehab@pedra Delivery-date: Tue, 08 Mar 2011 07:29:09 -0300 Received: from mchehab by pedra with local (Exim 4.72) (envelope-from ) id 1PwuA9-0007Lb-0Z for mchehab@pedra; Tue, 08 Mar 2011 07:29:09 -0300 Received: from casper.infradead.org [85.118.1.10] by pedra with IMAP (fetchmail-6.3.17) for (single-drop); Tue, 08 Mar 2011 07:29:09 -0300 (BRT) Received: from vger.kernel.org ([209.132.180.67]) by casper.infradead.org with esmtp (Exim 4.72 #1 (Red Hat Linux)) id 1PwlCU-0002G6-9W; Tue, 08 Mar 2011 00:54:58 +0000 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753789Ab1CHAy4 (ORCPT + 1 other); Mon, 7 Mar 2011 19:54:56 -0500 Received: from bear.ext.ti.com ([192.94.94.41]:60983 "EHLO bear.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752016Ab1CHAy4 (ORCPT ); Mon, 7 Mar 2011 19:54:56 -0500 Received: from dlep35.itg.ti.com ([157.170.170.118]) by bear.ext.ti.com (8.13.7/8.13.7) with ESMTP id p280ssjC013120 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Mon, 7 Mar 2011 18:54:54 -0600 Received: from legion.dal.design.ti.com (localhost [127.0.0.1]) by dlep35.itg.ti.com (8.13.7/8.13.7) with ESMTP id p280sr82021547; Mon, 7 Mar 2011 18:54:53 -0600 (CST) Received: from localhost (x0091359-ubuntu-3.am.dhcp.ti.com [10.247.18.164]) by legion.dal.design.ti.com (8.11.7p1+Sun/8.11.7) with ESMTP id p280srf28644; Mon, 7 Mar 2011 18:54:53 -0600 (CST) From: Sergio Aguirre To: g.liakhovetski@gmx.de Cc: linux-media@vger.kernel.org, Sergio Aguirre Subject: [PATCH] V4L: soc-camera: Add support for custom host mmap Date: Mon, 7 Mar 2011 18:54:51 -0600 Message-Id: <1299545691-917-1-git-send-email-saaguirre@ti.com> X-Mailer: git-send-email 1.7.1 Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org Sender: This helps redirect mmap calls to custom memory managers which already have preallocated space to use by the device. Otherwise, device might not support the allocation attempted generically by videobuf. Signed-off-by: Sergio Aguirre --- drivers/media/video/soc_camera.c | 7 ++++++- include/media/soc_camera.h | 2 ++ 2 files changed, 8 insertions(+), 1 deletions(-) diff --git a/drivers/media/video/soc_camera.c b/drivers/media/video/soc_camera.c index 59dc71d..d361ba0 100644 --- a/drivers/media/video/soc_camera.c +++ b/drivers/media/video/soc_camera.c @@ -512,6 +512,7 @@ static ssize_t soc_camera_read(struct file *file, char __user *buf, static int soc_camera_mmap(struct file *file, struct vm_area_struct *vma) { struct soc_camera_device *icd = file->private_data; + struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); int err; dev_dbg(&icd->dev, "mmap called, vma=0x%08lx\n", (unsigned long)vma); @@ -519,7 +520,11 @@ static int soc_camera_mmap(struct file *file, struct vm_area_struct *vma) if (icd->streamer != file) return -EBUSY; - err = videobuf_mmap_mapper(&icd->vb_vidq, vma); + /* Check for an interface custom mmaper */ + if (ici->ops->mmap) + err = ici->ops->mmap(&icd->vb_vidq, icd, vma); + else + err = videobuf_mmap_mapper(&icd->vb_vidq, vma); dev_dbg(&icd->dev, "vma start=0x%08lx, size=%ld, ret=%d\n", (unsigned long)vma->vm_start, diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h index de81370..11350c2 100644 --- a/include/media/soc_camera.h +++ b/include/media/soc_camera.h @@ -87,6 +87,8 @@ struct soc_camera_host_ops { int (*set_ctrl)(struct soc_camera_device *, struct v4l2_control *); int (*get_parm)(struct soc_camera_device *, struct v4l2_streamparm *); int (*set_parm)(struct soc_camera_device *, struct v4l2_streamparm *); + int (*mmap)(struct videobuf_queue *, struct soc_camera_device *, + struct vm_area_struct *); unsigned int (*poll)(struct file *, poll_table *); const struct v4l2_queryctrl *controls; int num_controls;