/*
 * Copyright (c) 2012-2013, 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.
 */

&soc {
	qcom,msm-cam@fd8c0000 {
		compatible = "qcom,msm-cam";
		reg = <0xfd8c0000 0x10000>;
		reg-names = "msm-cam";
	};

	qcom,csiphy@fda0ac00 {
		cell-index = <0>;
		compatible = "qcom,csiphy";
		reg = <0xfda0ac00 0x200>,
			<0xfda00030 0x4>;
		reg-names = "csiphy", "csiphy_clk_mux";
		interrupts = <0 78 0>;
		interrupt-names = "csiphy";
	};

	qcom,csiphy@fda0b000 {
		cell-index = <1>;
		compatible = "qcom,csiphy";
		reg = <0xfda0b000 0x200>,
			<0xfda00038 0x4>;
		reg-names = "csiphy", "csiphy_clk_mux";
		interrupts = <0 79 0>;
		interrupt-names = "csiphy";
	};

	qcom,csid@fda08000  {
		cell-index = <0>;
		compatible = "qcom,csid";
		reg = <0xfda08000 0x100>;
		reg-names = "csid";
		interrupts = <0 51 0>;
		interrupt-names = "csid";
		qcom,csi-vdd-voltage = <1200000>;
		qcom,mipi-csi-vdd-supply = <&pm8226_l4>;
	};

	qcom,csid@fda08400 {
		cell-index = <1>;
		compatible = "qcom,csid";
		reg = <0xfda08400 0x100>;
		reg-names = "csid";
		interrupts = <0 52 0>;
		interrupt-names = "csid";
		qcom,csi-vdd-voltage = <1200000>;
		qcom,mipi-csi-vdd-supply = <&pm8226_l4>;
	};

	qcom,ispif@fda0a000 {
		cell-index = <0>;
		compatible = "qcom,ispif";
		reg = <0xfda0a000 0x500>,
			<0xfda00020 0x10>;
		reg-names = "ispif", "csi_clk_mux";
		interrupts = <0 55 0>;
		interrupt-names = "ispif";
	};

	qcom,vfe@fda10000 {
		cell-index = <0>;
		compatible = "qcom,vfe40";
		reg = <0xfda10000 0x1000>,
		      <0xfda40000 0x200>;
		reg-names = "vfe", "vfe_vbif";
		interrupts = <0 57 0>;
		interrupt-names = "vfe";
		vdd-supply = <&gdsc_vfe>;
	};

	qcom,jpeg@fda1c000 {
		cell-index = <0>;
		compatible = "qcom,jpeg";
		reg = <0xfda1c000 0x400>;
		reg-names = "jpeg";
		interrupts = <0 59 0>;
		interrupt-names = "jpeg";
		vdd-supply = <&gdsc_jpeg>;
	};

	qcom,irqrouter@fda00000 {
		cell-index = <0>;
		compatible = "qcom,irqrouter";
		reg = <0xfda00000 0x100>;
		reg-names = "irqrouter";
	};

	qcom,cpp@fda04000 {
		cell-index = <0>;
		compatible = "qcom,cpp";
		reg = <0xfda04000 0x100>,
		      <0xfda40000 0x200>,
		      <0xfda18000 0x008>;
		reg-names = "cpp", "cpp_vbif", "cpp_hw";
		interrupts = <0 49 0>;
		interrupt-names = "cpp";
		vdd-supply = <&gdsc_vfe>;
	};

	cci: qcom,cci@fda0c000 {
		cell-index = <0>;
		compatible = "qcom,cci";
		reg = <0xfda0c000 0x1000>;
		#address-cells = <1>;
		#size-cells = <0>;
		reg-names = "cci";
		interrupts = <0 50 0>;
		interrupt-names = "cci";
		gpios = <&msmgpio 29 0>,
			<&msmgpio 30 0>;
		qcom,gpio-tbl-num = <0 1>;
		qcom,gpio-tbl-flags = <1 1>;
		qcom,gpio-tbl-label = "CCI_I2C_DATA0",
				      "CCI_I2C_CLK0";
		master0: qcom,cci-master0 {
			status = "disabled";
		};
		master1: qcom,cci-master1 {
			status = "disabled";
		};
	};
};

&master0 {
	qcom,hw-thigh = <78>;
	qcom,hw-tlow = <114>;
	qcom,hw-tsu-sto = <28>;
	qcom,hw-tsu-sta = <28>;
	qcom,hw-thd-dat = <10>;
	qcom,hw-thd-sta = <77>;
	qcom,hw-tbuf = <118>;
	qcom,hw-scl-stretch-en = <0>;
	qcom,hw-trdhld = <6>;
	qcom,hw-tsp = <1>;
	status = "ok";
};

&master1 {
	qcom,hw-thigh = <78>;
	qcom,hw-tlow = <114>;
	qcom,hw-tsu-sto = <28>;
	qcom,hw-tsu-sta = <28>;
	qcom,hw-thd-dat = <10>;
	qcom,hw-thd-sta = <77>;
	qcom,hw-tbuf = <118>;
	qcom,hw-scl-stretch-en = <0>;
	qcom,hw-trdhld = <6>;
	qcom,hw-tsp = <1>;
	status = "ok";
};
