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