1.. SPDX-License-Identifier: GPL-2.0 2 3.. include:: <isonum.txt> 4 5The Samsung S5P/Exynos4 FIMC driver 6=================================== 7 8Copyright |copy| 2012 - 2013 Samsung Electronics Co., Ltd. 9 10The FIMC (Fully Interactive Mobile Camera) device available in Samsung 11SoC Application Processors is an integrated camera host interface, color 12space converter, image resizer and rotator. It's also capable of capturing 13data from LCD controller (FIMD) through the SoC internal writeback data 14path. There are multiple FIMC instances in the SoCs (up to 4), having 15slightly different capabilities, like pixel alignment constraints, rotator 16availability, LCD writeback support, etc. The driver is located at 17drivers/media/platform/exynos4-is directory. 18 19Supported SoCs 20-------------- 21 22S5PC100 (mem-to-mem only), S5PV210, Exynos4210 23 24Supported features 25------------------ 26 27- camera parallel interface capture (ITU-R.BT601/565); 28- camera serial interface capture (MIPI-CSI2); 29- memory-to-memory processing (color space conversion, scaling, mirror 30 and rotation); 31- dynamic pipeline re-configuration at runtime (re-attachment of any FIMC 32 instance to any parallel video input or any MIPI-CSI front-end); 33- runtime PM and system wide suspend/resume 34 35Not currently supported 36----------------------- 37 38- LCD writeback input 39- per frame clock gating (mem-to-mem) 40 41User space interfaces 42--------------------- 43 44Media device interface 45~~~~~~~~~~~~~~~~~~~~~~ 46 47The driver supports Media Controller API as defined at :ref:`media_controller`. 48The media device driver name is "Samsung S5P FIMC". 49 50The purpose of this interface is to allow changing assignment of FIMC instances 51to the SoC peripheral camera input at runtime and optionally to control internal 52connections of the MIPI-CSIS device(s) to the FIMC entities. 53 54The media device interface allows to configure the SoC for capturing image 55data from the sensor through more than one FIMC instance (e.g. for simultaneous 56viewfinder and still capture setup). 57 58Reconfiguration is done by enabling/disabling media links created by the driver 59during initialization. The internal device topology can be easily discovered 60through media entity and links enumeration. 61 62Memory-to-memory video node 63~~~~~~~~~~~~~~~~~~~~~~~~~~~ 64 65V4L2 memory-to-memory interface at /dev/video? device node. This is standalone 66video device, it has no media pads. However please note the mem-to-mem and 67capture video node operation on same FIMC instance is not allowed. The driver 68detects such cases but the applications should prevent them to avoid an 69undefined behaviour. 70 71Capture video node 72~~~~~~~~~~~~~~~~~~ 73 74The driver supports V4L2 Video Capture Interface as defined at 75:ref:`devices`. 76 77At the capture and mem-to-mem video nodes only the multi-planar API is 78supported. For more details see: :ref:`planar-apis`. 79 80Camera capture subdevs 81~~~~~~~~~~~~~~~~~~~~~~ 82 83Each FIMC instance exports a sub-device node (/dev/v4l-subdev?), a sub-device 84node is also created per each available and enabled at the platform level 85MIPI-CSI receiver device (currently up to two). 86 87sysfs 88~~~~~ 89 90In order to enable more precise camera pipeline control through the sub-device 91API the driver creates a sysfs entry associated with "s5p-fimc-md" platform 92device. The entry path is: /sys/platform/devices/s5p-fimc-md/subdev_conf_mode. 93 94In typical use case there could be a following capture pipeline configuration: 95sensor subdev -> mipi-csi subdev -> fimc subdev -> video node 96 97When we configure these devices through sub-device API at user space, the 98configuration flow must be from left to right, and the video node is 99configured as last one. 100 101When we don't use sub-device user space API the whole configuration of all 102devices belonging to the pipeline is done at the video node driver. 103The sysfs entry allows to instruct the capture node driver not to configure 104the sub-devices (format, crop), to avoid resetting the subdevs' configuration 105when the last configuration steps at the video node is performed. 106 107For full sub-device control support (subdevs configured at user space before 108starting streaming): 109 110.. code-block:: none 111 112 # echo "sub-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode 113 114For V4L2 video node control only (subdevs configured internally by the host 115driver): 116 117.. code-block:: none 118 119 # echo "vid-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode 120 121This is a default option. 122 1235. Device mapping to video and subdev device nodes 124-------------------------------------------------- 125 126There are associated two video device nodes with each device instance in 127hardware - video capture and mem-to-mem and additionally a subdev node for 128more precise FIMC capture subsystem control. In addition a separate v4l2 129sub-device node is created per each MIPI-CSIS device. 130 131How to find out which /dev/video? or /dev/v4l-subdev? is assigned to which 132device? 133 134You can either grep through the kernel log to find relevant information, i.e. 135 136.. code-block:: none 137 138 # dmesg | grep -i fimc 139 140(note that udev, if present, might still have rearranged the video nodes), 141 142or retrieve the information from /dev/media? with help of the media-ctl tool: 143 144.. code-block:: none 145 146 # media-ctl -p 147 1487. Build 149-------- 150 151If the driver is built as a loadable kernel module (CONFIG_VIDEO_SAMSUNG_S5P_FIMC=m) 152two modules are created (in addition to the core v4l2 modules): s5p-fimc.ko and 153optional s5p-csis.ko (MIPI-CSI receiver subdev). 154