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