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