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