123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- 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 - 0, 1 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@0x1a {
- 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>;
- status = "okay";
- #address-cells = <1>;
- #size-cells = <1>;
- /* 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.
|