210 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
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.
 | 
						|
 | 
						|
- #clock-cells: from the common clock bindings (../clock/clock-bindings.txt),
 | 
						|
  must be 1. A clock provider is associated with the 'camera' node and it should
 | 
						|
  be referenced by external sensors that use clocks provided by the SoC on
 | 
						|
  CAM_*_CLKOUT pins. The clock specifier cell stores an index of a clock.
 | 
						|
  The indices are 0, 1 for CAM_A_CLKOUT, CAM_B_CLKOUT clocks respectively.
 | 
						|
 | 
						|
- clock-output-names: from the common clock bindings, should contain names of
 | 
						|
  clocks registered by the camera subsystem corresponding to CAM_A_CLKOUT,
 | 
						|
  CAM_B_CLKOUT output clocks respectively.
 | 
						|
 | 
						|
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 - 1, 2 indicates input A, B respectively.
 | 
						|
 | 
						|
Optional properties
 | 
						|
 | 
						|
- samsung,camclk-out (deprecated) : 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.
 | 
						|
 | 
						|
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 = <&camera 1>;
 | 
						|
			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@1a {
 | 
						|
			compatible = "samsung,s5c73m3";
 | 
						|
			reg = <0x1a>;
 | 
						|
			vddio-supply = <...>;
 | 
						|
 | 
						|
			clock-frequency = <24000000>;
 | 
						|
			clocks = <&camera 0>;
 | 
						|
			clock-names = "mclk";
 | 
						|
 | 
						|
			port {
 | 
						|
				s5c73m3_1: endpoint {
 | 
						|
					data-lanes = <1 2 3 4>;
 | 
						|
					remote-endpoint = <&csis0_ep>;
 | 
						|
				};
 | 
						|
			};
 | 
						|
		};
 | 
						|
	};
 | 
						|
 | 
						|
	camera {
 | 
						|
		compatible = "samsung,fimc", "simple-bus";
 | 
						|
		clocks = <&clock 132>, <&clock 133>, <&clock 351>,
 | 
						|
			 <&clock 352>;
 | 
						|
		clock-names = "sclk_cam0", "sclk_cam1", "pxl_async0",
 | 
						|
			      "pxl_async1";
 | 
						|
		#clock-cells = <1>;
 | 
						|
		clock-output-names = "cam_a_clkout", "cam_b_clkout";
 | 
						|
		pinctrl-names = "default";
 | 
						|
		pinctrl-0 = <&cam_port_a_clk_active>;
 | 
						|
		#address-cells = <1>;
 | 
						|
		#size-cells = <1>;
 | 
						|
 | 
						|
		/* parallel camera ports */
 | 
						|
		parallel-ports {
 | 
						|
			/* camera A input */
 | 
						|
			port@1 {
 | 
						|
				reg = <1>;
 | 
						|
				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>;
 | 
						|
		};
 | 
						|
 | 
						|
		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.
 |