 +		imr_tri_set_type_c(dl_vaddr, map, vbo, item_size);
 +	}
 +
-+	/* ...input is verified; lock context data */
-+	spin_lock_irqsave(&imr->lock, flags);
-+
-+	/* ...configuration index will be toggled later when job is submitted */
-+	cfg = &ctx->cfg[ctx->active_cfg ^ 1];
-+
-+    /* ...clear "apply" bit to prevent switch to the bank we are going to configure */
-+    cfg->apply = 0;
-+
-+    /* ...release context lock */
-+    spin_unlock_irqrestore(&imr->lock, flags);
-+
-+	/* ...discard pending configuration if needed (cannot do that with IRQ disabled) */
-+	if (cfg->dl_vaddr)
-+		dma_free_writecombine(imr->dev, cfg->dl_size, cfg->dl_vaddr, cfg->dl_dma_addr);
-+
-+	cfg->dl_vaddr = dl_vaddr;
-+	cfg->dl_size = dl_size;
-+	cfg->dl_start_offset = dl_start_offset;
-+	cfg->dl_dma_addr = dl_dma_addr;
-+
 +	/* ...prepare main DL-program */
-+	imr_dl_program_setup(ctx, cfg, desc.type, dl_vaddr + dl_start_offset, (u32)dl_dma_addr);
++	imr_dl_program_setup(ctx, cfg, type, dl_vaddr + dl_start_offset, (u32)dl_dma_addr);
++
++	/* ...update cropping parameters */
++	cfg->dst_subpixel = (type & IMR_MAP_DDP ? 2 : 0);
 +
 +	/* ...display list updated successfully */
-+	v4l2_dbg(2, debug, &ctx->imr->v4l2_dev, "display-list updated: %p[%08X]:%u[%u]\n",
-+		dl_vaddr, (u32)dl_dma_addr, dl_size, dl_start_offset);
-+
-+	/* ...update cropping parameters */
-+	cfg->dst_subpixel = (desc.type & IMR_MAP_DDP ? 2 : 0);
++	v4l2_dbg(2, debug, &ctx->imr->v4l2_dev, "display-list created: #%u[%08X]:%u[%u]\n",
++		cfg->id, (u32)dl_dma_addr, dl_size, dl_start_offset);
 +
 +	if (debug >= 4)
 +		print_hex_dump_bytes("DL-", DUMP_PREFIX_OFFSET, dl_vaddr + dl_start_offset, dl_size - dl_start_offset);
 +
-+    /* ...put "apply" bit in atomic fashion (overkill? - surely) */
-+	spin_lock_irqsave(&imr->lock, flags);
-+	cfg->apply = 1;
-+	spin_unlock_irqrestore(&imr->lock, flags);
-+
++	/* ...success */
 +	ret = 0;
 +
 +out:

+	.buf_prepare        = imr_buf_prepare,
+	.buf_queue          = imr_buf_queue,
+	.buf_finish         = imr_buf_finish,
+	.stop_streaming     = imr_stop_streaming,
+	.wait_prepare       = vb2_ops_wait_prepare,
+	.wait_finish        = vb2_ops_wait_finish,

+	src_vq->buf_struct_size = sizeof(struct imr_buffer);
+	src_vq->ops = &imr_qops;
+	src_vq->mem_ops = &vb2_dma_contig_memops;
+	src_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
+	src_vq->lock = &ctx->imr->mutex;
+	ret = vb2_queue_init(src_vq);
+	if (ret)
