xref: /linux/Documentation/devicetree/bindings/i2c/qcom,i2c-cci.yaml (revision 96f30c8f0aa9923aa39b30bcaefeacf88b490231)
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          maxItems: 4
134        clock-names:
135          items:
136            - const: camss_top_ahb
137            - const: cci_ahb
138            - const: cci
139            - const: camss_ahb
140
141  - if:
142      properties:
143        compatible:
144          contains:
145            enum:
146              - qcom,sdm845-cci
147              - qcom,sm6350-cci
148    then:
149      properties:
150        clocks:
151          minItems: 6
152        clock-names:
153          items:
154            - const: camnoc_axi
155            - const: soc_ahb
156            - const: slow_ahb_src
157            - const: cpas_ahb
158            - const: cci
159            - const: cci_src
160
161  - if:
162      properties:
163        compatible:
164          contains:
165            enum:
166              - qcom,sc7280-cci
167              - qcom,sm8250-cci
168              - qcom,sm8450-cci
169    then:
170      properties:
171        clocks:
172          minItems: 5
173          maxItems: 5
174        clock-names:
175          items:
176            - const: camnoc_axi
177            - const: slow_ahb_src
178            - const: cpas_ahb
179            - const: cci
180            - const: cci_src
181
182  - if:
183      properties:
184        compatible:
185          contains:
186            enum:
187              - qcom,sc8280xp-cci
188    then:
189      properties:
190        clocks:
191          minItems: 4
192          maxItems: 4
193        clock-names:
194          items:
195            - const: camnoc_axi
196            - const: slow_ahb_src
197            - const: cpas_ahb
198            - const: cci
199
200  - if:
201      properties:
202        compatible:
203          contains:
204            enum:
205              - qcom,sm8550-cci
206              - qcom,sm8650-cci
207    then:
208      properties:
209        clocks:
210          minItems: 3
211          maxItems: 3
212        clock-names:
213          items:
214            - const: camnoc_axi
215            - const: cpas_ahb
216            - const: cci
217
218additionalProperties: false
219
220examples:
221  - |
222    #include <dt-bindings/clock/qcom,camcc-sdm845.h>
223    #include <dt-bindings/gpio/gpio.h>
224    #include <dt-bindings/interrupt-controller/arm-gic.h>
225
226    cci@ac4a000 {
227        reg = <0x0ac4a000 0x4000>;
228        compatible = "qcom,sdm845-cci", "qcom,msm8996-cci";
229        #address-cells = <1>;
230        #size-cells = <0>;
231
232        interrupts = <GIC_SPI 460 IRQ_TYPE_EDGE_RISING>;
233        power-domains = <&clock_camcc TITAN_TOP_GDSC>;
234
235        clocks = <&clock_camcc CAM_CC_CAMNOC_AXI_CLK>,
236                 <&clock_camcc CAM_CC_SOC_AHB_CLK>,
237                 <&clock_camcc CAM_CC_SLOW_AHB_CLK_SRC>,
238                 <&clock_camcc CAM_CC_CPAS_AHB_CLK>,
239                 <&clock_camcc CAM_CC_CCI_CLK>,
240                 <&clock_camcc CAM_CC_CCI_CLK_SRC>;
241        clock-names = "camnoc_axi",
242                      "soc_ahb",
243                      "slow_ahb_src",
244                      "cpas_ahb",
245                      "cci",
246                      "cci_src";
247
248        assigned-clocks = <&clock_camcc CAM_CC_CAMNOC_AXI_CLK>,
249                          <&clock_camcc CAM_CC_CCI_CLK>;
250        assigned-clock-rates = <80000000>,
251                               <37500000>;
252
253        pinctrl-names = "default", "sleep";
254        pinctrl-0 = <&cci0_default &cci1_default>;
255        pinctrl-1 = <&cci0_sleep &cci1_sleep>;
256
257        i2c-bus@0 {
258            reg = <0>;
259            clock-frequency = <1000000>;
260            #address-cells = <1>;
261            #size-cells = <0>;
262
263            camera@10 {
264                compatible = "ovti,ov8856";
265                reg = <0x10>;
266
267                reset-gpios = <&tlmm 9 GPIO_ACTIVE_LOW>;
268                pinctrl-names = "default";
269                pinctrl-0 = <&cam0_default>;
270
271                clocks = <&clock_camcc CAM_CC_MCLK0_CLK>;
272                clock-names = "xvclk";
273                clock-frequency = <19200000>;
274
275                dovdd-supply = <&vreg_lvs1a_1p8>;
276                avdd-supply = <&cam0_avdd_2v8>;
277                dvdd-supply = <&cam0_dvdd_1v2>;
278
279                port {
280                    ov8856_ep: endpoint {
281                        link-frequencies = /bits/ 64 <360000000 180000000>;
282                        data-lanes = <1 2 3 4>;
283                        remote-endpoint = <&csiphy0_ep>;
284                    };
285                };
286            };
287        };
288
289        cci_i2c1: i2c-bus@1 {
290            reg = <1>;
291            clock-frequency = <1000000>;
292            #address-cells = <1>;
293            #size-cells = <0>;
294
295            camera@60 {
296                compatible = "ovti,ov7251";
297                reg = <0x60>;
298
299                enable-gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>;
300                pinctrl-names = "default";
301                pinctrl-0 = <&cam3_default>;
302
303                clocks = <&clock_camcc CAM_CC_MCLK3_CLK>;
304                clock-names = "xclk";
305                clock-frequency = <24000000>;
306
307                vdddo-supply = <&vreg_lvs1a_1p8>;
308                vdda-supply = <&cam3_avdd_2v8>;
309
310                port {
311                    ov7251_ep: endpoint {
312                        data-lanes = <0>;
313                        link-frequencies = /bits/ 64 <240000000 319200000>;
314                        remote-endpoint = <&csiphy3_ep>;
315                    };
316                };
317            };
318        };
319    };
320