diff options
author | Greg Hackmann <ghackmann@google.com> | 2014-04-28 17:00:44 -0700 |
---|---|---|
committer | Greg Hackmann <ghackmann@google.com> | 2014-05-02 23:04:49 +0000 |
commit | 220471ac6b644beb64a2d62eaaca409f56e75293 (patch) | |
tree | 70468b84883f918816980f3e5747935c485d8ec3 /drivers/video | |
parent | 6cb247b4ad17862ca47cb251c23b69a2dc321e89 (diff) | |
download | edison-v3.10-220471ac6b644beb64a2d62eaaca409f56e75293.tar.gz |
video: adf: memblock: map buffer for dma
Change-Id: I4df13c8b45b57fd0594b5e7bf351a4da33a8cb11
Signed-off-by: Greg Hackmann <ghackmann@google.com>
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/adf/adf_memblock.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/video/adf/adf_memblock.c b/drivers/video/adf/adf_memblock.c index aa03809e59b..e73a7d59f1e 100644 --- a/drivers/video/adf/adf_memblock.c +++ b/drivers/video/adf/adf_memblock.c @@ -28,7 +28,7 @@ static struct sg_table *adf_memblock_map(struct dma_buf_attachment *attach, unsigned long pfn = PFN_DOWN(pdata->base); struct page *page = pfn_to_page(pfn); struct sg_table *table; - int ret; + int nents, ret; table = kzalloc(sizeof(*table), GFP_KERNEL); if (!table) @@ -36,12 +36,21 @@ static struct sg_table *adf_memblock_map(struct dma_buf_attachment *attach, ret = sg_alloc_table(table, 1, GFP_KERNEL); if (ret < 0) - goto err; + goto err_alloc; sg_set_page(table->sgl, page, attach->dmabuf->size, 0); + + nents = dma_map_sg(attach->dev, table->sgl, 1, direction); + if (!nents) { + ret = -EINVAL; + goto err_map; + } + return table; -err: +err_map: + sg_free_table(table); +err_alloc: kfree(table); return ERR_PTR(ret); } @@ -49,6 +58,7 @@ err: static void adf_memblock_unmap(struct dma_buf_attachment *attach, struct sg_table *table, enum dma_data_direction direction) { + dma_unmap_sg(attach->dev, table->sgl, 1, direction); sg_free_table(table); } |