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).