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