Samsung S5P/EXYNOS SoC Camera Subsystem (FIMC) ---------------------------------------------- The S5P/Exynos SoC Camera subsystem comprises of multiple sub-devices represented by separate device tree nodes. Currently this includes: FIMC (in the S5P SoCs series known as CAMIF), MIPI CSIS, FIMC-LITE and FIMC-IS (ISP). The sub-subdevices are defined as child nodes of the common 'camera' node which also includes common properties of the whole subsystem not really specific to any single sub-device, like common camera port pins or the CAMCLK clock outputs for external image sensors attached to an SoC. Common 'camera' node -------------------- Required properties: - compatible : must be "samsung,fimc", "simple-bus" - clocks : list of clock specifiers, corresponding to entries in the clock-names property; - clock-names : must contain "sclk_cam0", "sclk_cam1", "pxl_async0", "pxl_async1" entries, matching entries in the clocks property. The pinctrl bindings defined in ../pinctrl/pinctrl-bindings.txt must be used to define a required pinctrl state named "default" and optional pinctrl states: "idle", "active-a", active-b". These optional states can be used to switch the camera port pinmux at runtime. The "idle" state should configure both the camera ports A and B into high impedance state, especially the CAMCLK clock output should be inactive. For the "active-a" state the camera port A must be activated and the port B deactivated and for the state "active-b" it should be the other way around. The 'camera' node must include at least one 'fimc' child node. 'fimc' device nodes ------------------- Required properties: - compatible: "samsung,s5pv210-fimc" for S5PV210, "samsung,exynos4210-fimc" for Exynos4210 and "samsung,exynos4212-fimc" for Exynos4x12 SoCs; - reg: physical base address and length of the registers set for the device; - interrupts: should contain FIMC interrupt; - clocks: list of clock specifiers, must contain an entry for each required entry in clock-names; - clock-names: must contain "fimc", "sclk_fimc" entries. - samsung,pix-limits: an array of maximum supported image sizes in pixels, for details refer to Table 2-1 in the S5PV210 SoC User Manual; The meaning of each cell is as follows: 0 - scaler input horizontal size, 1 - input horizontal size for the scaler bypassed, 2 - REAL_WIDTH without input rotation, 3 - REAL_HEIGHT with input rotation, - samsung,sysreg: a phandle to the SYSREG node. Each FIMC device should have an alias in the aliases node, in the form of fimc<n>, where <n> is an integer specifying the IP block instance. Optional properties: - clock-frequency: maximum FIMC local clock (LCLK) frequency; - samsung,min-pix-sizes: an array specyfing minimum image size in pixels at the FIMC input and output DMA, in the first and second cell respectively. Default value when this property is not present is <16 16>; - samsung,min-pix-alignment: minimum supported image height alignment (first cell) and the horizontal image offset (second cell). The values are in pixels and default to <2 1> when this property is not present; - samsung,mainscaler-ext: a boolean property indicating whether the FIMC IP supports extended image size and has CIEXTEN register; - samsung,rotators: a bitmask specifying whether this IP has the input and the output rotator. Bits 4 and 0 correspond to input and output rotator respectively. If a rotator is present its corresponding bit should be set. Default value when this property is not specified is 0x11. - samsung,cam-if: a bolean property indicating whether the IP block includes the camera input interface. - samsung,isp-wb: this property must be present if the IP block has the ISP writeback input. - samsung,lcd-wb: this property must be present if the IP block has the LCD writeback input. 'parallel-ports' node --------------------- This node should contain child 'port' nodes specifying active parallel video input ports. It includes camera A and camera B inputs. 'reg' property in the port nodes specifies data input - 0, 1 indicates input A, B respectively. Optional properties - samsung,camclk-out : specifies clock output for remote sensor, 0 - CAM_A_CLKOUT, 1 - CAM_B_CLKOUT; Image sensor nodes ------------------ The sensor device nodes should be added to their control bus controller (e.g. I2C0) nodes and linked to a port node in the csis or the parallel-ports node, using the common video interfaces bindings, defined in video-interfaces.txt. The implementation of this bindings requires clock-frequency property to be present in the sensor device nodes. Example: aliases { fimc0 = &fimc_0; }; /* Parallel bus IF sensor */ i2c_0: i2c@13860000 { s5k6aa: sensor@3c { compatible = "samsung,s5k6aafx"; reg = <0x3c>; vddio-supply = <...>; clock-frequency = <24000000>; clocks = <...>; clock-names = "mclk"; port { s5k6aa_ep: endpoint { remote-endpoint = <&fimc0_ep>; bus-width = <8>; hsync-active = <0>; vsync-active = <1>; pclk-sample = <1>; }; }; }; }; /* MIPI CSI-2 bus IF sensor */ s5c73m3: sensor@0x1a { compatible = "samsung,s5c73m3"; reg = <0x1a>; vddio-supply = <...>; clock-frequency = <24000000>; clocks = <...>; clock-names = "mclk"; port { s5c73m3_1: endpoint { data-lanes = <1 2 3 4>; remote-endpoint = <&csis0_ep>; }; }; }; camera { compatible = "samsung,fimc", "simple-bus"; #address-cells = <1>; #size-cells = <1>; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&cam_port_a_clk_active>; /* parallel camera ports */ parallel-ports { /* camera A input */ port@0 { reg = <0>; fimc0_ep: endpoint { remote-endpoint = <&s5k6aa_ep>; bus-width = <8>; hsync-active = <0>; vsync-active = <1>; pclk-sample = <1>; }; }; }; fimc_0: fimc@11800000 { compatible = "samsung,exynos4210-fimc"; reg = <0x11800000 0x1000>; interrupts = <0 85 0>; status = "okay"; }; csis_0: csis@11880000 { compatible = "samsung,exynos4210-csis"; reg = <0x11880000 0x1000>; interrupts = <0 78 0>; /* camera C input */ port@3 { reg = <3>; csis0_ep: endpoint { remote-endpoint = <&s5c73m3_ep>; data-lanes = <1 2 3 4>; samsung,csis-hs-settle = <12>; }; }; }; }; The MIPI-CSIS device binding is defined in samsung-mipi-csis.txt.