1# SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/i2c/qcom,i2c-cci.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Qualcomm Camera Control Interface (CCI) I2C controller
8
9maintainers:
10  - Loic Poulain <loic.poulain@linaro.org>
11  - Robert Foss <robert.foss@linaro.org>
12
13properties:
14  compatible:
15    oneOf:
16      - enum:
17          - qcom,msm8226-cci
18          - qcom,msm8974-cci
19          - qcom,msm8996-cci
20
21      - items:
22          - enum:
23              - qcom,msm8916-cci
24          - const: qcom,msm8226-cci # CCI v1
25
26      - items:
27          - enum:
28              - qcom,sc7280-cci
29              - qcom,sc8280xp-cci
30              - qcom,sdm670-cci
31              - qcom,sdm845-cci
32              - qcom,sm6350-cci
33              - qcom,sm8250-cci
34              - qcom,sm8450-cci
35              - qcom,sm8550-cci
36              - qcom,sm8650-cci
37              - qcom,x1e80100-cci
38          - const: qcom,msm8996-cci # CCI v2
39
40  "#address-cells":
41    const: 1
42
43  "#size-cells":
44    const: 0
45
46  clocks:
47    minItems: 3
48    maxItems: 6
49
50  clock-names:
51    minItems: 3
52    maxItems: 6
53
54  interrupts:
55    maxItems: 1
56
57  power-domains:
58    maxItems: 1
59
60  reg:
61    maxItems: 1
62
63patternProperties:
64  "^i2c-bus@[01]$":
65    $ref: /schemas/i2c/i2c-controller.yaml#
66    unevaluatedProperties: false
67
68    properties:
69      reg:
70        maxItems: 1
71
72      clock-frequency:
73        default: 100000
74
75required:
76  - compatible
77  - clock-names
78  - clocks
79  - interrupts
80  - reg
81
82allOf:
83  - if:
84      properties:
85        compatible:
86          contains:
87            enum:
88              - qcom,msm8996-cci
89    then:
90      required:
91        - power-domains
92
93  - if:
94      properties:
95        compatible:
96          contains:
97            enum:
98              - qcom,msm8226-cci
99              - qcom,msm8916-cci
100    then:
101      properties:
102        i2c-bus@1: false
103
104  - if:
105      properties:
106        compatible:
107          oneOf:
108            - contains:
109                enum:
110                  - qcom,msm8974-cci
111
112            - const: qcom,msm8226-cci
113    then:
114      properties:
115        clocks:
116          maxItems: 3
117        clock-names:
118          items:
119            - const: camss_top_ahb
120            - const: cci_ahb
121            - const: cci
122
123  - if:
124      properties:
125        compatible:
126          oneOf:
127            - contains:
128                enum:
129                  - qcom,msm8916-cci
130
131            - const: qcom,msm8996-cci
132    then:
133      properties:
134        clocks:
135          minItems: 4
136          maxItems: 4
137        clock-names:
138          items:
139            - const: camss_top_ahb
140            - const: cci_ahb
141            - const: cci
142            - const: camss_ahb
143
144  - if:
145      properties:
146        compatible:
147          contains:
148            enum:
149              - qcom,sdm670-cci
150    then:
151      properties:
152        clocks:
153          minItems: 4
154          maxItems: 4
155        clock-names:
156          items:
157            - const: camnoc_axi
158            - const: soc_ahb
159            - const: cpas_ahb
160            - const: cci
161
162  - if:
163      properties:
164        compatible:
165          contains:
166            enum:
167              - qcom,sdm845-cci
168              - qcom,sm6350-cci
169    then:
170      properties:
171        clocks:
172          minItems: 6
173        clock-names:
174          items:
175            - const: camnoc_axi
176            - const: soc_ahb
177            - const: slow_ahb_src
178            - const: cpas_ahb
179            - const: cci
180            - const: cci_src
181
182  - if:
183      properties:
184        compatible:
185          contains:
186            enum:
187              - qcom,sc7280-cci
188              - qcom,sm8250-cci
189              - qcom,sm8450-cci
190    then:
191      properties:
192        clocks:
193          minItems: 5
194          maxItems: 5
195        clock-names:
196          items:
197            - const: camnoc_axi
198            - const: slow_ahb_src
199            - const: cpas_ahb
200            - const: cci
201            - const: cci_src
202
203  - if:
204      properties:
205        compatible:
206          contains:
207            enum:
208              - qcom,sc8280xp-cci
209    then:
210      properties:
211        clocks:
212          minItems: 4
213          maxItems: 4
214        clock-names:
215          items:
216            - const: camnoc_axi
217            - const: slow_ahb_src
218            - const: cpas_ahb
219            - const: cci
220
221  - if:
222      properties:
223        compatible:
224          contains:
225            enum:
226              - qcom,sm8550-cci
227              - qcom,sm8650-cci
228              - qcom,x1e80100-cci
229    then:
230      properties:
231        clocks:
232          minItems: 3
233          maxItems: 3
234        clock-names:
235          items:
236            - const: camnoc_axi
237            - const: cpas_ahb
238            - const: cci
239
240additionalProperties: false
241
242examples:
243  - |
244    #include <dt-bindings/clock/qcom,camcc-sdm845.h>
245    #include <dt-bindings/gpio/gpio.h>
246    #include <dt-bindings/interrupt-controller/arm-gic.h>
247
248    cci@ac4a000 {
249        reg = <0x0ac4a000 0x4000>;
250        compatible = "qcom,sdm845-cci", "qcom,msm8996-cci";
251        #address-cells = <1>;
252        #size-cells = <0>;
253
254        interrupts = <GIC_SPI 460 IRQ_TYPE_EDGE_RISING>;
255        power-domains = <&clock_camcc TITAN_TOP_GDSC>;
256
257        clocks = <&clock_camcc CAM_CC_CAMNOC_AXI_CLK>,
258                 <&clock_camcc CAM_CC_SOC_AHB_CLK>,
259                 <&clock_camcc CAM_CC_SLOW_AHB_CLK_SRC>,
260                 <&clock_camcc CAM_CC_CPAS_AHB_CLK>,
261                 <&clock_camcc CAM_CC_CCI_CLK>,
262                 <&clock_camcc CAM_CC_CCI_CLK_SRC>;
263        clock-names = "camnoc_axi",
264                      "soc_ahb",
265                      "slow_ahb_src",
266                      "cpas_ahb",
267                      "cci",
268                      "cci_src";
269
270        assigned-clocks = <&clock_camcc CAM_CC_CAMNOC_AXI_CLK>,
271                          <&clock_camcc CAM_CC_CCI_CLK>;
272        assigned-clock-rates = <80000000>,
273                               <37500000>;
274
275        pinctrl-names = "default", "sleep";
276        pinctrl-0 = <&cci0_default &cci1_default>;
277        pinctrl-1 = <&cci0_sleep &cci1_sleep>;
278
279        i2c-bus@0 {
280            reg = <0>;
281            clock-frequency = <1000000>;
282            #address-cells = <1>;
283            #size-cells = <0>;
284
285            camera@10 {
286                compatible = "ovti,ov8856";
287                reg = <0x10>;
288
289                reset-gpios = <&tlmm 9 GPIO_ACTIVE_LOW>;
290                pinctrl-names = "default";
291                pinctrl-0 = <&cam0_default>;
292
293                clocks = <&clock_camcc CAM_CC_MCLK0_CLK>;
294                clock-names = "xvclk";
295                clock-frequency = <19200000>;
296
297                dovdd-supply = <&vreg_lvs1a_1p8>;
298                avdd-supply = <&cam0_avdd_2v8>;
299                dvdd-supply = <&cam0_dvdd_1v2>;
300
301                port {
302                    ov8856_ep: endpoint {
303                        link-frequencies = /bits/ 64 <360000000 180000000>;
304                        data-lanes = <1 2 3 4>;
305                        remote-endpoint = <&csiphy0_ep>;
306                    };
307                };
308            };
309        };
310
311        cci_i2c1: i2c-bus@1 {
312            reg = <1>;
313            clock-frequency = <1000000>;
314            #address-cells = <1>;
315            #size-cells = <0>;
316
317            camera@60 {
318                compatible = "ovti,ov7251";
319                reg = <0x60>;
320
321                enable-gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>;
322                pinctrl-names = "default";
323                pinctrl-0 = <&cam3_default>;
324
325                clocks = <&clock_camcc CAM_CC_MCLK3_CLK>;
326                clock-names = "xclk";
327                clock-frequency = <24000000>;
328
329                vdddo-supply = <&vreg_lvs1a_1p8>;
330                vdda-supply = <&cam3_avdd_2v8>;
331
332                port {
333                    ov7251_ep: endpoint {
334                        data-lanes = <0>;
335                        link-frequencies = /bits/ 64 <240000000 319200000>;
336                        remote-endpoint = <&csiphy3_ep>;
337                    };
338                };
339            };
340        };
341    };
342