diff options
| author | Stefan Klug <stefan.klug@ideasonboard.com> | 2026-03-04 16:50:25 +0100 |
|---|---|---|
| committer | Hans Verkuil <hverkuil+cisco@kernel.org> | 2026-03-24 22:14:44 +0100 |
| commit | 21ad4e8584ae6538035976eebd569cfdf41d92df (patch) | |
| tree | 61772b5283530806a4847e20dd05d95ff4b2a23d | |
| parent | 557ec8cc29ade6c72ea768e59389db08cb7742c9 (diff) | |
media: dw100: Merge dw100_device_run and dw100_start
The dw100_start() function is only called from dw100_device_run(). As
both functions are not too big, move the code directly into
dw100_device_run() and drop dw100_start() to improve readability.
This patch contains no functional changes.
Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Xavier Roumegue <xavier.roumegue@oss.nxp.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Link: https://patch.msgid.link/20260304-sklug-v6-16-topic-dw100-v3-1-dev-v5-4-1a7e1f721b50@ideasonboard.com
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
| -rw-r--r-- | drivers/media/platform/nxp/dw100/dw100.c | 67 |
1 files changed, 30 insertions, 37 deletions
diff --git a/drivers/media/platform/nxp/dw100/dw100.c b/drivers/media/platform/nxp/dw100/dw100.c index 42748d0f0483..7787fdcdc67c 100644 --- a/drivers/media/platform/nxp/dw100/dw100.c +++ b/drivers/media/platform/nxp/dw100/dw100.c @@ -1440,25 +1440,45 @@ static irqreturn_t dw100_irq_thread_fn(int irq, void *dev_id) return IRQ_HANDLED; } -static void dw100_start(struct dw100_ctx *ctx, struct vb2_v4l2_buffer *in_vb, - struct vb2_v4l2_buffer *out_vb) +static void dw100_device_run(void *priv) { + struct dw100_ctx *ctx = priv; struct dw100_device *dw_dev = ctx->dw_dev; + struct vb2_v4l2_buffer *src_buf, *dst_buf; - out_vb->sequence = - dw100_get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)->sequence++; - in_vb->sequence = + src_buf = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); + dst_buf = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx); + + v4l2_ctrl_request_setup(src_buf->vb2_buf.req_obj.req, + &ctx->hdl); + + if (src_buf->vb2_buf.req_obj.req) + dw100_update_mapping(ctx); + else if (ctx->user_map_is_dirty) + dev_warn_once(&dw_dev->pdev->dev, + "V4L2 requests are required to update the vertex map dynamically\n"); + + /* + * As the hardware does not update any volatile controls, we can + * complete control handling before starting the dewarper. + */ + v4l2_ctrl_request_complete(src_buf->vb2_buf.req_obj.req, + &ctx->hdl); + + src_buf->sequence = dw100_get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)->sequence++; + dst_buf->sequence = + dw100_get_q_data(ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)->sequence++; - dev_dbg(&ctx->dw_dev->pdev->dev, + dev_dbg(&dw_dev->pdev->dev, "Starting queues %p->%p, sequence %u->%u\n", v4l2_m2m_get_vq(ctx->fh.m2m_ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE), v4l2_m2m_get_vq(ctx->fh.m2m_ctx, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE), - in_vb->sequence, out_vb->sequence); + src_buf->sequence, dst_buf->sequence); - v4l2_m2m_buf_copy_metadata(in_vb, out_vb); + v4l2_m2m_buf_copy_metadata(src_buf, dst_buf); /* Now, let's deal with hardware ... */ dw100_hw_master_bus_disable(dw_dev); @@ -1467,10 +1487,10 @@ static void dw100_start(struct dw100_ctx *ctx, struct vb2_v4l2_buffer *in_vb, dw100_hw_set_src_crop(dw_dev, &ctx->q_data[DW100_QUEUE_SRC], &ctx->q_data[DW100_QUEUE_DST]); dw100_hw_set_source(dw_dev, &ctx->q_data[DW100_QUEUE_SRC], - &in_vb->vb2_buf); + &src_buf->vb2_buf); dw100_hw_set_destination(dw_dev, &ctx->q_data[DW100_QUEUE_DST], ctx->q_data[DW100_QUEUE_SRC].fmt, - &out_vb->vb2_buf); + &dst_buf->vb2_buf); dw100_hw_set_mapping(dw_dev, ctx->map_dma, ctx->map_width, ctx->map_height); dw100_hw_enable_irq(dw_dev); @@ -1480,33 +1500,6 @@ static void dw100_start(struct dw100_ctx *ctx, struct vb2_v4l2_buffer *in_vb, dw100_hw_master_bus_enable(dw_dev); } -static void dw100_device_run(void *priv) -{ - struct dw100_ctx *ctx = priv; - struct vb2_v4l2_buffer *src_buf, *dst_buf; - - src_buf = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx); - dst_buf = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx); - - v4l2_ctrl_request_setup(src_buf->vb2_buf.req_obj.req, - &ctx->hdl); - - if (src_buf->vb2_buf.req_obj.req) - dw100_update_mapping(ctx); - else if (ctx->user_map_is_dirty) - dev_warn_once(&ctx->dw_dev->pdev->dev, - "V4L2 requests are required to update the vertex map dynamically\n"); - - /* - * As the hardware does not update any volatile controls, we can - * complete control handling before starting the dewarper. - */ - v4l2_ctrl_request_complete(src_buf->vb2_buf.req_obj.req, - &ctx->hdl); - - dw100_start(ctx, src_buf, dst_buf); -} - static const struct v4l2_m2m_ops dw100_m2m_ops = { .device_run = dw100_device_run, }; |
