# qualcomm-linux/camera-driver architecture

> Architecture diagram of the GitHub repository qualcomm-linux/camera-driver, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/qualcomm-linux/camera-driver
- Repository: https://github.com/qualcomm-linux/camera-driver

## Overview

This is a Qualcomm Linux camera-driver stack: camera device nodes and contexts manage acquisition, configuration, streaming requests, and completion for camera hardware. The common context layer dispatches operations through state-specific callbacks; ISP request handling tracks requests and forwards hardware work, while packet parsing invokes hardware command operations. The tree also contains distinct processing engines and shared hardware services. The README is empty, and sampled source is partial, so the graph emphasizes evidenced dispatch and calls; it does not infer wiring between unsampled engines or IRQ clients.

Main entry points: [`camera/drivers/cam_core/cam_context.c`](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_core/cam_context.c) (Context Dispatcher), [`camera/drivers/cam_isp/isp_hw_mgr/cam_isp_hw_mgr.c`](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/isp_hw_mgr/cam_isp_hw_mgr.c) (ISP Hardware Manager), [`camera/drivers/cam_isp/cam_isp_context.c`](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/cam_isp_context.c) (ISP Context), [`camera/drivers/cam_cust/cam_custom_context.c`](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_cust/cam_custom_context.c) (Custom Context)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_core["Camera Core"]
  node_context["Context Dispatcher<br/>[cam_context.c]"]
  node_context_api["Context Interface<br/>[cam_context.h]"]
end

subgraph group_isp["ISP Pipeline"]
  node_isp_context["ISP Context<br/>[cam_isp_context.c]"]
  node_isp_device["ISP Device<br/>[cam_isp_dev.c]"]
  node_isp_manager["ISP Hardware Manager<br/>[cam_isp_hw_mgr.c]"]
  node_ife_manager["IFE Manager<br/>[cam_ife_hw_mgr.c]"]
  node_tfe_manager["TFE Manager<br/>[cam_tfe_hw_mgr.c]"]
  node_packet_parser["ISP Packet Parser"]
  node_irq_controller["IRQ Controller"]
end

subgraph group_engines["Processing Engines"]
  node_icp_context["ICP Context<br/>[cam_icp_context.c]"]
  node_icp_manager["ICP Hardware Manager<br/>[cam_icp_hw_mgr.c]"]
  node_cre_manager["CRE Hardware Manager<br/>[cam_cre_hw_mgr.c]"]
  node_fd_manager["Face Detect Manager<br/>[cam_fd_hw_mgr.c]"]
  node_jpeg_manager["JPEG Hardware Manager<br/>[cam_jpeg_hw_mgr.c]"]
  node_lrme_manager["LRME Hardware Manager<br/>[cam_lrme_hw_mgr.c]"]
  node_custom_context["Custom Context"]
  node_custom_manager["Custom Hardware Manager"]
end

subgraph group_services["Hardware Services"]
  node_cdm["Command DMA<br/>[cam_cdm_intf.c]"]
  node_cpas["Camera Power Service<br/>[cam_cpas_intf.c]"]
end

node_client(("Camera Client"))

node_client -->|"issues commands"| node_context
node_context -->|"uses interface"| node_context_api
node_context -->|"dispatches callbacks"| node_isp_context
node_isp_context -->|"submits hardware work"| node_isp_manager
node_isp_context -->|"prepares requests"| node_packet_parser
node_packet_parser -->|"calls hardware ops"| node_isp_manager
node_isp_manager -->|"dispatches IFE"| node_ife_manager
node_isp_manager -->|"dispatches TFE"| node_tfe_manager
node_icp_context -->|"uses context services"| node_context
node_custom_context -->|"initializes base context"| node_context
node_custom_context -->|"calls hardware interface"| node_custom_manager

click node_context "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_core/cam_context.c"
click node_context_api "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_core/cam_context.h"
click node_isp_context "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/cam_isp_context.c"
click node_isp_device "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/cam_isp_dev.c"
click node_isp_manager "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/isp_hw_mgr/cam_isp_hw_mgr.c"
click node_ife_manager "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c"
click node_tfe_manager "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/isp_hw_mgr/cam_tfe_hw_mgr.c"
click node_packet_parser "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/isp_hw_mgr/hw_utils/cam_isp_packet_parser.c"
click node_irq_controller "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/isp_hw_mgr/hw_utils/irq_controller/cam_irq_controller.c"
click node_icp_context "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_icp/cam_icp_context.c"
click node_icp_manager "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_icp/icp_hw/icp_hw_mgr/cam_icp_hw_mgr.c"
click node_cre_manager "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_cre/cam_cre_hw_mgr/cam_cre_hw_mgr.c"
click node_fd_manager "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.c"
click node_jpeg_manager "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_jpeg/jpeg_hw/cam_jpeg_hw_mgr.c"
click node_lrme_manager "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_lrme/lrme_hw_mgr/cam_lrme_hw_mgr.c"
click node_custom_context "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_cust/cam_custom_context.c"
click node_custom_manager "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_cust/cam_custom_hw_mgr/cam_custom_hw_mgr.c"
click node_cdm "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_cdm/cam_cdm_intf.c"
click node_cpas "https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_cpas/cam_cpas_intf.c"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_context,node_context_api,node_client toneBlue
class node_isp_context,node_isp_device,node_isp_manager,node_ife_manager,node_tfe_manager,node_packet_parser,node_irq_controller toneAmber
class node_icp_context,node_icp_manager,node_cre_manager,node_fd_manager,node_jpeg_manager,node_lrme_manager,node_custom_context,node_custom_manager toneMint
class node_cdm,node_cpas toneRose
```

## Components

### Camera Core

- [Context Dispatcher](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_core/cam_context.c): `camera/drivers/cam_core/cam_context.c`
- [Context Interface](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_core/cam_context.h): `camera/drivers/cam_core/cam_context.h`

### ISP Pipeline

- [ISP Context](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/cam_isp_context.c): `camera/drivers/cam_isp/cam_isp_context.c`
- [ISP Device](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/cam_isp_dev.c): `camera/drivers/cam_isp/cam_isp_dev.c`
- [ISP Hardware Manager](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/isp_hw_mgr/cam_isp_hw_mgr.c): `camera/drivers/cam_isp/isp_hw_mgr/cam_isp_hw_mgr.c`
- [IFE Manager](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c): `camera/drivers/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c`
- [TFE Manager](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/isp_hw_mgr/cam_tfe_hw_mgr.c): `camera/drivers/cam_isp/isp_hw_mgr/cam_tfe_hw_mgr.c`
- [ISP Packet Parser](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/isp_hw_mgr/hw_utils/cam_isp_packet_parser.c): `camera/drivers/cam_isp/isp_hw_mgr/hw_utils/cam_isp_packet_parser.c`
- [IRQ Controller](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_isp/isp_hw_mgr/hw_utils/irq_controller/cam_irq_controller.c): `camera/drivers/cam_isp/isp_hw_mgr/hw_utils/irq_controller/cam_irq_controller.c`

### Processing Engines

- [ICP Context](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_icp/cam_icp_context.c): `camera/drivers/cam_icp/cam_icp_context.c`
- [ICP Hardware Manager](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_icp/icp_hw/icp_hw_mgr/cam_icp_hw_mgr.c): `camera/drivers/cam_icp/icp_hw/icp_hw_mgr/cam_icp_hw_mgr.c`
- [CRE Hardware Manager](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_cre/cam_cre_hw_mgr/cam_cre_hw_mgr.c): `camera/drivers/cam_cre/cam_cre_hw_mgr/cam_cre_hw_mgr.c`
- [Face Detect Manager](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.c): `camera/drivers/cam_fd/fd_hw_mgr/cam_fd_hw_mgr.c`
- [JPEG Hardware Manager](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_jpeg/jpeg_hw/cam_jpeg_hw_mgr.c): `camera/drivers/cam_jpeg/jpeg_hw/cam_jpeg_hw_mgr.c`
- [LRME Hardware Manager](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_lrme/lrme_hw_mgr/cam_lrme_hw_mgr.c): `camera/drivers/cam_lrme/lrme_hw_mgr/cam_lrme_hw_mgr.c`
- [Custom Context](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_cust/cam_custom_context.c): `camera/drivers/cam_cust/cam_custom_context.c`
- [Custom Hardware Manager](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_cust/cam_custom_hw_mgr/cam_custom_hw_mgr.c): `camera/drivers/cam_cust/cam_custom_hw_mgr/cam_custom_hw_mgr.c`

### Hardware Services

- [Command DMA](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_cdm/cam_cdm_intf.c): `camera/drivers/cam_cdm/cam_cdm_intf.c`
- [Camera Power Service](https://github.com/qualcomm-linux/camera-driver/blob/camera-kernel.qclinux.0.0/camera/drivers/cam_cpas/cam_cpas_intf.c): `camera/drivers/cam_cpas/cam_cpas_intf.c`

### Other components

- **Camera Client**

## Connections

- Camera Client → Context Dispatcher: issues commands
- Context Dispatcher → Context Interface: uses interface
- Context Dispatcher → ISP Context: dispatches callbacks
- ISP Context → ISP Hardware Manager: submits hardware work
- ISP Context → ISP Packet Parser: prepares requests
- ISP Packet Parser → ISP Hardware Manager: calls hardware ops
- ISP Hardware Manager → IFE Manager: dispatches IFE
- ISP Hardware Manager → TFE Manager: dispatches TFE
- ICP Context → Context Dispatcher: uses context services
- Custom Context → Context Dispatcher: initializes base context
- Custom Context → Custom Hardware Manager: calls hardware interface
