/*
 * Copyright (c) 2015-2019, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

&cci {
	#address-cells = <1>;
	#size-cells = <0>;

	actuator0: qcom,actuator@0 {
		cell-index = <0>;
		reg = <0x0>;
		compatible = "qcom,actuator";
		qcom,cci-master = <0>;
		cam_vaf-supply = <&pm8953_l17>;
		qcom,cam-vreg-name = "cam_vaf";
		qcom,cam-vreg-min-voltage = <2850000>;
		qcom,cam-vreg-max-voltage = <2850000>;
		qcom,cam-vreg-op-mode = <80000>;
	};

	eeprom0: qcom,eeprom@0 {
		cell-index = <0>;
		compatible = "qcom,eeprom";
		qcom,cci-master = <0>;
		reg = <0x0>;
		cam_vio-supply = <&pm8953_l6>;
		cam_vdig-supply = <&pm8953_l2>;
		cam_vaf-supply = <&pm8953_l17>;
		qcom,cam-vreg-name = "cam_vio", "cam_vdig", "cam_vaf";
		qcom,cam-vreg-min-voltage = <0 1200000 2850000>;
		qcom,cam-vreg-max-voltage = <0 1200000 2850000>;
		qcom,cam-vreg-op-mode = <0 105000 100000>;
		pinctrl-names = "cam_default", "cam_suspend";
		pinctrl-0 = <&cam_sensor_mclk0_default
				&cam_sensor_rear_default
				&cam_sensor_rear_vana>;
		pinctrl-1 = <&cam_sensor_mclk0_sleep &cam_sensor_rear_sleep
				&cam_sensor_rear_vana_sleep>;
		gpios = <&tlmm 26 0>,
			<&tlmm 40 0>,
			<&tlmm 39 0>,
			<&tlmm 134 0>;
		qcom,gpio-reset = <1>;
		qcom,gpio-standby = <2>;
		qcom,gpio-vana = <3>;
		qcom,gpio-req-tbl-num = <0 1 2 3>;
		qcom,gpio-req-tbl-flags = <1 0 0 0>;
		qcom,gpio-req-tbl-label = "CAMIF_MCLK0",
					"CAM_RESET0",
					"CAM_STANDBY0",
					"CAM_VANA";
		status = "ok";
		clocks = <&clock_gcc clk_mclk0_clk_src>,
				<&clock_gcc clk_gcc_camss_mclk0_clk>;
		clock-names = "cam_src_clk", "cam_clk";
		qcom,clock-rates = <19200000 0>;
	};

	eeprom2: qcom,eeprom@2 {
		cell-index = <2>;
		reg = <0x2>;
		compatible = "qcom,eeprom";
		qcom,cci-master = <1>;
		cam_vdig-supply = <&pm8953_l23>;
		cam_vana-supply = <&pm8953_l22>;
		cam_vio-supply = <&pm8953_l6>;
		qcom,cam-vreg-name = "cam_vdig", "cam_vio", "cam_vana";
		qcom,cam-vreg-min-voltage = <1200000 0 2800000>;
		qcom,cam-vreg-max-voltage = <1200000 0 2800000>;
		qcom,cam-vreg-op-mode = <105000 0 80000>;
		qcom,gpio-no-mux = <0>;
		pinctrl-names = "cam_default", "cam_suspend";
		pinctrl-0 = <&cam_sensor_mclk1_default
						&cam_sensor_front1_default>;
		pinctrl-1 = <&cam_sensor_mclk1_sleep &cam_sensor_front1_sleep>;
		gpios = <&tlmm 27 0>,
			<&tlmm 129 0>,
			<&tlmm 130 0>;
		qcom,gpio-reset = <1>;
		qcom,gpio-standby = <2>;
		qcom,gpio-req-tbl-num = <0 1 2>;
		qcom,gpio-req-tbl-flags = <1 0 0>;
		qcom,gpio-req-tbl-label = "CAMIF_MCLK2",
					  "CAM_RESET2",
					  "CAM_STANDBY2";
		qcom,sensor-mode = <0>;
		status = "ok";
		clocks = <&clock_gcc clk_mclk1_clk_src>,
			<&clock_gcc clk_gcc_camss_mclk1_clk>;
		clock-names = "cam_src_clk", "cam_clk";
		qcom,clock-rates = <19200000 0>;
	};

	qcom,camera@0 {
		cell-index = <0>;
		compatible = "qcom,camera";
		reg = <0x0>;
		qcom,csiphy-sd-index = <0>;
		qcom,csid-sd-index = <0>;
		qcom,mount-angle = <90>;
		qcom,led-flash-src = <&led_flash0>;
		qcom,eeprom-src = <&eeprom0>;
		qcom,actuator-src = <&actuator0>;
		cam_vio-supply = <&pm8953_l6>;
		cam_vdig-supply = <&pm8953_l2>;
		cam_vaf-supply = <&pm8953_l17>;
		cam_vana-supply = <&pm8953_l22>;
		qcom,cam-vreg-name = "cam_vio", "cam_vdig", "cam_vaf",
						"cam_vana";
		qcom,cam-vreg-min-voltage = <0 1200000 2850000 2800000>;
		qcom,cam-vreg-max-voltage = <0 1200000 2850000 2800000>;
		qcom,cam-vreg-op-mode = <0 105000 100000 80000>;
		pinctrl-names = "cam_default", "cam_suspend";
		pinctrl-0 = <&cam_sensor_mclk0_default
				&cam_sensor_rear_default
				&cam_sensor_rear_vana>;
		pinctrl-1 = <&cam_sensor_mclk0_sleep &cam_sensor_rear_sleep
				&cam_sensor_rear_vana_sleep>;
		gpios = <&tlmm 26 0>,
			<&tlmm 40 0>,
			<&tlmm 39 0>,
			<&tlmm 134 0>;
		qcom,gpio-reset = <1>;
		qcom,gpio-standby = <2>;
		qcom,gpio-vana = <3>;
		qcom,gpio-req-tbl-num = <0 1 2 3>;
		qcom,gpio-req-tbl-flags = <1 0 0 0>;
		qcom,gpio-req-tbl-label = "CAMIF_MCLK0",
			"CAM_RESET0",
			"CAM_STANDBY0",
			"CAM_VANA";
		qcom,sensor-position = <0>;
		qcom,sensor-mode = <0>;
		qcom,cci-master = <0>;
		status = "ok";
		clocks = <&clock_gcc clk_mclk0_clk_src>,
				<&clock_gcc clk_gcc_camss_mclk0_clk>;
		clock-names = "cam_src_clk", "cam_clk";
		qcom,clock-rates = <24000000 0>;
	};

	qcom,camera@1 {
		cell-index = <1>;
		compatible = "qcom,camera";
		reg = <0x1>;
		qcom,csiphy-sd-index = <1>;
		qcom,csid-sd-index = <1>;
		qcom,mount-angle = <90>;
		cam_vdig-supply = <&pm8953_l23>;
		cam_vana-supply = <&pm8953_l22>;
		cam_vio-supply = <&pm8953_l6>;
		cam_vaf-supply = <&pm8953_l17>;
		qcom,cam-vreg-name = "cam_vdig", "cam_vio", "cam_vana",
							"cam_vaf";
		qcom,cam-vreg-min-voltage = <1200000 0 2800000 2850000>;
		qcom,cam-vreg-max-voltage = <1200000 0 2800000 2850000>;
		qcom,cam-vreg-op-mode = <200000 0 80000 100000>;
		pinctrl-names = "cam_default", "cam_suspend";
		pinctrl-0 = <&cam_sensor_mclk2_default
				&cam_sensor_front_default>;
		pinctrl-1 = <&cam_sensor_mclk2_sleep
				&cam_sensor_front_sleep>;
		gpios = <&tlmm 28 0>,
			<&tlmm 131 0>,
			<&tlmm 132 0>;
		qcom,gpio-reset = <1>;
		qcom,gpio-standby = <2>;
		qcom,gpio-req-tbl-num = <0 1 2>;
		qcom,gpio-req-tbl-flags = <1 0 0>;
		qcom,gpio-req-tbl-label = "CAMIF_MCLK1",
			"CAM_RESET1",
			"CAM_STANDBY1";
		qcom,sensor-position = <1>;
		qcom,sensor-mode = <0>;
		qcom,cci-master = <0>;
		status = "disabled";
		clocks = <&clock_gcc clk_mclk2_clk_src>,
				<&clock_gcc clk_gcc_camss_mclk2_clk>;
		clock-names = "cam_src_clk", "cam_clk";
		qcom,clock-rates = <24000000 0>;
	};

	qcom,camera@2 {
		cell-index = <2>;
		compatible = "qcom,camera";
		reg = <0x02>;
		qcom,csiphy-sd-index = <2>;
		qcom,csid-sd-index = <2>;
		qcom,mount-angle = <270>;
		qcom,eeprom-src = <&eeprom2>;
		cam_vdig-supply = <&pm8953_l23>;
		cam_vana-supply = <&pm8953_l22>;
		cam_vio-supply = <&pm8953_l6>;
		qcom,cam-vreg-name = "cam_vdig", "cam_vio", "cam_vana";
		qcom,cam-vreg-min-voltage = <1200000 0 2800000>;
		qcom,cam-vreg-max-voltage = <1200000 0 2800000>;
		qcom,cam-vreg-op-mode = <105000 0 80000>;
		qcom,gpio-no-mux = <0>;
		pinctrl-names = "cam_default", "cam_suspend";
		pinctrl-0 = <&cam_sensor_mclk1_default
				&cam_sensor_front1_default>;
		pinctrl-1 = <&cam_sensor_mclk1_sleep
				&cam_sensor_front1_sleep>;
		gpios = <&tlmm 27 0>,
			<&tlmm 129 0>,
			<&tlmm 130 0>;
		qcom,gpio-reset = <1>;
		qcom,gpio-standby = <2>;
		qcom,gpio-req-tbl-num = <0 1 2>;
		qcom,gpio-req-tbl-flags = <1 0 0>;
		qcom,gpio-req-tbl-label = "CAMIF_MCLK2",
					  "CAM_RESET2",
					  "CAM_STANDBY2";
		qcom,sensor-position = <1>;
		qcom,sensor-mode = <0>;
		qcom,cci-master = <1>;
		status = "ok";
		clocks = <&clock_gcc clk_mclk1_clk_src>,
			<&clock_gcc clk_gcc_camss_mclk1_clk>;
		clock-names = "cam_src_clk", "cam_clk";
		qcom,clock-rates = <24000000 0>;
	};
};
