summaryrefslogtreecommitdiff
path: root/drivers/media
diff options
context:
space:
mode:
authorJason Chen <b02280@freescale.com>2011-11-08 14:07:14 +0800
committerJason Liu <r64343@freescale.com>2012-01-09 21:05:27 +0800
commitb24fbd1404b97b783175e13004000488a0c0e3e7 (patch)
tree8270a13d4462b6b090732d37e6d01c0c1eb96299 /drivers/media
parent583ebed51f7dec95cbdc90ff238e37eadc1913f2 (diff)
ENGR00161607 mxc v4l2 output: return real phys offset after mmap
vpu unit test failed because it need phys offset of each buffer allocated by v4l2 output driver. videobuf dma contig method only allocate real dma buffer when user call mmap. Fix this issue by adding code to querybuf ioctl, return real phys after buffer mmaped. Signed-off-by: Jason Chen <b02280@freescale.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/mxc/output/mxc_vout.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/media/video/mxc/output/mxc_vout.c b/drivers/media/video/mxc/output/mxc_vout.c
index 8596b42d6ca5..6c7e42f14814 100644
--- a/drivers/media/video/mxc/output/mxc_vout.c
+++ b/drivers/media/video/mxc/output/mxc_vout.c
@@ -1106,9 +1106,18 @@ static int mxc_vidioc_reqbufs(struct file *file, void *fh,
static int mxc_vidioc_querybuf(struct file *file, void *fh,
struct v4l2_buffer *b)
{
+ int ret;
struct mxc_vout_output *vout = fh;
- return videobuf_querybuf(&vout->vbq, b);
+ ret = videobuf_querybuf(&vout->vbq, b);
+ if (!ret) {
+ /* return physical address */
+ struct videobuf_buffer *vb = vout->vbq.bufs[b->index];
+ if (b->flags & V4L2_BUF_FLAG_MAPPED)
+ b->m.offset = videobuf_to_dma_contig(vb);
+ }
+
+ return ret;
}
static int mxc_vidioc_qbuf(struct file *file, void *fh,