diff options
Diffstat (limited to 'drivers/media/v4l2-core/videobuf2-dma-contig.c')
| -rw-r--r-- | drivers/media/v4l2-core/videobuf2-dma-contig.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c index c4e4dfa8123a..4a02ade14b4f 100644 --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c | |||
| @@ -98,6 +98,9 @@ static void *vb2_dc_vaddr(void *buf_priv) | |||
| 98 | { | 98 | { |
| 99 | struct vb2_dc_buf *buf = buf_priv; | 99 | struct vb2_dc_buf *buf = buf_priv; |
| 100 | 100 | ||
| 101 | if (!buf->vaddr && buf->db_attach) | ||
| 102 | buf->vaddr = dma_buf_vmap(buf->db_attach->dmabuf); | ||
| 103 | |||
| 101 | return buf->vaddr; | 104 | return buf->vaddr; |
| 102 | } | 105 | } |
| 103 | 106 | ||
| @@ -735,6 +738,7 @@ static int vb2_dc_map_dmabuf(void *mem_priv) | |||
| 735 | 738 | ||
| 736 | buf->dma_addr = sg_dma_address(sgt->sgl); | 739 | buf->dma_addr = sg_dma_address(sgt->sgl); |
| 737 | buf->dma_sgt = sgt; | 740 | buf->dma_sgt = sgt; |
| 741 | buf->vaddr = NULL; | ||
| 738 | 742 | ||
| 739 | return 0; | 743 | return 0; |
| 740 | } | 744 | } |
| @@ -754,6 +758,10 @@ static void vb2_dc_unmap_dmabuf(void *mem_priv) | |||
| 754 | return; | 758 | return; |
| 755 | } | 759 | } |
| 756 | 760 | ||
| 761 | if (buf->vaddr) { | ||
| 762 | dma_buf_vunmap(buf->db_attach->dmabuf, buf->vaddr); | ||
| 763 | buf->vaddr = NULL; | ||
| 764 | } | ||
| 757 | dma_buf_unmap_attachment(buf->db_attach, sgt, buf->dma_dir); | 765 | dma_buf_unmap_attachment(buf->db_attach, sgt, buf->dma_dir); |
| 758 | 766 | ||
| 759 | buf->dma_addr = 0; | 767 | buf->dma_addr = 0; |
