xref: /linux/Documentation/devicetree/bindings/media/samsung,fimc.yaml (revision 464c257258c602850765074c69838f775368fec7)
1*464c2572SKrzysztof Kozlowski# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2*464c2572SKrzysztof Kozlowski%YAML 1.2
3*464c2572SKrzysztof Kozlowski---
4*464c2572SKrzysztof Kozlowski$id: http://devicetree.org/schemas/media/samsung,fimc.yaml#
5*464c2572SKrzysztof Kozlowski$schema: http://devicetree.org/meta-schemas/core.yaml#
6*464c2572SKrzysztof Kozlowski
7*464c2572SKrzysztof Kozlowskititle: Samsung S5P/Exynos SoC Camera Subsystem (FIMC)
8*464c2572SKrzysztof Kozlowski
9*464c2572SKrzysztof Kozlowskimaintainers:
10*464c2572SKrzysztof Kozlowski  - Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
11*464c2572SKrzysztof Kozlowski  - Sylwester Nawrocki <s.nawrocki@samsung.com>
12*464c2572SKrzysztof Kozlowski
13*464c2572SKrzysztof Kozlowskidescription: |
14*464c2572SKrzysztof Kozlowski  The S5P/Exynos SoC Camera subsystem comprises of multiple sub-devices
15*464c2572SKrzysztof Kozlowski  represented by separate device tree nodes. Currently this includes: Fully
16*464c2572SKrzysztof Kozlowski  Integrated Mobile Camera (FIMC, in the S5P SoCs series known as CAMIF), MIPI
17*464c2572SKrzysztof Kozlowski  CSIS, FIMC-LITE and FIMC-IS (ISP).
18*464c2572SKrzysztof Kozlowski
19*464c2572SKrzysztof Kozlowskiproperties:
20*464c2572SKrzysztof Kozlowski  compatible:
21*464c2572SKrzysztof Kozlowski    const: samsung,fimc
22*464c2572SKrzysztof Kozlowski
23*464c2572SKrzysztof Kozlowski  ranges: true
24*464c2572SKrzysztof Kozlowski
25*464c2572SKrzysztof Kozlowski  '#address-cells':
26*464c2572SKrzysztof Kozlowski    const: 1
27*464c2572SKrzysztof Kozlowski
28*464c2572SKrzysztof Kozlowski  '#size-cells':
29*464c2572SKrzysztof Kozlowski    const: 1
30*464c2572SKrzysztof Kozlowski
31*464c2572SKrzysztof Kozlowski  '#clock-cells':
32*464c2572SKrzysztof Kozlowski    const: 1
33*464c2572SKrzysztof Kozlowski    description: |
34*464c2572SKrzysztof Kozlowski      The clock specifier cell stores an index of a clock: 0, 1 for
35*464c2572SKrzysztof Kozlowski      CAM_A_CLKOUT, CAM_B_CLKOUT clocks respectively.
36*464c2572SKrzysztof Kozlowski
37*464c2572SKrzysztof Kozlowski  clocks:
38*464c2572SKrzysztof Kozlowski    minItems: 2
39*464c2572SKrzysztof Kozlowski    maxItems: 4
40*464c2572SKrzysztof Kozlowski
41*464c2572SKrzysztof Kozlowski  clock-names:
42*464c2572SKrzysztof Kozlowski    minItems: 2
43*464c2572SKrzysztof Kozlowski    items:
44*464c2572SKrzysztof Kozlowski      - const: sclk_cam0
45*464c2572SKrzysztof Kozlowski      - const: sclk_cam1
46*464c2572SKrzysztof Kozlowski      - const: pxl_async0
47*464c2572SKrzysztof Kozlowski      - const: pxl_async1
48*464c2572SKrzysztof Kozlowski
49*464c2572SKrzysztof Kozlowski  clock-output-names:
50*464c2572SKrzysztof Kozlowski    maxItems: 2
51*464c2572SKrzysztof Kozlowski
52*464c2572SKrzysztof Kozlowski  parallel-ports:
53*464c2572SKrzysztof Kozlowski    $ref: /schemas/graph.yaml#/properties/ports
54*464c2572SKrzysztof Kozlowski    description:
55*464c2572SKrzysztof Kozlowski      Active parallel video input ports.
56*464c2572SKrzysztof Kozlowski
57*464c2572SKrzysztof Kozlowski    patternProperties:
58*464c2572SKrzysztof Kozlowski      "^port@[01]$":
59*464c2572SKrzysztof Kozlowski        $ref: /schemas/graph.yaml#/$defs/port-base
60*464c2572SKrzysztof Kozlowski        description:
61*464c2572SKrzysztof Kozlowski          Camera A and camera B inputs.
62*464c2572SKrzysztof Kozlowski
63*464c2572SKrzysztof Kozlowski        properties:
64*464c2572SKrzysztof Kozlowski          endpoint:
65*464c2572SKrzysztof Kozlowski            $ref: /schemas/media/video-interfaces.yaml#
66*464c2572SKrzysztof Kozlowski            unevaluatedProperties: false
67*464c2572SKrzysztof Kozlowski
68*464c2572SKrzysztof Kozlowski  pinctrl-names:
69*464c2572SKrzysztof Kozlowski    minItems: 1
70*464c2572SKrzysztof Kozlowski    items:
71*464c2572SKrzysztof Kozlowski      - const: default
72*464c2572SKrzysztof Kozlowski      - const: idle
73*464c2572SKrzysztof Kozlowski      - const: active_a
74*464c2572SKrzysztof Kozlowski      - const: active_b
75*464c2572SKrzysztof Kozlowski
76*464c2572SKrzysztof KozlowskipatternProperties:
77*464c2572SKrzysztof Kozlowski  "^csis@[0-9a-f]+$":
78*464c2572SKrzysztof Kozlowski    type: object
79*464c2572SKrzysztof Kozlowski    $ref: samsung,exynos4210-csis.yaml#
80*464c2572SKrzysztof Kozlowski    description: MIPI CSI-2 receiver.
81*464c2572SKrzysztof Kozlowski
82*464c2572SKrzysztof Kozlowski  "^fimc@[0-9a-f]+$":
83*464c2572SKrzysztof Kozlowski    type: object
84*464c2572SKrzysztof Kozlowski    $ref: samsung,exynos4210-fimc.yaml#
85*464c2572SKrzysztof Kozlowski    description: Fully Integrated Mobile Camera.
86*464c2572SKrzysztof Kozlowski
87*464c2572SKrzysztof Kozlowski  "^fimc-is@[0-9a-f]+$":
88*464c2572SKrzysztof Kozlowski    type: object
89*464c2572SKrzysztof Kozlowski    $ref: samsung,exynos4212-fimc-is.yaml#
90*464c2572SKrzysztof Kozlowski    description: Imaging Subsystem (FIMC-IS).
91*464c2572SKrzysztof Kozlowski
92*464c2572SKrzysztof Kozlowski  "^fimc-lite@[0-9a-f]+$":
93*464c2572SKrzysztof Kozlowski    type: object
94*464c2572SKrzysztof Kozlowski    $ref: samsung,exynos4212-fimc-lite.yaml#
95*464c2572SKrzysztof Kozlowski    description: Camera host interface (FIMC-LITE).
96*464c2572SKrzysztof Kozlowski
97*464c2572SKrzysztof Kozlowskirequired:
98*464c2572SKrzysztof Kozlowski  - compatible
99*464c2572SKrzysztof Kozlowski  - '#address-cells'
100*464c2572SKrzysztof Kozlowski  - '#clock-cells'
101*464c2572SKrzysztof Kozlowski  - clocks
102*464c2572SKrzysztof Kozlowski  - clock-names
103*464c2572SKrzysztof Kozlowski  - clock-output-names
104*464c2572SKrzysztof Kozlowski  - ranges
105*464c2572SKrzysztof Kozlowski  - '#size-cells'
106*464c2572SKrzysztof Kozlowski
107*464c2572SKrzysztof KozlowskiadditionalProperties: false
108*464c2572SKrzysztof Kozlowski
109*464c2572SKrzysztof Kozlowskiexamples:
110*464c2572SKrzysztof Kozlowski  - |
111*464c2572SKrzysztof Kozlowski    #include <dt-bindings/clock/exynos4.h>
112*464c2572SKrzysztof Kozlowski    #include <dt-bindings/gpio/gpio.h>
113*464c2572SKrzysztof Kozlowski    #include <dt-bindings/interrupt-controller/arm-gic.h>
114*464c2572SKrzysztof Kozlowski
115*464c2572SKrzysztof Kozlowski    camera@11800000 {
116*464c2572SKrzysztof Kozlowski        compatible = "samsung,fimc";
117*464c2572SKrzysztof Kozlowski        #clock-cells = <1>;
118*464c2572SKrzysztof Kozlowski        #address-cells = <1>;
119*464c2572SKrzysztof Kozlowski        #size-cells = <1>;
120*464c2572SKrzysztof Kozlowski        ranges = <0x0 0x0 0x18000000>;
121*464c2572SKrzysztof Kozlowski
122*464c2572SKrzysztof Kozlowski        clocks = <&clock CLK_SCLK_CAM0>, <&clock CLK_SCLK_CAM1>,
123*464c2572SKrzysztof Kozlowski                 <&clock CLK_PIXELASYNCM0>, <&clock CLK_PIXELASYNCM1>;
124*464c2572SKrzysztof Kozlowski        clock-names = "sclk_cam0", "sclk_cam1", "pxl_async0", "pxl_async1";
125*464c2572SKrzysztof Kozlowski        clock-output-names = "cam_a_clkout", "cam_b_clkout";
126*464c2572SKrzysztof Kozlowski
127*464c2572SKrzysztof Kozlowski        assigned-clocks = <&clock CLK_MOUT_CAM0>,
128*464c2572SKrzysztof Kozlowski                          <&clock CLK_MOUT_CAM1>;
129*464c2572SKrzysztof Kozlowski        assigned-clock-parents = <&clock CLK_XUSBXTI>,
130*464c2572SKrzysztof Kozlowski                                 <&clock CLK_XUSBXTI>;
131*464c2572SKrzysztof Kozlowski
132*464c2572SKrzysztof Kozlowski        pinctrl-0 = <&cam_port_a_clk_active &cam_port_b_clk_active>;
133*464c2572SKrzysztof Kozlowski        pinctrl-names = "default";
134*464c2572SKrzysztof Kozlowski
135*464c2572SKrzysztof Kozlowski        fimc@11800000 {
136*464c2572SKrzysztof Kozlowski            compatible = "samsung,exynos4212-fimc";
137*464c2572SKrzysztof Kozlowski            reg = <0x11800000 0x1000>;
138*464c2572SKrzysztof Kozlowski            interrupts = <GIC_SPI 84 IRQ_TYPE_LEVEL_HIGH>;
139*464c2572SKrzysztof Kozlowski            clocks = <&clock CLK_FIMC0>,
140*464c2572SKrzysztof Kozlowski                     <&clock CLK_SCLK_FIMC0>;
141*464c2572SKrzysztof Kozlowski            clock-names = "fimc", "sclk_fimc";
142*464c2572SKrzysztof Kozlowski            power-domains = <&pd_cam>;
143*464c2572SKrzysztof Kozlowski            samsung,sysreg = <&sys_reg>;
144*464c2572SKrzysztof Kozlowski            iommus = <&sysmmu_fimc0>;
145*464c2572SKrzysztof Kozlowski
146*464c2572SKrzysztof Kozlowski            samsung,pix-limits = <4224 8192 1920 4224>;
147*464c2572SKrzysztof Kozlowski            samsung,mainscaler-ext;
148*464c2572SKrzysztof Kozlowski            samsung,isp-wb;
149*464c2572SKrzysztof Kozlowski            samsung,cam-if;
150*464c2572SKrzysztof Kozlowski        };
151*464c2572SKrzysztof Kozlowski
152*464c2572SKrzysztof Kozlowski        /* ... FIMC 1-3 */
153*464c2572SKrzysztof Kozlowski
154*464c2572SKrzysztof Kozlowski        csis@11880000 {
155*464c2572SKrzysztof Kozlowski            compatible = "samsung,exynos4210-csis";
156*464c2572SKrzysztof Kozlowski            reg = <0x11880000 0x4000>;
157*464c2572SKrzysztof Kozlowski            interrupts = <GIC_SPI 78 IRQ_TYPE_LEVEL_HIGH>;
158*464c2572SKrzysztof Kozlowski            clocks = <&clock CLK_CSIS0>,
159*464c2572SKrzysztof Kozlowski                     <&clock CLK_SCLK_CSIS0>;
160*464c2572SKrzysztof Kozlowski            clock-names = "csis", "sclk_csis";
161*464c2572SKrzysztof Kozlowski            assigned-clocks = <&clock CLK_MOUT_CSIS0>,
162*464c2572SKrzysztof Kozlowski                              <&clock CLK_SCLK_CSIS0>;
163*464c2572SKrzysztof Kozlowski            assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
164*464c2572SKrzysztof Kozlowski            assigned-clock-rates = <0>, <176000000>;
165*464c2572SKrzysztof Kozlowski
166*464c2572SKrzysztof Kozlowski            bus-width = <4>;
167*464c2572SKrzysztof Kozlowski            power-domains = <&pd_cam>;
168*464c2572SKrzysztof Kozlowski            phys = <&mipi_phy 0>;
169*464c2572SKrzysztof Kozlowski            phy-names = "csis";
170*464c2572SKrzysztof Kozlowski            #address-cells = <1>;
171*464c2572SKrzysztof Kozlowski            #size-cells = <0>;
172*464c2572SKrzysztof Kozlowski
173*464c2572SKrzysztof Kozlowski            vddcore-supply = <&ldo8_reg>;
174*464c2572SKrzysztof Kozlowski            vddio-supply = <&ldo10_reg>;
175*464c2572SKrzysztof Kozlowski
176*464c2572SKrzysztof Kozlowski            /* Camera C (3) MIPI CSI-2 (CSIS0) */
177*464c2572SKrzysztof Kozlowski            port@3 {
178*464c2572SKrzysztof Kozlowski                reg = <3>;
179*464c2572SKrzysztof Kozlowski                endpoint {
180*464c2572SKrzysztof Kozlowski                    remote-endpoint = <&s5c73m3_ep>;
181*464c2572SKrzysztof Kozlowski                    data-lanes = <1 2 3 4>;
182*464c2572SKrzysztof Kozlowski                    samsung,csis-hs-settle = <12>;
183*464c2572SKrzysztof Kozlowski                };
184*464c2572SKrzysztof Kozlowski            };
185*464c2572SKrzysztof Kozlowski        };
186*464c2572SKrzysztof Kozlowski
187*464c2572SKrzysztof Kozlowski        /* ... CSIS 1 */
188*464c2572SKrzysztof Kozlowski
189*464c2572SKrzysztof Kozlowski        fimc-lite@12390000 {
190*464c2572SKrzysztof Kozlowski              compatible = "samsung,exynos4212-fimc-lite";
191*464c2572SKrzysztof Kozlowski              reg = <0x12390000 0x1000>;
192*464c2572SKrzysztof Kozlowski              interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>;
193*464c2572SKrzysztof Kozlowski              power-domains = <&pd_isp>;
194*464c2572SKrzysztof Kozlowski              clocks = <&isp_clock CLK_ISP_FIMC_LITE0>;
195*464c2572SKrzysztof Kozlowski              clock-names = "flite";
196*464c2572SKrzysztof Kozlowski              iommus = <&sysmmu_fimc_lite0>;
197*464c2572SKrzysztof Kozlowski        };
198*464c2572SKrzysztof Kozlowski
199*464c2572SKrzysztof Kozlowski        /* ... FIMC-LITE 1 */
200*464c2572SKrzysztof Kozlowski
201*464c2572SKrzysztof Kozlowski        fimc-is@12000000 {
202*464c2572SKrzysztof Kozlowski            compatible = "samsung,exynos4212-fimc-is";
203*464c2572SKrzysztof Kozlowski            reg = <0x12000000 0x260000>;
204*464c2572SKrzysztof Kozlowski            interrupts = <GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>,
205*464c2572SKrzysztof Kozlowski                         <GIC_SPI 95 IRQ_TYPE_LEVEL_HIGH>;
206*464c2572SKrzysztof Kozlowski            clocks = <&isp_clock CLK_ISP_FIMC_LITE0>,
207*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_FIMC_LITE1>,
208*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_PPMUISPX>,
209*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_PPMUISPMX>,
210*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_FIMC_ISP>,
211*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_FIMC_DRC>,
212*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_FIMC_FD>,
213*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_MCUISP>,
214*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_GICISP>,
215*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_MCUCTL_ISP>,
216*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_PWM_ISP>,
217*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_DIV_ISP0>,
218*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_DIV_ISP1>,
219*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_DIV_MCUISP0>,
220*464c2572SKrzysztof Kozlowski                     <&isp_clock CLK_ISP_DIV_MCUISP1>,
221*464c2572SKrzysztof Kozlowski                     <&clock CLK_MOUT_MPLL_USER_T>,
222*464c2572SKrzysztof Kozlowski                     <&clock CLK_ACLK200>,
223*464c2572SKrzysztof Kozlowski                     <&clock CLK_ACLK400_MCUISP>,
224*464c2572SKrzysztof Kozlowski                     <&clock CLK_DIV_ACLK200>,
225*464c2572SKrzysztof Kozlowski                     <&clock CLK_DIV_ACLK400_MCUISP>,
226*464c2572SKrzysztof Kozlowski                     <&clock CLK_UART_ISP_SCLK>;
227*464c2572SKrzysztof Kozlowski            clock-names = "lite0", "lite1", "ppmuispx",
228*464c2572SKrzysztof Kozlowski                          "ppmuispmx", "isp",
229*464c2572SKrzysztof Kozlowski                          "drc", "fd", "mcuisp",
230*464c2572SKrzysztof Kozlowski                          "gicisp", "mcuctl_isp", "pwm_isp",
231*464c2572SKrzysztof Kozlowski                          "ispdiv0", "ispdiv1", "mcuispdiv0",
232*464c2572SKrzysztof Kozlowski                          "mcuispdiv1", "mpll", "aclk200",
233*464c2572SKrzysztof Kozlowski                          "aclk400mcuisp", "div_aclk200",
234*464c2572SKrzysztof Kozlowski                          "div_aclk400mcuisp", "uart";
235*464c2572SKrzysztof Kozlowski            iommus = <&sysmmu_fimc_isp>, <&sysmmu_fimc_drc>,
236*464c2572SKrzysztof Kozlowski                     <&sysmmu_fimc_fd>, <&sysmmu_fimc_mcuctl>;
237*464c2572SKrzysztof Kozlowski            iommu-names = "isp", "drc", "fd", "mcuctl";
238*464c2572SKrzysztof Kozlowski            power-domains = <&pd_isp>;
239*464c2572SKrzysztof Kozlowski
240*464c2572SKrzysztof Kozlowski            #address-cells = <1>;
241*464c2572SKrzysztof Kozlowski            #size-cells = <1>;
242*464c2572SKrzysztof Kozlowski            ranges;
243*464c2572SKrzysztof Kozlowski
244*464c2572SKrzysztof Kozlowski            pmu@10020000 {
245*464c2572SKrzysztof Kozlowski                reg = <0x10020000 0x3000>;
246*464c2572SKrzysztof Kozlowski            };
247*464c2572SKrzysztof Kozlowski
248*464c2572SKrzysztof Kozlowski            i2c-isp@12140000 {
249*464c2572SKrzysztof Kozlowski                compatible = "samsung,exynos4212-i2c-isp";
250*464c2572SKrzysztof Kozlowski                reg = <0x12140000 0x100>;
251*464c2572SKrzysztof Kozlowski                clocks = <&isp_clock CLK_ISP_I2C1_ISP>;
252*464c2572SKrzysztof Kozlowski                clock-names = "i2c_isp";
253*464c2572SKrzysztof Kozlowski                pinctrl-0 = <&fimc_is_i2c1>;
254*464c2572SKrzysztof Kozlowski                pinctrl-names = "default";
255*464c2572SKrzysztof Kozlowski                #address-cells = <1>;
256*464c2572SKrzysztof Kozlowski                #size-cells = <0>;
257*464c2572SKrzysztof Kozlowski
258*464c2572SKrzysztof Kozlowski                image-sensor@10 {
259*464c2572SKrzysztof Kozlowski                    compatible = "samsung,s5k6a3";
260*464c2572SKrzysztof Kozlowski                    reg = <0x10>;
261*464c2572SKrzysztof Kozlowski                    svdda-supply = <&cam_io_reg>;
262*464c2572SKrzysztof Kozlowski                    svddio-supply = <&ldo19_reg>;
263*464c2572SKrzysztof Kozlowski                    afvdd-supply = <&ldo19_reg>;
264*464c2572SKrzysztof Kozlowski                    clock-frequency = <24000000>;
265*464c2572SKrzysztof Kozlowski                    /* CAM_B_CLKOUT */
266*464c2572SKrzysztof Kozlowski                    clocks = <&camera 1>;
267*464c2572SKrzysztof Kozlowski                    clock-names = "extclk";
268*464c2572SKrzysztof Kozlowski                    gpios = <&gpm1 6 GPIO_ACTIVE_LOW>;
269*464c2572SKrzysztof Kozlowski
270*464c2572SKrzysztof Kozlowski                    port {
271*464c2572SKrzysztof Kozlowski                        endpoint {
272*464c2572SKrzysztof Kozlowski                            remote-endpoint = <&csis1_ep>;
273*464c2572SKrzysztof Kozlowski                            data-lanes = <1>;
274*464c2572SKrzysztof Kozlowski                        };
275*464c2572SKrzysztof Kozlowski                    };
276*464c2572SKrzysztof Kozlowski                };
277*464c2572SKrzysztof Kozlowski            };
278*464c2572SKrzysztof Kozlowski        };
279*464c2572SKrzysztof Kozlowski    };
280