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