1# SPDX-License-Identifier: (GPL-2.0+ OR MIT)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/media/rockchip-isp1.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Rockchip SoC Image Signal Processing unit v1
8
9maintainers:
10  - Helen Koike <helen.koike@collabora.com>
11
12description: |
13  Rockchip ISP1 is the Camera interface for the Rockchip series of SoCs
14  which contains image processing, scaling, and compression functions.
15
16properties:
17  compatible:
18    enum:
19      - rockchip,px30-cif-isp
20      - rockchip,rk3399-cif-isp
21
22  reg:
23    maxItems: 1
24
25  interrupts:
26    minItems: 1
27    maxItems: 3
28
29  interrupt-names:
30    items:
31      - const: isp
32      - const: mi
33      - const: mipi
34
35  clocks:
36    minItems: 3
37    items:
38      # isp0 and isp1
39      - description: ISP clock
40      - description: ISP AXI clock
41      - description: ISP AHB clock
42      # only for isp1
43      - description: ISP Pixel clock
44
45  clock-names:
46    minItems: 3
47    items:
48      # isp0 and isp1
49      - const: isp
50      - const: aclk
51      - const: hclk
52      # only for isp1
53      - const: pclk
54
55  iommus:
56    maxItems: 1
57
58  phys:
59    maxItems: 1
60    description: phandle for the PHY port
61
62  phy-names:
63    const: dphy
64
65  power-domains:
66    maxItems: 1
67
68  ports:
69    $ref: /schemas/graph.yaml#/properties/ports
70
71    properties:
72      port@0:
73        $ref: /schemas/graph.yaml#/$defs/port-base
74        unevaluatedProperties: false
75        description: connection point for sensors at MIPI-DPHY RX0
76
77        properties:
78          endpoint:
79            $ref: video-interfaces.yaml#
80            unevaluatedProperties: false
81
82            properties:
83              data-lanes:
84                minItems: 1
85                maxItems: 4
86
87      port@1:
88        $ref: /schemas/graph.yaml#/$defs/port-base
89        unevaluatedProperties: false
90        description: connection point for input on the parallel interface
91
92        properties:
93          bus-type:
94            enum: [5, 6]
95
96          endpoint:
97            $ref: video-interfaces.yaml#
98            unevaluatedProperties: false
99
100        required:
101          - bus-type
102
103    anyOf:
104      - required:
105          - port@0
106      - required:
107          - port@1
108
109required:
110  - compatible
111  - reg
112  - interrupts
113  - clocks
114  - clock-names
115  - iommus
116  - phys
117  - phy-names
118  - power-domains
119  - ports
120
121allOf:
122  - if:
123      properties:
124        compatible:
125          contains:
126            const: rockchip,rk3399-cif-isp
127    then:
128      properties:
129        clocks:
130          minItems: 3
131          maxItems: 4
132        clock-names:
133          minItems: 3
134          maxItems: 4
135
136  - if:
137      properties:
138        compatible:
139          contains:
140            const: rockchip,px30-cif-isp
141    then:
142      required:
143        - interrupt-names
144
145additionalProperties: false
146
147examples:
148  - |
149
150    #include <dt-bindings/clock/rk3399-cru.h>
151    #include <dt-bindings/interrupt-controller/arm-gic.h>
152    #include <dt-bindings/power/rk3399-power.h>
153
154    parent0: parent {
155        #address-cells = <2>;
156        #size-cells = <2>;
157
158        isp0: isp0@ff910000 {
159            compatible = "rockchip,rk3399-cif-isp";
160            reg = <0x0 0xff910000 0x0 0x4000>;
161            interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH 0>;
162            clocks = <&cru SCLK_ISP0>,
163                     <&cru ACLK_ISP0_WRAPPER>,
164                     <&cru HCLK_ISP0_WRAPPER>;
165            clock-names = "isp", "aclk", "hclk";
166            iommus = <&isp0_mmu>;
167            phys = <&dphy>;
168            phy-names = "dphy";
169            power-domains = <&power RK3399_PD_ISP0>;
170
171            ports {
172                #address-cells = <1>;
173                #size-cells = <0>;
174
175                port@0 {
176                    reg = <0>;
177                    #address-cells = <1>;
178                    #size-cells = <0>;
179
180                    mipi_in_wcam: endpoint@0 {
181                        reg = <0>;
182                        remote-endpoint = <&wcam_out>;
183                        data-lanes = <1 2>;
184                    };
185
186                    mipi_in_ucam: endpoint@1 {
187                        reg = <1>;
188                        remote-endpoint = <&ucam_out>;
189                        data-lanes = <1>;
190                    };
191                };
192            };
193        };
194
195        i2c7: i2c {
196            #address-cells = <1>;
197            #size-cells = <0>;
198
199            wcam: camera@36 {
200                compatible = "ovti,ov5695";
201                reg = <0x36>;
202
203                port {
204                    wcam_out: endpoint {
205                        remote-endpoint = <&mipi_in_wcam>;
206                        data-lanes = <1 2>;
207                    };
208                };
209            };
210
211            ucam: camera@3c {
212                compatible = "ovti,ov2685";
213                reg = <0x3c>;
214
215                  port {
216                      ucam_out: endpoint {
217                          remote-endpoint = <&mipi_in_ucam>;
218                          data-lanes = <1>;
219                      };
220                  };
221            };
222        };
223    };
224
225  - |
226
227    #include <dt-bindings/interrupt-controller/arm-gic.h>
228    #include <dt-bindings/power/px30-power.h>
229
230    parent1: parent {
231        #address-cells = <2>;
232        #size-cells = <2>;
233
234        isp: isp@ff4a0000 {
235            compatible = "rockchip,px30-cif-isp";
236            reg = <0x0 0xff4a0000 0x0 0x8000>;
237            interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
238                         <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
239                         <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
240            interrupt-names = "isp", "mi", "mipi";
241            clocks = <&cru SCLK_ISP0>,
242                     <&cru ACLK_ISP0_WRAPPER>,
243                     <&cru HCLK_ISP0_WRAPPER>,
244                     <&cru PCLK_ISP1_WRAPPER>;
245            clock-names = "isp", "aclk", "hclk", "pclk";
246            iommus = <&isp_mmu>;
247            phys = <&csi_dphy>;
248            phy-names = "dphy";
249            power-domains = <&power PX30_PD_VI>;
250
251            ports {
252                #address-cells = <1>;
253                #size-cells = <0>;
254
255                port@0 {
256                    reg = <0>;
257                    #address-cells = <1>;
258                    #size-cells = <0>;
259
260                    mipi_in_ucam1: endpoint@0 {
261                        reg = <0>;
262                        remote-endpoint = <&ucam1_out>;
263                        data-lanes = <1 2>;
264                    };
265                };
266            };
267        };
268
269        i2c2: i2c {
270            #address-cells = <1>;
271            #size-cells = <0>;
272
273            ov5695: camera@36 {
274                compatible = "ovti,ov5647";
275                reg = <0x36>;
276                clocks = <&cru SCLK_CIF_OUT>;
277
278                port {
279                    ucam1_out: endpoint {
280                        remote-endpoint = <&mipi_in_ucam1>;
281                        data-lanes = <1 2>;
282                    };
283                };
284            };
285        };
286    };
287