Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 347bb7f0 authored by Philipp Zabel's avatar Philipp Zabel Committed by Mauro Carvalho Chehab
Browse files

[media] coda: add coda_bit_stream_set_flag helper



This adds a helper function to consolidate three occurences where
the bitstream parameter stream end flag is set during operation.

Signed-off-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: default avatarKamil Debski <k.debski@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 8a82c6ba
Loading
Loading
Loading
Loading
+19 −33
Original line number Diff line number Diff line
@@ -187,6 +187,20 @@ static int coda_hw_reset(struct coda_ctx *ctx)
	return ret;
}

static void coda_bit_stream_end_flag(struct coda_ctx *ctx)
{
	struct coda_dev *dev = ctx->dev;

	ctx->bit_stream_param |= CODA_BIT_STREAM_END_FLAG;

	if ((dev->devtype->product == CODA_960) &&
	    coda_isbusy(dev) &&
	    (ctx->idx == coda_read(dev, CODA_REG_BIT_RUN_INDEX))) {
		/* If this context is currently running, update the hardware flag */
		coda_write(dev, ctx->bit_stream_param, CODA_REG_BIT_BIT_STREAM_PARAM);
	}
}

static struct coda_q_data *get_q_data(struct coda_ctx *ctx,
					 enum v4l2_buf_type type)
{
@@ -730,7 +744,6 @@ static int coda_decoder_cmd(struct file *file, void *fh,
			    struct v4l2_decoder_cmd *dc)
{
	struct coda_ctx *ctx = fh_to_ctx(fh);
	struct coda_dev *dev = ctx->dev;
	int ret;

	ret = coda_try_decoder_cmd(file, fh, dc);
@@ -741,15 +754,8 @@ static int coda_decoder_cmd(struct file *file, void *fh,
	if (ctx->inst_type != CODA_INST_DECODER)
		return 0;

	/* Set the strem-end flag on this context */
	ctx->bit_stream_param |= CODA_BIT_STREAM_END_FLAG;

	if ((dev->devtype->product == CODA_960) &&
	    coda_isbusy(dev) &&
	    (ctx->idx == coda_read(dev, CODA_REG_BIT_RUN_INDEX))) {
		/* If this context is currently running, update the hardware flag */
		coda_write(dev, ctx->bit_stream_param, CODA_REG_BIT_BIT_STREAM_PARAM);
	}
	/* Set the stream-end flag on this context */
	coda_bit_stream_end_flag(ctx);
	ctx->hold = false;
	v4l2_m2m_try_schedule(ctx->fh.m2m_ctx);

@@ -1472,7 +1478,6 @@ static int coda_buf_prepare(struct vb2_buffer *vb)
static void coda_buf_queue(struct vb2_buffer *vb)
{
	struct coda_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue);
	struct coda_dev *dev = ctx->dev;
	struct coda_q_data *q_data;

	q_data = get_q_data(ctx, vb->vb2_queue->type);
@@ -1487,15 +1492,8 @@ static void coda_buf_queue(struct vb2_buffer *vb)
		 * For backwards compatibility, queuing an empty buffer marks
		 * the stream end
		 */
		if (vb2_get_plane_payload(vb, 0) == 0) {
			ctx->bit_stream_param |= CODA_BIT_STREAM_END_FLAG;
			if ((dev->devtype->product == CODA_960) &&
			    coda_isbusy(dev) &&
			    (ctx->idx == coda_read(dev, CODA_REG_BIT_RUN_INDEX))) {
				/* if this decoder instance is running, set the stream end flag */
				coda_write(dev, ctx->bit_stream_param, CODA_REG_BIT_BIT_STREAM_PARAM);
			}
		}
		if (vb2_get_plane_payload(vb, 0) == 0)
			coda_bit_stream_end_flag(ctx);
		mutex_lock(&ctx->bitstream_mutex);
		v4l2_m2m_buf_queue(ctx->fh.m2m_ctx, vb);
		if (vb2_is_streaming(vb->vb2_queue))
@@ -2492,19 +2490,7 @@ static void coda_stop_streaming(struct vb2_queue *q)
			 "%s: output\n", __func__);
		ctx->streamon_out = 0;

		if (ctx->inst_type == CODA_INST_DECODER &&
		    coda_isbusy(dev) && ctx->idx == coda_read(dev, CODA_REG_BIT_RUN_INDEX)) {
			/* if this decoder instance is running, set the stream end flag */
			if (dev->devtype->product == CODA_960) {
				u32 val = coda_read(dev, CODA_REG_BIT_BIT_STREAM_PARAM);

				val |= CODA_BIT_STREAM_END_FLAG;
				coda_write(dev, val, CODA_REG_BIT_BIT_STREAM_PARAM);
				ctx->bit_stream_param = val;
			}
		}
		ctx->bit_stream_param |= CODA_BIT_STREAM_END_FLAG;

		coda_bit_stream_end_flag(ctx);
		ctx->isequence = 0;
	} else {
		v4l2_dbg(1, coda_debug, &dev->v4l2_dev,