drivers/media/platform/qcom/iris/iris_probe.c
Source file repositories/reference/linux-study-clean/drivers/media/platform/qcom/iris/iris_probe.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/media/platform/qcom/iris/iris_probe.c- Extension
.c- Size
- 9368 bytes
- Lines
- 408
- 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.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/clk.hlinux/interconnect.hlinux/module.hlinux/pm_domain.hlinux/pm_opp.hlinux/pm_runtime.hlinux/reset.hlinux/soc/qcom/ubwc.hiris_core.hiris_ctrls.hiris_vidc.h
Detected Declarations
function Copyrightfunction iris_init_power_domainsfunction of_device_is_compatiblefunction iris_init_clocksfunction iris_init_reset_tablefunction iris_init_resetsfunction iris_init_resourcesfunction iris_register_video_devicefunction iris_removefunction iris_sys_error_handlerfunction iris_probefunction iris_pm_suspendfunction iris_pm_resume
Annotated Snippet
of_device_is_compatible(core->dev->of_node, "qcom,sm8250-venus")) {
iris_opp_pd_data.num_pd_names--;
ret = devm_pm_domain_attach_list(core->dev, &iris_opp_pd_data,
&core->opp_pmdomain_tbl);
}
if (ret < 0)
return ret;
ret = devm_pm_opp_set_config(core->dev, &iris_opp_clk_data);
if (ret)
return ret;
return devm_pm_opp_of_add_table(core->dev);
}
static int iris_init_clocks(struct iris_core *core)
{
int ret;
ret = devm_clk_bulk_get_all(core->dev, &core->clock_tbl);
if (ret < 0)
return ret;
core->clk_count = ret;
return 0;
}
static int iris_init_reset_table(struct iris_core *core,
struct reset_control_bulk_data **resets,
const char * const *rst_tbl, u32 rst_tbl_size)
{
u32 i = 0;
*resets = devm_kzalloc(core->dev,
sizeof(struct reset_control_bulk_data) * rst_tbl_size,
GFP_KERNEL);
if (!*resets)
return -ENOMEM;
for (i = 0; i < rst_tbl_size; i++)
(*resets)[i].id = rst_tbl[i];
return devm_reset_control_bulk_get_exclusive(core->dev, rst_tbl_size, *resets);
}
static int iris_init_resets(struct iris_core *core)
{
int ret;
ret = iris_init_reset_table(core, &core->resets,
core->iris_platform_data->clk_rst_tbl,
core->iris_platform_data->clk_rst_tbl_size);
if (ret)
return ret;
if (!core->iris_platform_data->controller_rst_tbl_size)
return 0;
return iris_init_reset_table(core, &core->controller_resets,
core->iris_platform_data->controller_rst_tbl,
core->iris_platform_data->controller_rst_tbl_size);
}
static int iris_init_resources(struct iris_core *core)
{
int ret;
ret = iris_init_icc(core);
if (ret)
return ret;
ret = iris_init_power_domains(core);
if (ret)
return ret;
ret = iris_init_clocks(core);
if (ret)
return ret;
return iris_init_resets(core);
}
static int iris_register_video_device(struct iris_core *core, enum domain_type type)
{
struct video_device *vdev;
int ret;
vdev = video_device_alloc();
if (!vdev)
Annotation
- Immediate include surface: `linux/clk.h`, `linux/interconnect.h`, `linux/module.h`, `linux/pm_domain.h`, `linux/pm_opp.h`, `linux/pm_runtime.h`, `linux/reset.h`, `linux/soc/qcom/ubwc.h`.
- Detected declarations: `function Copyright`, `function iris_init_power_domains`, `function of_device_is_compatible`, `function iris_init_clocks`, `function iris_init_reset_table`, `function iris_init_resets`, `function iris_init_resources`, `function iris_register_video_device`, `function iris_remove`, `function iris_sys_error_handler`.
- 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.