aboutsummaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authorGreg Hackmann <ghackmann@google.com>2014-04-28 17:00:44 -0700
committerGreg Hackmann <ghackmann@google.com>2014-05-02 23:04:49 +0000
commit220471ac6b644beb64a2d62eaaca409f56e75293 (patch)
tree70468b84883f918816980f3e5747935c485d8ec3 /drivers/video
parent6cb247b4ad17862ca47cb251c23b69a2dc321e89 (diff)
downloadedison-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.c16
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);
}