media: ti-vpe: cal: add cal_ctx_prepare/unprepare
authorTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Mon, 14 Jun 2021 11:23:17 +0000 (13:23 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Mon, 12 Jul 2021 10:37:35 +0000 (12:37 +0200)
In the following patches we need to do context configuration which might
fail. Add new functions, cal_ctx_prepare and cal_ctx_unprepare, to
handle such configuration.

[hverkuil: fix spurious newline checkpatch warning]

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/platform/ti-vpe/cal-video.c
drivers/media/platform/ti-vpe/cal.c
drivers/media/platform/ti-vpe/cal.h

index 9d0b515..f175245 100644 (file)
@@ -708,6 +708,12 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count)
                goto error_pipeline;
        }
 
+       ret = cal_ctx_prepare(ctx);
+       if (ret) {
+               ctx_err(ctx, "Failed to prepare context: %d\n", ret);
+               goto error_pipeline;
+       }
+
        spin_lock_irq(&ctx->dma.lock);
        buf = list_first_entry(&ctx->dma.queue, struct cal_buffer, list);
        ctx->dma.pending = buf;
@@ -735,6 +741,7 @@ static int cal_start_streaming(struct vb2_queue *vq, unsigned int count)
 error_stop:
        cal_ctx_stop(ctx);
        pm_runtime_put_sync(ctx->cal->dev);
+       cal_ctx_unprepare(ctx);
 
 error_pipeline:
        media_pipeline_stop(&ctx->vdev.entity);
@@ -754,6 +761,8 @@ static void cal_stop_streaming(struct vb2_queue *vq)
 
        pm_runtime_put_sync(ctx->cal->dev);
 
+       cal_ctx_unprepare(ctx);
+
        cal_release_buffers(ctx, VB2_BUF_STATE_ERROR);
 
        media_pipeline_stop(&ctx->vdev.entity);
index 2f70725..fb3d141 100644 (file)
@@ -430,6 +430,15 @@ static bool cal_ctx_wr_dma_stopped(struct cal_ctx *ctx)
        return stopped;
 }
 
+int cal_ctx_prepare(struct cal_ctx *ctx)
+{
+       return 0;
+}
+
+void cal_ctx_unprepare(struct cal_ctx *ctx)
+{
+}
+
 void cal_ctx_start(struct cal_ctx *ctx)
 {
        ctx->sequence = 0;
index af46084..09ad20f 100644 (file)
@@ -296,6 +296,8 @@ struct cal_camerarx *cal_camerarx_create(struct cal_dev *cal,
                                         unsigned int instance);
 void cal_camerarx_destroy(struct cal_camerarx *phy);
 
+int cal_ctx_prepare(struct cal_ctx *ctx);
+void cal_ctx_unprepare(struct cal_ctx *ctx);
 void cal_ctx_set_dma_addr(struct cal_ctx *ctx, dma_addr_t addr);
 void cal_ctx_start(struct cal_ctx *ctx);
 void cal_ctx_stop(struct cal_ctx *ctx);