0001 # SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause
0002 %YAML 1.2
0003 ---
0004 $id: http://devicetree.org/schemas/i2c/qcom,i2c-cci.yaml#
0005 $schema: http://devicetree.org/meta-schemas/core.yaml#
0006
0007 title: Qualcomm Camera Control Interface (CCI) I2C controller
0008
0009 maintainers:
0010 - Loic Poulain <loic.poulain@linaro.org>
0011 - Robert Foss <robert.foss@linaro.org>
0012
0013 properties:
0014 compatible:
0015 enum:
0016 - qcom,msm8916-cci
0017 - qcom,msm8974-cci
0018 - qcom,msm8996-cci
0019 - qcom,sdm845-cci
0020 - qcom,sm8250-cci
0021 - qcom,sm8450-cci
0022
0023 "#address-cells":
0024 const: 1
0025
0026 "#size-cells":
0027 const: 0
0028
0029 clocks:
0030 minItems: 4
0031 maxItems: 6
0032
0033 clock-names:
0034 minItems: 4
0035 maxItems: 6
0036
0037 interrupts:
0038 maxItems: 1
0039
0040 power-domains:
0041 maxItems: 1
0042
0043 reg:
0044 maxItems: 1
0045
0046 patternProperties:
0047 "^i2c-bus@[01]$":
0048 $ref: /schemas/i2c/i2c-controller.yaml#
0049 unevaluatedProperties: false
0050
0051 properties:
0052 reg:
0053 maxItems: 1
0054
0055 clock-frequency:
0056 default: 100000
0057
0058 required:
0059 - compatible
0060 - clock-names
0061 - clocks
0062 - interrupts
0063 - reg
0064
0065 allOf:
0066 - if:
0067 properties:
0068 compatible:
0069 contains:
0070 enum:
0071 - qcom,msm8996-cci
0072 then:
0073 required:
0074 - power-domains
0075
0076 - if:
0077 properties:
0078 compatible:
0079 contains:
0080 enum:
0081 - qcom,msm8916-cci
0082 then:
0083 properties:
0084 i2c-bus@1: false
0085
0086 - if:
0087 properties:
0088 compatible:
0089 contains:
0090 enum:
0091 - qcom,msm8916-cci
0092 - qcom,msm8996-cci
0093 then:
0094 properties:
0095 clocks:
0096 maxItems: 4
0097 clock-names:
0098 items:
0099 - const: camss_top_ahb
0100 - const: cci_ahb
0101 - const: cci
0102 - const: camss_ahb
0103
0104 - if:
0105 properties:
0106 compatible:
0107 contains:
0108 enum:
0109 - qcom,sdm845-cci
0110 then:
0111 properties:
0112 clocks:
0113 minItems: 6
0114 clock-names:
0115 items:
0116 - const: camnoc_axi
0117 - const: soc_ahb
0118 - const: slow_ahb_src
0119 - const: cpas_ahb
0120 - const: cci
0121 - const: cci_src
0122
0123 - if:
0124 properties:
0125 compatible:
0126 contains:
0127 enum:
0128 - qcom,sm8250-cci
0129 then:
0130 properties:
0131 clocks:
0132 minItems: 5
0133 maxItems: 5
0134 clock-names:
0135 items:
0136 - const: camnoc_axi
0137 - const: slow_ahb_src
0138 - const: cpas_ahb
0139 - const: cci
0140 - const: cci_src
0141
0142 additionalProperties: false
0143
0144 examples:
0145 - |
0146 #include <dt-bindings/clock/qcom,camcc-sdm845.h>
0147 #include <dt-bindings/gpio/gpio.h>
0148 #include <dt-bindings/interrupt-controller/arm-gic.h>
0149
0150 cci@ac4a000 {
0151 reg = <0x0ac4a000 0x4000>;
0152 compatible = "qcom,sdm845-cci";
0153 #address-cells = <1>;
0154 #size-cells = <0>;
0155
0156 interrupts = <GIC_SPI 460 IRQ_TYPE_EDGE_RISING>;
0157 power-domains = <&clock_camcc TITAN_TOP_GDSC>;
0158
0159 clocks = <&clock_camcc CAM_CC_CAMNOC_AXI_CLK>,
0160 <&clock_camcc CAM_CC_SOC_AHB_CLK>,
0161 <&clock_camcc CAM_CC_SLOW_AHB_CLK_SRC>,
0162 <&clock_camcc CAM_CC_CPAS_AHB_CLK>,
0163 <&clock_camcc CAM_CC_CCI_CLK>,
0164 <&clock_camcc CAM_CC_CCI_CLK_SRC>;
0165 clock-names = "camnoc_axi",
0166 "soc_ahb",
0167 "slow_ahb_src",
0168 "cpas_ahb",
0169 "cci",
0170 "cci_src";
0171
0172 assigned-clocks = <&clock_camcc CAM_CC_CAMNOC_AXI_CLK>,
0173 <&clock_camcc CAM_CC_CCI_CLK>;
0174 assigned-clock-rates = <80000000>,
0175 <37500000>;
0176
0177 pinctrl-names = "default", "sleep";
0178 pinctrl-0 = <&cci0_default &cci1_default>;
0179 pinctrl-1 = <&cci0_sleep &cci1_sleep>;
0180
0181 i2c-bus@0 {
0182 reg = <0>;
0183 clock-frequency = <1000000>;
0184 #address-cells = <1>;
0185 #size-cells = <0>;
0186
0187 camera@10 {
0188 compatible = "ovti,ov8856";
0189 reg = <0x10>;
0190
0191 reset-gpios = <&tlmm 9 GPIO_ACTIVE_LOW>;
0192 pinctrl-names = "default";
0193 pinctrl-0 = <&cam0_default>;
0194
0195 clocks = <&clock_camcc CAM_CC_MCLK0_CLK>;
0196 clock-names = "xvclk";
0197 clock-frequency = <19200000>;
0198
0199 dovdd-supply = <&vreg_lvs1a_1p8>;
0200 avdd-supply = <&cam0_avdd_2v8>;
0201 dvdd-supply = <&cam0_dvdd_1v2>;
0202
0203 port {
0204 ov8856_ep: endpoint {
0205 link-frequencies = /bits/ 64 <360000000 180000000>;
0206 data-lanes = <1 2 3 4>;
0207 remote-endpoint = <&csiphy0_ep>;
0208 };
0209 };
0210 };
0211 };
0212
0213 cci_i2c1: i2c-bus@1 {
0214 reg = <1>;
0215 clock-frequency = <1000000>;
0216 #address-cells = <1>;
0217 #size-cells = <0>;
0218
0219 camera@60 {
0220 compatible = "ovti,ov7251";
0221 reg = <0x60>;
0222
0223 enable-gpios = <&tlmm 21 GPIO_ACTIVE_HIGH>;
0224 pinctrl-names = "default";
0225 pinctrl-0 = <&cam3_default>;
0226
0227 clocks = <&clock_camcc CAM_CC_MCLK3_CLK>;
0228 clock-names = "xclk";
0229 clock-frequency = <24000000>;
0230
0231 vdddo-supply = <&vreg_lvs1a_1p8>;
0232 vdda-supply = <&cam3_avdd_2v8>;
0233
0234 port {
0235 ov7251_ep: endpoint {
0236 data-lanes = <0 1>;
0237 remote-endpoint = <&csiphy3_ep>;
0238 };
0239 };
0240 };
0241 };
0242 };