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