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