summaryrefslogtreecommitdiff
path: root/drivers/media
diff options
context:
space:
mode:
authorDavid Sin <davidsin@ti.com>2010-07-14 10:47:07 -0500
committerRicardo Perez Olivares <x0081762@ti.com>2010-09-14 19:26:28 -0500
commit51213155384827bf1870ea0e02706a49c608ceab (patch)
treeb272adae519109e00b5e403ad93b4ba527a10bce /drivers/media
parent777ee13a1951ffb62aec1aae5d652b886cd3cfdf (diff)
TILER: Corrrect PAT array allocation error handling
Signed-off-by: Bryan Wu <bryan.wu@canonical.com> Signed-off-by: David Sin <davidsin@ti.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/tiler/tiler.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/media/video/tiler/tiler.c b/drivers/media/video/tiler/tiler.c
index 3b6cef37ac65..2b8292da4467 100644
--- a/drivers/media/video/tiler/tiler.c
+++ b/drivers/media/video/tiler/tiler.c
@@ -1486,6 +1486,15 @@ static s32 __init tiler_init(void)
struct tcm *sita = NULL;
struct tmm *tmm_pat = NULL;
+ /**
+ * Array of physical pages for PAT programming, which must be a 16-byte
+ * aligned physical address
+ */
+ dmac_va = dma_alloc_coherent(NULL, TILER_WIDTH * TILER_HEIGHT *
+ sizeof(*dmac_va), &dmac_pa, GFP_ATOMIC);
+ if (!dmac_va)
+ return -ENOMEM;
+
/* Allocate tiler container manager (we share 1 on OMAP4) */
div_pt.x = TILER_WIDTH; /* hardcoded default */
div_pt.y = (3 * TILER_HEIGHT) / 4;
@@ -1503,15 +1512,6 @@ static s32 __init tiler_init(void)
TMM_SET(TILFMT_32BIT, tmm_pat);
TMM_SET(TILFMT_PAGE, tmm_pat);
- /**
- * Array of physical pages for PAT programming, which must be a 16-byte
- * aligned physical address
- */
- dmac_va = dma_alloc_coherent(NULL, TILER_WIDTH * TILER_HEIGHT *
- sizeof(*dmac_va), &dmac_pa, GFP_ATOMIC);
- if (!dmac_va)
- return -ENOMEM;
-
tiler_device = kmalloc(sizeof(*tiler_device), GFP_KERNEL);
if (!tiler_device || !sita || !tmm_pat) {
r = -ENOMEM;
@@ -1561,6 +1561,8 @@ error:
kfree(tiler_device);
tcm_deinit(sita);
tmm_deinit(tmm_pat);
+ dma_free_coherent(NULL, TILER_WIDTH * TILER_HEIGHT *
+ sizeof(*dmac_va), dmac_va, dmac_pa);
}
return r;