| .. SPDX-License-Identifier: (GPL-2.0-only OR MIT) | |
| .. include:: <isonum.txt> | |
| ================================================= | |
| Amlogic C3 Image Signal Processing (C3ISP) driver | |
| ================================================= | |
| Introduction | |
| ============ | |
| This file documents the Amlogic C3ISP driver located under | |
| drivers/media/platform/amlogic/c3/isp. | |
| The current version of the driver supports the C3ISP found on | |
| Amlogic C308L processor. | |
| The driver implements V4L2, Media controller and V4L2 subdev interfaces. | |
| Camera sensor using V4L2 subdev interface in the kernel is supported. | |
| The driver has been tested on AW419-C308L-Socket platform. | |
| Amlogic C3 ISP | |
| ============== | |
| The Camera hardware found on C308L processors and supported by | |
| the driver consists of: | |
| - 1 MIPI-CSI-2 module: handles the physical layer of the MIPI CSI-2 receiver and | |
| receives data from the connected camera sensor. | |
| - 1 MIPI-ADAPTER module: organizes MIPI data to meet ISP input requirements and | |
| send MIPI data to ISP. | |
| - 1 ISP (Image Signal Processing) module: contains a pipeline of image processing | |
| hardware blocks. The ISP pipeline contains three resizers at the end each of | |
| them connected to a DMA interface which writes the output data to memory. | |
| A high-level functional view of the C3 ISP is presented below.:: | |
| +----------+ +-------+ | |
| | Resizer |--->| WRMIF | | |
| +---------+ +------------+ +--------------+ +-------+ |----------+ +-------+ | |
| | Sensor |--->| MIPI CSI-2 |--->| MIPI ADAPTER |--->| ISP |---|----------+ +-------+ | |
| +---------+ +------------+ +--------------+ +-------+ | Resizer |--->| WRMIF | | |
| +----------+ +-------+ | |
| |----------+ +-------+ | |
| | Resizer |--->| WRMIF | | |
| +----------+ +-------+ | |
| Driver architecture and design | |
| ============================== | |
| With the goal to model the hardware links between the modules and to expose a | |
| clean, logical and usable interface, the driver registers the following V4L2 | |
| sub-devices: | |
| - 1 `c3-mipi-csi2` sub-device - the MIPI CSI-2 receiver | |
| - 1 `c3-mipi-adapter` sub-device - the MIPI adapter | |
| - 1 `c3-isp-core` sub-device - the ISP core | |
| - 3 `c3-isp-resizer` sub-devices - the ISP resizers | |
| The `c3-isp-core` sub-device is linked to 2 video device nodes for statistics | |
| capture and parameters programming: | |
| - the `c3-isp-stats` capture video device node for statistics capture | |
| - the `c3-isp-params` output video device for parameters programming | |
| Each `c3-isp-resizer` sub-device is linked to a capture video device node where | |
| frames are captured from: | |
| - `c3-isp-resizer0` is linked to the `c3-isp-cap0` capture video device | |
| - `c3-isp-resizer1` is linked to the `c3-isp-cap1` capture video device | |
| - `c3-isp-resizer2` is linked to the `c3-isp-cap2` capture video device | |
| The media controller pipeline graph is as follows (with connected a | |
| IMX290 camera sensor): | |
| .. _isp_topology_graph: | |
| .. kernel-figure:: c3-isp.dot | |
| :alt: c3-isp.dot | |
| :align: center | |
| Media pipeline topology | |
| Implementation | |
| ============== | |
| Runtime configuration of the ISP hardware is performed on the `c3-isp-params` | |
| video device node using the :ref:`V4L2_META_FMT_C3ISP_PARAMS | |
| <v4l2-meta-fmt-c3isp-params>` as data format. The buffer structure is defined by | |
| :c:type:`c3_isp_params_cfg`. | |
| Statistics are captured from the `c3-isp-stats` video device node using the | |
| :ref:`V4L2_META_FMT_C3ISP_STATS <v4l2-meta-fmt-c3isp-stats>` data format. | |
| The final picture size and format is configured using the V4L2 video | |
| capture interface on the `c3-isp-cap[0, 2]` video device nodes. | |
| The Amlogic C3 ISP is supported by `libcamera <https://libcamera.org>`_ with a | |
| dedicated pipeline handler and algorithms that perform run-time image correction | |
| and enhancement. |