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          endpoint:
94            $ref: video-interfaces.yaml#
95            unevaluatedProperties: false
96
97            properties:
98              bus-type:
99                enum: [5, 6]
100
101            required:
102              - bus-type
103
104    anyOf:
105      - required:
106          - port@0
107      - required:
108          - port@1
109
110required:
111  - compatible
112  - reg
113  - interrupts
114  - clocks
115  - clock-names
116  - iommus
117  - phys
118  - phy-names
119  - power-domains
120  - ports
121
122allOf:
123  - if:
124      properties:
125        compatible:
126          contains:
127            const: rockchip,rk3399-cif-isp
128    then:
129      properties:
130        clocks:
131          minItems: 3
132          maxItems: 4
133        clock-names:
134          minItems: 3
135          maxItems: 4
136
137  - if:
138      properties:
139        compatible:
140          contains:
141            const: rockchip,px30-cif-isp
142    then:
143      required:
144        - interrupt-names
145
146additionalProperties: false
147
148examples:
149  - |
150
151    #include <dt-bindings/clock/rk3399-cru.h>
152    #include <dt-bindings/interrupt-controller/arm-gic.h>
153    #include <dt-bindings/power/rk3399-power.h>
154
155    parent0: parent {
156        #address-cells = <2>;
157        #size-cells = <2>;
158
159        isp0: isp0@ff910000 {
160            compatible = "rockchip,rk3399-cif-isp";
161            reg = <0x0 0xff910000 0x0 0x4000>;
162            interrupts = <GIC_SPI 43 IRQ_TYPE_LEVEL_HIGH 0>;
163            clocks = <&cru SCLK_ISP0>,
164                     <&cru ACLK_ISP0_WRAPPER>,
165                     <&cru HCLK_ISP0_WRAPPER>;
166            clock-names = "isp", "aclk", "hclk";
167            iommus = <&isp0_mmu>;
168            phys = <&dphy>;
169            phy-names = "dphy";
170            power-domains = <&power RK3399_PD_ISP0>;
171
172            ports {
173                #address-cells = <1>;
174                #size-cells = <0>;
175
176                port@0 {
177                    reg = <0>;
178                    #address-cells = <1>;
179                    #size-cells = <0>;
180
181                    mipi_in_wcam: endpoint@0 {
182                        reg = <0>;
183                        remote-endpoint = <&wcam_out>;
184                        data-lanes = <1 2>;
185                    };
186
187                    mipi_in_ucam: endpoint@1 {
188                        reg = <1>;
189                        remote-endpoint = <&ucam_out>;
190                        data-lanes = <1>;
191                    };
192                };
193            };
194        };
195
196        i2c7: i2c {
197            #address-cells = <1>;
198            #size-cells = <0>;
199
200            wcam: camera@36 {
201                compatible = "ovti,ov5695";
202                reg = <0x36>;
203                clocks = <&cru SCLK_TESTCLKOUT1>;
204
205                port {
206                    wcam_out: endpoint {
207                        remote-endpoint = <&mipi_in_wcam>;
208                        data-lanes = <1 2>;
209                    };
210                };
211            };
212
213            ucam: camera@3c {
214                compatible = "ovti,ov2685";
215                reg = <0x3c>;
216
217                clocks = <&cru SCLK_TESTCLKOUT1>;
218                clock-names = "xvclk";
219
220                avdd-supply = <&pp2800_cam>;
221                dovdd-supply = <&pp1800>;
222                dvdd-supply = <&pp1800>;
223
224                port {
225                    ucam_out: endpoint {
226                        remote-endpoint = <&mipi_in_ucam>;
227                        data-lanes = <1>;
228                    };
229                };
230            };
231        };
232    };
233
234  - |
235
236    #include <dt-bindings/interrupt-controller/arm-gic.h>
237    #include <dt-bindings/power/px30-power.h>
238
239    parent1: parent {
240        #address-cells = <2>;
241        #size-cells = <2>;
242
243        isp: isp@ff4a0000 {
244            compatible = "rockchip,px30-cif-isp";
245            reg = <0x0 0xff4a0000 0x0 0x8000>;
246            interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
247                         <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
248                         <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
249            interrupt-names = "isp", "mi", "mipi";
250            clocks = <&cru SCLK_ISP0>,
251                     <&cru ACLK_ISP0_WRAPPER>,
252                     <&cru HCLK_ISP0_WRAPPER>,
253                     <&cru PCLK_ISP1_WRAPPER>;
254            clock-names = "isp", "aclk", "hclk", "pclk";
255            iommus = <&isp_mmu>;
256            phys = <&csi_dphy>;
257            phy-names = "dphy";
258            power-domains = <&power PX30_PD_VI>;
259
260            ports {
261                #address-cells = <1>;
262                #size-cells = <0>;
263
264                port@0 {
265                    reg = <0>;
266                    #address-cells = <1>;
267                    #size-cells = <0>;
268
269                    mipi_in_ucam1: endpoint@0 {
270                        reg = <0>;
271                        remote-endpoint = <&ucam1_out>;
272                        data-lanes = <1 2>;
273                    };
274                };
275            };
276        };
277
278        i2c2: i2c {
279            #address-cells = <1>;
280            #size-cells = <0>;
281
282            ov5695: camera@36 {
283                compatible = "ovti,ov5647";
284                reg = <0x36>;
285                clocks = <&cru SCLK_CIF_OUT>;
286
287                port {
288                    ucam1_out: endpoint {
289                        remote-endpoint = <&mipi_in_ucam1>;
290                        data-lanes = <1 2>;
291                    };
292                };
293            };
294        };
295    };
296