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