This patch adds the support for 'get_unmapped_area' in UVC gadget
which is called when the 'mmap' system call is executed on MMUless
architectures.

Signed-off-by: Bhupesh Sharma <bhupesh.sha...@st.com>
Acked-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
---
 drivers/usb/gadget/uvc_queue.c |   18 ++++++++++++++++++
 drivers/usb/gadget/uvc_v4l2.c  |   15 +++++++++++++++
 2 files changed, 33 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/gadget/uvc_queue.c b/drivers/usb/gadget/uvc_queue.c
index 3139795..7ce27e3 100644
--- a/drivers/usb/gadget/uvc_queue.c
+++ b/drivers/usb/gadget/uvc_queue.c
@@ -232,6 +232,24 @@ static int uvc_queue_mmap(struct uvc_video_queue *queue,
        return ret;
 }
 
+#ifndef CONFIG_MMU
+/*
+ * Get unmapped area.
+ *
+ * NO-MMU arch need this function to make mmap() work correctly.
+ */
+static unsigned long uvc_queue_get_unmapped_area(struct uvc_video_queue *queue,
+               unsigned long pgoff)
+{
+       unsigned long ret;
+
+       mutex_lock(&queue->mutex);
+       ret = vb2_get_unmapped_area(&queue->queue, 0, 0, pgoff, 0);
+       mutex_unlock(&queue->mutex);
+       return ret;
+}
+#endif
+
 /*
  * Cancel the video buffers queue.
  *
diff --git a/drivers/usb/gadget/uvc_v4l2.c b/drivers/usb/gadget/uvc_v4l2.c
index 7d91740..b83d0ad 100644
--- a/drivers/usb/gadget/uvc_v4l2.c
+++ b/drivers/usb/gadget/uvc_v4l2.c
@@ -340,6 +340,18 @@ uvc_v4l2_poll(struct file *file, poll_table *wait)
        return uvc_queue_poll(&uvc->video.queue, file, wait);
 }
 
+#ifndef CONFIG_MMU
+static unsigned long uvc_v4l2_get_unmapped_area(struct file *file,
+               unsigned long addr, unsigned long len, unsigned long pgoff,
+               unsigned long flags)
+{
+       struct video_device *vdev = video_devdata(file);
+       struct uvc_device *uvc = video_get_drvdata(vdev);
+
+       return uvc_queue_get_unmapped_area(&uvc->video.queue, pgoff);
+}
+#endif
+
 static struct v4l2_file_operations uvc_v4l2_fops = {
        .owner          = THIS_MODULE,
        .open           = uvc_v4l2_open,
@@ -347,5 +359,8 @@ static struct v4l2_file_operations uvc_v4l2_fops = {
        .ioctl          = uvc_v4l2_ioctl,
        .mmap           = uvc_v4l2_mmap,
        .poll           = uvc_v4l2_poll,
+#ifndef CONFIG_MMU
+       .get_unmapped_area = uvc_v4l2_get_unmapped_area,
+#endif
 };
 
-- 
1.7.2.2

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to