drivers/media/platform/qcom/iris/iris_vb2.c
Source file repositories/reference/linux-study-clean/drivers/media/platform/qcom/iris/iris_vb2.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/platform/qcom/iris/iris_vb2.c- Extension
.c- Size
- 7786 bytes
- Lines
- 346
- Domain
- Driver Families
- Bucket
- drivers/media
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Uses kernel synchronization; read lock ordering, sleepability, and interrupt context assumptions before translating.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
media/videobuf2-dma-contig.hmedia/v4l2-event.hmedia/v4l2-mem2mem.hiris_common.hiris_instance.hiris_vb2.hiris_vdec.hiris_venc.hiris_power.h
Detected Declarations
function Copyrightfunction iris_check_resolution_supportedfunction iris_check_session_supportedfunction list_for_each_entryfunction iris_vb2_buf_initfunction iris_vb2_queue_setupfunction iris_vb2_start_streamingfunction iris_vb2_stop_streamingfunction iris_vb2_buf_preparefunction iris_vb2_buf_out_validatefunction iris_vb2_buf_queue
Annotated Snippet
if (ret) {
ret = -EINVAL;
dev_err(core->dev, "session open failed\n");
goto unlock;
}
ret = iris_inst_change_state(inst, IRIS_INST_INIT);
if (ret)
goto unlock;
}
*num_planes = 1;
sizes[0] = f->fmt.pix_mp.plane_fmt[0].sizeimage;
unlock:
mutex_unlock(&inst->lock);
return ret;
}
int iris_vb2_start_streaming(struct vb2_queue *q, unsigned int count)
{
enum iris_buffer_type buf_type;
struct iris_inst *inst;
int ret = 0;
inst = vb2_get_drv_priv(q);
mutex_lock(&inst->lock);
if (inst->state == IRIS_INST_ERROR) {
ret = -EBUSY;
goto error;
}
if (!V4L2_TYPE_IS_OUTPUT(q->type) &&
!V4L2_TYPE_IS_CAPTURE(q->type)) {
ret = -EINVAL;
goto error;
}
iris_scale_power(inst);
ret = iris_check_session_supported(inst);
if (ret)
goto error;
if (V4L2_TYPE_IS_OUTPUT(q->type)) {
if (inst->domain == DECODER)
ret = iris_vdec_streamon_input(inst);
else
ret = iris_venc_streamon_input(inst);
} else if (V4L2_TYPE_IS_CAPTURE(q->type)) {
if (inst->domain == DECODER)
ret = iris_vdec_streamon_output(inst);
else
ret = iris_venc_streamon_output(inst);
}
if (ret)
goto error;
buf_type = iris_v4l2_type_to_driver(q->type);
if (inst->domain == DECODER) {
if (buf_type == BUF_INPUT)
ret = iris_queue_deferred_buffers(inst, BUF_INPUT);
if (!ret && inst->state == IRIS_INST_STREAMING) {
ret = iris_queue_internal_deferred_buffers(inst, BUF_DPB);
if (!ret)
ret = iris_queue_deferred_buffers(inst, BUF_OUTPUT);
}
} else {
if (inst->state == IRIS_INST_STREAMING) {
ret = iris_queue_deferred_buffers(inst, BUF_INPUT);
if (!ret)
ret = iris_queue_deferred_buffers(inst, BUF_OUTPUT);
}
}
if (ret)
goto error;
mutex_unlock(&inst->lock);
return ret;
error:
iris_helper_buffers_done(inst, q->type, VB2_BUF_STATE_QUEUED);
iris_inst_change_state(inst, IRIS_INST_ERROR);
mutex_unlock(&inst->lock);
Annotation
- Immediate include surface: `media/videobuf2-dma-contig.h`, `media/v4l2-event.h`, `media/v4l2-mem2mem.h`, `iris_common.h`, `iris_instance.h`, `iris_vb2.h`, `iris_vdec.h`, `iris_venc.h`.
- Detected declarations: `function Copyright`, `function iris_check_resolution_supported`, `function iris_check_session_supported`, `function list_for_each_entry`, `function iris_vb2_buf_init`, `function iris_vb2_queue_setup`, `function iris_vb2_start_streaming`, `function iris_vb2_stop_streaming`, `function iris_vb2_buf_prepare`, `function iris_vb2_buf_out_validate`.
- Atlas domain: Driver Families / drivers/media.
- Implementation status: source implementation candidate.
- Synchronization appears in or near this file; preserve lock ordering, sleepability, and interrupt-context constraints.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.