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