[media] coda: move parameter buffer in together with context buffer allocation
authorPhilipp Zabel <p.zabel@pengutronix.de>
Tue, 24 Mar 2015 17:30:53 +0000 (14:30 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Fri, 10 Apr 2015 13:08:30 +0000 (10:08 -0300)
The parameter buffer is a per-context buffer, so we can allocate and free it
together with the other context buffers during REQBUFS.
Since this was the last context buffer allocated in coda-common.c, we can now
move coda_alloc_context_buf into coda-bit.c.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Kamil Debski <k.debski@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/platform/coda/coda-bit.c
drivers/media/platform/coda/coda-common.c
drivers/media/platform/coda/coda.h

index 5aa8d8774d0c6acd0f4241d8a2e2f7e1c7c09d25..0073f5a5b86cdb6f5cbb237519f8efc858b30844 100644 (file)
@@ -31,6 +31,7 @@
 
 #include "coda.h"
 
+#define CODA_PARA_BUF_SIZE     (10 * 1024)
 #define CODA7_PS_BUF_SIZE      0x28000
 #define CODA9_PS_SAVE_SIZE     (512 * 1024)
 
@@ -300,6 +301,14 @@ static void coda_parabuf_write(struct coda_ctx *ctx, int index, u32 value)
                p[index ^ 1] = value;
 }
 
+static inline int coda_alloc_context_buf(struct coda_ctx *ctx,
+                                        struct coda_aux_buf *buf, size_t size,
+                                        const char *name)
+{
+       return coda_alloc_aux_buf(ctx->dev, buf, size, name, ctx->debugfs_entry);
+}
+
+
 static void coda_free_framebuffers(struct coda_ctx *ctx)
 {
        int i;
@@ -380,6 +389,7 @@ static void coda_free_context_buffers(struct coda_ctx *ctx)
        coda_free_aux_buf(dev, &ctx->psbuf);
        if (dev->devtype->product != CODA_DX6)
                coda_free_aux_buf(dev, &ctx->workbuf);
+       coda_free_aux_buf(dev, &ctx->parabuf);
 }
 
 static int coda_alloc_context_buffers(struct coda_ctx *ctx,
@@ -389,6 +399,15 @@ static int coda_alloc_context_buffers(struct coda_ctx *ctx,
        size_t size;
        int ret;
 
+       if (!ctx->parabuf.vaddr) {
+               ret = coda_alloc_context_buf(ctx, &ctx->parabuf,
+                                            CODA_PARA_BUF_SIZE, "parabuf");
+               if (ret < 0) {
+                       v4l2_err(&dev->v4l2_dev, "failed to allocate parabuf");
+                       return ret;
+               }
+       }
+
        if (dev->devtype->product == CODA_DX6)
                return 0;
 
@@ -402,7 +421,7 @@ static int coda_alloc_context_buffers(struct coda_ctx *ctx,
                        v4l2_err(&dev->v4l2_dev,
                                 "failed to allocate %d byte slice buffer",
                                 ctx->slicebuf.size);
-                       return ret;
+                       goto err;
                }
        }
 
index 3a852ac6a8c39ffb14c213962e9d06db98f386b0..ae7a35148b8468b57b003ec6a7d033c552fdbdc8 100644 (file)
@@ -46,7 +46,6 @@
 #define CODADX6_MAX_INSTANCES  4
 #define CODA_MAX_FORMATS       4
 
-#define CODA_PARA_BUF_SIZE     (10 * 1024)
 #define CODA_ISRAM_SIZE        (2048 * 2)
 
 #define MIN_W 176
@@ -1715,14 +1714,6 @@ static int coda_open(struct file *file)
 
        ctx->fh.ctrl_handler = &ctx->ctrls;
 
-       if (ctx->use_bit) {
-               ret = coda_alloc_context_buf(ctx, &ctx->parabuf,
-                                            CODA_PARA_BUF_SIZE, "parabuf");
-               if (ret < 0) {
-                       v4l2_err(&dev->v4l2_dev, "failed to allocate parabuf");
-                       goto err_dma_alloc;
-               }
-       }
        mutex_init(&ctx->bitstream_mutex);
        mutex_init(&ctx->buffer_mutex);
        INIT_LIST_HEAD(&ctx->buffer_meta_list);
@@ -1736,8 +1727,6 @@ static int coda_open(struct file *file)
 
        return 0;
 
-err_dma_alloc:
-       v4l2_ctrl_handler_free(&ctx->ctrls);
 err_ctrls_setup:
        v4l2_m2m_ctx_release(ctx->fh.m2m_ctx);
 err_ctx_init:
@@ -1783,7 +1772,6 @@ static int coda_release(struct file *file)
        if (ctx->dev->devtype->product == CODA_DX6)
                coda_free_aux_buf(dev, &ctx->workbuf);
 
-       coda_free_aux_buf(dev, &ctx->parabuf);
        v4l2_ctrl_handler_free(&ctx->ctrls);
        clk_disable_unprepare(dev->clk_ahb);
        clk_disable_unprepare(dev->clk_per);
index 01d940c630b3e379f469f098a7e6400c8a5da199..2b59e1660e5831d9771173839c5254c326ce739a 100644 (file)
@@ -249,13 +249,6 @@ int coda_alloc_aux_buf(struct coda_dev *dev, struct coda_aux_buf *buf,
                       size_t size, const char *name, struct dentry *parent);
 void coda_free_aux_buf(struct coda_dev *dev, struct coda_aux_buf *buf);
 
-static inline int coda_alloc_context_buf(struct coda_ctx *ctx,
-                                        struct coda_aux_buf *buf, size_t size,
-                                        const char *name)
-{
-       return coda_alloc_aux_buf(ctx->dev, buf, size, name, ctx->debugfs_entry);
-}
-
 int coda_encoder_queue_init(void *priv, struct vb2_queue *src_vq,
                            struct vb2_queue *dst_vq);
 int coda_decoder_queue_init(void *priv, struct vb2_queue *src_vq,