drivers/media/platform/qcom/iris/iris_ctrls.c
Source file repositories/reference/linux-study-clean/drivers/media/platform/qcom/iris/iris_ctrls.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/platform/qcom/iris/iris_ctrls.c- Extension
.c- Size
- 46905 bytes
- Lines
- 1502
- 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.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/types.hmedia/v4l2-mem2mem.hiris_ctrls.hiris_hfi_gen1_defines.hiris_hfi_gen2_defines.hiris_instance.h
Detected Declarations
function Copyrightfunction iris_get_cap_idfunction iris_get_v4l2_idfunction iris_op_s_ctrlfunction iris_ctrls_initfunction iris_session_init_capsfunction iris_get_port_infofunction iris_set_u32_enumfunction iris_set_u32function iris_set_stagefunction iris_set_pipefunction iris_set_profilefunction iris_set_levelfunction iris_set_profile_level_gen1function iris_set_header_mode_gen1function iris_set_header_mode_gen2function iris_set_bitrate_gen1function iris_set_bitrate_gen2function iris_set_peak_bitratefunction iris_set_bitrate_mode_gen1function iris_set_bitrate_mode_gen2function iris_set_entropy_mode_gen1function iris_set_entropy_mode_gen2function iris_set_min_qpfunction iris_set_max_qpfunction iris_set_frame_qpfunction iris_set_qp_rangefunction iris_set_rotationfunction iris_set_flipfunction iris_set_ir_period_gen1function iris_set_ir_period_gen2function iris_set_ltr_count_gen1function iris_set_use_ltrfunction iris_set_mark_ltrfunction iris_set_ltr_count_gen2function iris_set_use_and_mark_ltrfunction iris_set_intra_periodfunction iris_set_layer_typefunction iris_set_layer_count_gen1function iris_set_layer_count_gen2function iris_set_layer_bitratefunction iris_set_properties
Annotated Snippet
if (ctrl_idx >= num_ctrls) {
ret = -EINVAL;
goto error;
}
if (cap[idx].flags & CAP_FLAG_MENU) {
ctrl = v4l2_ctrl_new_std_menu(&inst->ctrl_handler,
&iris_ctrl_ops,
v4l2_id,
cap[idx].max,
~(cap[idx].step_or_mask),
cap[idx].value);
} else {
ctrl = v4l2_ctrl_new_std(&inst->ctrl_handler,
&iris_ctrl_ops,
v4l2_id,
cap[idx].min,
cap[idx].max,
cap[idx].step_or_mask,
cap[idx].value);
}
if (!ctrl) {
ret = -EINVAL;
goto error;
}
ctrl_idx++;
}
if (inst->domain == DECODER) {
v4l2_ctrl_new_std(&inst->ctrl_handler, NULL,
V4L2_CID_MIN_BUFFERS_FOR_CAPTURE, 1, 32, 1, 4);
} else {
v4l2_ctrl_new_std(&inst->ctrl_handler, NULL,
V4L2_CID_MIN_BUFFERS_FOR_OUTPUT, 1, 32, 1, 4);
}
ret = inst->ctrl_handler.error;
if (ret)
goto error;
return 0;
error:
v4l2_ctrl_handler_free(&inst->ctrl_handler);
return ret;
}
void iris_session_init_caps(struct iris_core *core)
{
const struct platform_inst_fw_cap *caps;
u32 i, num_cap, cap_id;
caps = core->iris_firmware_data->inst_fw_caps_dec;
num_cap = core->iris_firmware_data->inst_fw_caps_dec_size;
for (i = 0; i < num_cap; i++) {
cap_id = caps[i].cap_id;
if (!iris_valid_cap_id(cap_id))
continue;
core->inst_fw_caps_dec[cap_id].cap_id = caps[i].cap_id;
core->inst_fw_caps_dec[cap_id].step_or_mask = caps[i].step_or_mask;
core->inst_fw_caps_dec[cap_id].flags = caps[i].flags;
core->inst_fw_caps_dec[cap_id].hfi_id = caps[i].hfi_id;
core->inst_fw_caps_dec[cap_id].set = caps[i].set;
if (cap_id == PIPE) {
core->inst_fw_caps_dec[cap_id].value =
core->iris_platform_data->num_vpp_pipe;
core->inst_fw_caps_dec[cap_id].min =
core->iris_platform_data->num_vpp_pipe;
core->inst_fw_caps_dec[cap_id].max =
core->iris_platform_data->num_vpp_pipe;
} else {
core->inst_fw_caps_dec[cap_id].min = caps[i].min;
core->inst_fw_caps_dec[cap_id].max = caps[i].max;
core->inst_fw_caps_dec[cap_id].value = caps[i].value;
}
}
caps = core->iris_firmware_data->inst_fw_caps_enc;
num_cap = core->iris_firmware_data->inst_fw_caps_enc_size;
for (i = 0; i < num_cap; i++) {
cap_id = caps[i].cap_id;
if (!iris_valid_cap_id(cap_id))
continue;
core->inst_fw_caps_enc[cap_id].cap_id = caps[i].cap_id;
Annotation
- Immediate include surface: `linux/types.h`, `media/v4l2-mem2mem.h`, `iris_ctrls.h`, `iris_hfi_gen1_defines.h`, `iris_hfi_gen2_defines.h`, `iris_instance.h`.
- Detected declarations: `function Copyright`, `function iris_get_cap_id`, `function iris_get_v4l2_id`, `function iris_op_s_ctrl`, `function iris_ctrls_init`, `function iris_session_init_caps`, `function iris_get_port_info`, `function iris_set_u32_enum`, `function iris_set_u32`, `function iris_set_stage`.
- Atlas domain: Driver Families / drivers/media.
- Implementation status: source implementation candidate.
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.