forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
153 lines
5.3 KiB
153 lines
5.3 KiB
.. SPDX-License-Identifier: GPL-2.0 |
|
|
|
.. include:: <isonum.txt> |
|
|
|
The Samsung S5P/Exynos4 FIMC driver |
|
=================================== |
|
|
|
Copyright |copy| 2012 - 2013 Samsung Electronics Co., Ltd. |
|
|
|
The FIMC (Fully Interactive Mobile Camera) device available in Samsung |
|
SoC Application Processors is an integrated camera host interface, color |
|
space converter, image resizer and rotator. It's also capable of capturing |
|
data from LCD controller (FIMD) through the SoC internal writeback data |
|
path. There are multiple FIMC instances in the SoCs (up to 4), having |
|
slightly different capabilities, like pixel alignment constraints, rotator |
|
availability, LCD writeback support, etc. The driver is located at |
|
drivers/media/platform/exynos4-is directory. |
|
|
|
Supported SoCs |
|
-------------- |
|
|
|
S5PC100 (mem-to-mem only), S5PV210, Exynos4210 |
|
|
|
Supported features |
|
------------------ |
|
|
|
- camera parallel interface capture (ITU-R.BT601/565); |
|
- camera serial interface capture (MIPI-CSI2); |
|
- memory-to-memory processing (color space conversion, scaling, mirror |
|
and rotation); |
|
- dynamic pipeline re-configuration at runtime (re-attachment of any FIMC |
|
instance to any parallel video input or any MIPI-CSI front-end); |
|
- runtime PM and system wide suspend/resume |
|
|
|
Not currently supported |
|
----------------------- |
|
|
|
- LCD writeback input |
|
- per frame clock gating (mem-to-mem) |
|
|
|
User space interfaces |
|
--------------------- |
|
|
|
Media device interface |
|
~~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
The driver supports Media Controller API as defined at :ref:`media_controller`. |
|
The media device driver name is "Samsung S5P FIMC". |
|
|
|
The purpose of this interface is to allow changing assignment of FIMC instances |
|
to the SoC peripheral camera input at runtime and optionally to control internal |
|
connections of the MIPI-CSIS device(s) to the FIMC entities. |
|
|
|
The media device interface allows to configure the SoC for capturing image |
|
data from the sensor through more than one FIMC instance (e.g. for simultaneous |
|
viewfinder and still capture setup). |
|
|
|
Reconfiguration is done by enabling/disabling media links created by the driver |
|
during initialization. The internal device topology can be easily discovered |
|
through media entity and links enumeration. |
|
|
|
Memory-to-memory video node |
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
V4L2 memory-to-memory interface at /dev/video? device node. This is standalone |
|
video device, it has no media pads. However please note the mem-to-mem and |
|
capture video node operation on same FIMC instance is not allowed. The driver |
|
detects such cases but the applications should prevent them to avoid an |
|
undefined behaviour. |
|
|
|
Capture video node |
|
~~~~~~~~~~~~~~~~~~ |
|
|
|
The driver supports V4L2 Video Capture Interface as defined at |
|
:ref:`devices`. |
|
|
|
At the capture and mem-to-mem video nodes only the multi-planar API is |
|
supported. For more details see: :ref:`planar-apis`. |
|
|
|
Camera capture subdevs |
|
~~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
Each FIMC instance exports a sub-device node (/dev/v4l-subdev?), a sub-device |
|
node is also created per each available and enabled at the platform level |
|
MIPI-CSI receiver device (currently up to two). |
|
|
|
sysfs |
|
~~~~~ |
|
|
|
In order to enable more precise camera pipeline control through the sub-device |
|
API the driver creates a sysfs entry associated with "s5p-fimc-md" platform |
|
device. The entry path is: /sys/platform/devices/s5p-fimc-md/subdev_conf_mode. |
|
|
|
In typical use case there could be a following capture pipeline configuration: |
|
sensor subdev -> mipi-csi subdev -> fimc subdev -> video node |
|
|
|
When we configure these devices through sub-device API at user space, the |
|
configuration flow must be from left to right, and the video node is |
|
configured as last one. |
|
|
|
When we don't use sub-device user space API the whole configuration of all |
|
devices belonging to the pipeline is done at the video node driver. |
|
The sysfs entry allows to instruct the capture node driver not to configure |
|
the sub-devices (format, crop), to avoid resetting the subdevs' configuration |
|
when the last configuration steps at the video node is performed. |
|
|
|
For full sub-device control support (subdevs configured at user space before |
|
starting streaming): |
|
|
|
.. code-block:: none |
|
|
|
# echo "sub-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode |
|
|
|
For V4L2 video node control only (subdevs configured internally by the host |
|
driver): |
|
|
|
.. code-block:: none |
|
|
|
# echo "vid-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode |
|
|
|
This is a default option. |
|
|
|
5. Device mapping to video and subdev device nodes |
|
-------------------------------------------------- |
|
|
|
There are associated two video device nodes with each device instance in |
|
hardware - video capture and mem-to-mem and additionally a subdev node for |
|
more precise FIMC capture subsystem control. In addition a separate v4l2 |
|
sub-device node is created per each MIPI-CSIS device. |
|
|
|
How to find out which /dev/video? or /dev/v4l-subdev? is assigned to which |
|
device? |
|
|
|
You can either grep through the kernel log to find relevant information, i.e. |
|
|
|
.. code-block:: none |
|
|
|
# dmesg | grep -i fimc |
|
|
|
(note that udev, if present, might still have rearranged the video nodes), |
|
|
|
or retrieve the information from /dev/media? with help of the media-ctl tool: |
|
|
|
.. code-block:: none |
|
|
|
# media-ctl -p |
|
|
|
7. Build |
|
-------- |
|
|
|
If the driver is built as a loadable kernel module (CONFIG_VIDEO_SAMSUNG_S5P_FIMC=m) |
|
two modules are created (in addition to the core v4l2 modules): s5p-fimc.ko and |
|
optional s5p-csis.ko (MIPI-CSI receiver subdev).
|
|
|