blob: 3adc19bcf03948ab28c389618d4d6cd9a91d2046 [file] [log] [blame]
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -03001.. include:: <isonum.txt>
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -03002
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -03003The Samsung S5P/EXYNOS4 FIMC driver
4===================================
5
6Copyright |copy| 2012 - 2013 Samsung Electronics Co., Ltd.
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -03007
8The FIMC (Fully Interactive Mobile Camera) device available in Samsung
9SoC Application Processors is an integrated camera host interface, color
10space converter, image resizer and rotator. It's also capable of capturing
11data from LCD controller (FIMD) through the SoC internal writeback data
12path. There are multiple FIMC instances in the SoCs (up to 4), having
13slightly different capabilities, like pixel alignment constraints, rotator
14availability, LCD writeback support, etc. The driver is located at
Sylwester Nawrocki188ab112013-06-14 19:28:40 -030015drivers/media/platform/exynos4-is directory.
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030016
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030017Supported SoCs
18--------------
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030019
20S5PC100 (mem-to-mem only), S5PV210, EXYNOS4210
21
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030022Supported features
23------------------
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030024
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030025- camera parallel interface capture (ITU-R.BT601/565);
26- camera serial interface capture (MIPI-CSI2);
27- memory-to-memory processing (color space conversion, scaling, mirror
28 and rotation);
29- dynamic pipeline re-configuration at runtime (re-attachment of any FIMC
30 instance to any parallel video input or any MIPI-CSI front-end);
31- runtime PM and system wide suspend/resume
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030032
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030033Not currently supported
34-----------------------
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030035
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030036- LCD writeback input
37- per frame clock gating (mem-to-mem)
38
39Files partitioning
40------------------
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030041
42- media device driver
Sylwester Nawrocki188ab112013-06-14 19:28:40 -030043 drivers/media/platform/exynos4-is/media-dev.[ch]
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030044
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030045- camera capture video device driver
Sylwester Nawrocki188ab112013-06-14 19:28:40 -030046 drivers/media/platform/exynos4-is/fimc-capture.c
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030047
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030048- MIPI-CSI2 receiver subdev
Sylwester Nawrocki188ab112013-06-14 19:28:40 -030049 drivers/media/platform/exynos4-is/mipi-csis.[ch]
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030050
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030051- video post-processor (mem-to-mem)
Sylwester Nawrocki188ab112013-06-14 19:28:40 -030052 drivers/media/platform/exynos4-is/fimc-core.c
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030053
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030054- common files
Sylwester Nawrocki188ab112013-06-14 19:28:40 -030055 drivers/media/platform/exynos4-is/fimc-core.h
56 drivers/media/platform/exynos4-is/fimc-reg.h
57 drivers/media/platform/exynos4-is/regs-fimc.h
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030058
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030059User space interfaces
60---------------------
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030061
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030062Media device interface
63~~~~~~~~~~~~~~~~~~~~~~
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030064
Mauro Carvalho Chehabda83c882016-07-20 10:36:18 -030065The driver supports Media Controller API as defined at :ref:`media_controller`.
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030066The media device driver name is "SAMSUNG S5P FIMC".
67
68The purpose of this interface is to allow changing assignment of FIMC instances
69to the SoC peripheral camera input at runtime and optionally to control internal
70connections of the MIPI-CSIS device(s) to the FIMC entities.
71
72The media device interface allows to configure the SoC for capturing image
73data from the sensor through more than one FIMC instance (e.g. for simultaneous
74viewfinder and still capture setup).
75Reconfiguration is done by enabling/disabling media links created by the driver
76during initialization. The internal device topology can be easily discovered
77through media entity and links enumeration.
78
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030079Memory-to-memory video node
80~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030081
82V4L2 memory-to-memory interface at /dev/video? device node. This is standalone
83video device, it has no media pads. However please note the mem-to-mem and
84capture video node operation on same FIMC instance is not allowed. The driver
85detects such cases but the applications should prevent them to avoid an
86undefined behaviour.
87
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030088Capture video node
89~~~~~~~~~~~~~~~~~~
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030090
Mauro Carvalho Chehabda83c882016-07-20 10:36:18 -030091The driver supports V4L2 Video Capture Interface as defined at
92:ref:`devices`.
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030093
94At the capture and mem-to-mem video nodes only the multi-planar API is
Mauro Carvalho Chehabda83c882016-07-20 10:36:18 -030095supported. For more details see: :ref:`planar-apis`.
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030096
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -030097Camera capture subdevs
98~~~~~~~~~~~~~~~~~~~~~~
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -030099
100Each FIMC instance exports a sub-device node (/dev/v4l-subdev?), a sub-device
101node is also created per each available and enabled at the platform level
102MIPI-CSI receiver device (currently up to two).
103
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -0300104sysfs
105~~~~~
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -0300106
107In order to enable more precise camera pipeline control through the sub-device
108API the driver creates a sysfs entry associated with "s5p-fimc-md" platform
109device. The entry path is: /sys/platform/devices/s5p-fimc-md/subdev_conf_mode.
110
111In typical use case there could be a following capture pipeline configuration:
112sensor subdev -> mipi-csi subdev -> fimc subdev -> video node
113
114When we configure these devices through sub-device API at user space, the
115configuration flow must be from left to right, and the video node is
116configured as last one.
117When we don't use sub-device user space API the whole configuration of all
118devices belonging to the pipeline is done at the video node driver.
119The sysfs entry allows to instruct the capture node driver not to configure
120the sub-devices (format, crop), to avoid resetting the subdevs' configuration
121when the last configuration steps at the video node is performed.
122
123For full sub-device control support (subdevs configured at user space before
124starting streaming):
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -0300125
126.. code-block:: none
127
128 # echo "sub-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -0300129
130For V4L2 video node control only (subdevs configured internally by the host
131driver):
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -0300132
133.. code-block:: none
134
135 # echo "vid-dev" > /sys/platform/devices/s5p-fimc-md/subdev_conf_mode
136
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -0300137This is a default option.
138
1395. Device mapping to video and subdev device nodes
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -0300140--------------------------------------------------
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -0300141
142There are associated two video device nodes with each device instance in
143hardware - video capture and mem-to-mem and additionally a subdev node for
144more precise FIMC capture subsystem control. In addition a separate v4l2
145sub-device node is created per each MIPI-CSIS device.
146
147How to find out which /dev/video? or /dev/v4l-subdev? is assigned to which
148device?
149
150You can either grep through the kernel log to find relevant information, i.e.
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -0300151
152.. code-block:: none
153
154 # dmesg | grep -i fimc
155
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -0300156(note that udev, if present, might still have rearranged the video nodes),
157
158or retrieve the information from /dev/media? with help of the media-ctl tool:
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -0300159
160.. code-block:: none
161
162 # media-ctl -p
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -0300163
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -03001647. Build
Mauro Carvalho Chehabf0726e42016-07-17 17:57:31 -0300165--------
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -0300166
Sylwester Nawrocki1b741bc2012-01-30 11:38:21 -0300167If the driver is built as a loadable kernel module (CONFIG_VIDEO_SAMSUNG_S5P_FIMC=m)
168two modules are created (in addition to the core v4l2 modules): s5p-fimc.ko and
169optional s5p-csis.ko (MIPI-CSI receiver subdev).