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