About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog

Documentation / video4linux / fimc.txt


Based on kernel version 4.7.2. Page generated on 2016-08-22 22:48 EST.

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


About Kernel Documentation Linux Kernel Contact Linux Resources Linux Blog