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

/include/ "msm8974-mtp.dtsi"

&cci {
	qcom,camera@6e {
		qcom,vdd-cx-supply = <&pma8084_s2>;
		cam_vdig-supply = <&pma8084_l3>;
		cam_vana-supply = <&pma8084_l17>;
		cam_vio-supply = <&pma8084_lvs4>;
		cam_vaf-supply = <&pma8084_l23>;
	};

	qcom,camera@20 {
		qcom,vdd-cx-supply = <&pma8084_s2>;
		cam_vdig-supply = <&pma8084_l3>;
		cam_vana-supply = <&pma8084_l17>;
		cam_vio-supply = <&pma8084_lvs4>;
		cam_vaf-supply = <&pma8084_l23>;
	};

	qcom,camera@6c {
		qcom,vdd-cx-supply = <&pma8084_s2>;
		cam_vdig-supply = <&pma8084_l3>;
		cam_vana-supply = <&pma8084_l17>;
		cam_vio-supply = <&pma8084_lvs4>;
	};

	qcom,camera@90 {
		qcom,vdd-cx-supply = <&pma8084_s2>;
		cam_vdig-supply = <&pma8084_l3>;
		cam_vana-supply = <&pma8084_l17>;
		cam_vio-supply = <&pma8084_lvs4>;
	};


	qcom,camera@0 {
		qcom,vdd-cx-supply = <&pma8084_s2>;
		cam_vdig-supply = <&pma8084_l3>;
		cam_vana-supply = <&pma8084_l17>;
		cam_vio-supply = <&pma8084_lvs4>;
		cam_vaf-supply = <&pma8084_l23>;
	};

	qcom,camera@1 {
		qcom,vdd-cx-supply = <&pma8084_s2>;
		cam_vdig-supply = <&pma8084_l3>;
		cam_vana-supply = <&pma8084_l17>;
		cam_vio-supply = <&pma8084_lvs4>;
		cam_vaf-supply = <&pma8084_l23>;
	};

	qcom,camera@2 {
		qcom,vdd-cx-supply = <&pma8084_s2>;
		cam_vdig-supply = <&pma8084_l3>;
		cam_vana-supply = <&pma8084_l17>;
		cam_vio-supply = <&pma8084_lvs4>;
	};

	qcom,camera@3 {
		qcom,vdd-cx-supply = <&pma8084_s2>;
		cam_vdig-supply = <&pma8084_l3>;
		cam_vana-supply = <&pma8084_l17>;
		cam_vio-supply = <&pma8084_lvs4>;
	};
};

&soc {
	i2c@f9924000 {
		synaptics@20 {
			vdd-supply = <&pma8084_l18>;
			vcc_i2c-supply = <&pma8084_lvs1>;
		};

		atmel_mxt_ts@4a {
			vdd_ana-supply = <&pma8084_l18>;
			vcc_i2c-supply = <&pma8084_lvs1>;
		};
	};

	i2c@f9967000 {
		isa1200@48 {
			vcc_i2c-supply = <&pma8084_s4>;
		};
	};

	i2c@f9928000 { /* BLSP1 QUP6 */
		nfc-nci@e {
			compatible = "qcom,nfc-nci";
			reg = <0x0e>;
			qcom,irq-gpio = <&msmgpio 59 0x00>;
			qcom,dis-gpio = <&pma8084_mpps 7 0>;
			qcom,clk-src = "BBCLK2";
			qcom,clk-en-gpio = <&msmgpio 0 0x00>;
			interrupt-parent = <&msmgpio>;
			interrupts = <59 0>;
			qcom,clk-gpio = <&pma8084_gpios 10 0>;
		};
	};

	qcom,ssusb@f9200000 {
		vbus_dwc3-supply = <&pm8941_mvs1>;
	};

	gpio_keys {
		camera_snapshot {
			gpios = <&pma8084_gpios 3 0x1>;
		};

		camera_focus {
			gpios = <&pma8084_gpios 4 0x1>;
		};

		vol_up {
			gpios = <&pma8084_gpios 5 0x1>;
		};
	};

	spi@f9923000 {
		ethernet-switch@2 {
			rst-gpio = <&pma8084_mpps 6 0>;
		};
	};
};

&sdhc_1 {
	vdd-supply = <&pma8084_l20>;
	vdd-io-supply = <&pma8084_s4>;

	qcom,pad-pull-on = <0x0 0x3 0x3 0x1>; /* no-pull, pull-up, pull-up, pull-down */
	qcom,pad-pull-off = <0x0 0x3 0x3 0x1>; /* no-pull, pull-up, pull-up, pull-down */
};

&sdhc_2 {
	vdd-supply = <&pma8084_l21>;
	vdd-io-supply = <&pma8084_l13>;
};

&pma8084_gpios {
	gpio@c000 { /* GPIO 1 */
		/* Unused */
		qcom,mode = <0>;		/* Digital input */
		qcom,pull = <0>;		/* Pull up 30 uA */
		qcom,master-en = <1>;
	};

	gpio@c100 { /* GPIO 2 */
		/* Unused */
		qcom,mode = <0>;		/* Digital input */
		qcom,pull = <0>;		/* Pull up 30 uA */
		qcom,master-en = <1>;
	};

	gpio@c200 { /* GPIO 3 */
		/* Snapshot button */
		qcom,mode = <0>;		/* Digital input */
		qcom,pull = <0>;		/* Pull up 30 uA */
		qcom,vin-sel = <2>;		/* PMA8084 S4 = 1.8 V */
		qcom,src-sel = <0>;		/* Constant */
		qcom,master-en = <1>;
	};

	gpio@c300 { /* GPIO 4 */
		/* Focus button */
		qcom,mode = <0>;		/* Digital input */
		qcom,pull = <0>;		/* Pull up 30 uA */
		qcom,vin-sel = <2>;		/* PMA8084 S4 = 1.8 V */
		qcom,src-sel = <0>;		/* Constant */
		qcom,master-en = <1>;
	};

	gpio@c400 { /* GPIO 5 */
		/* Volume up button */
		qcom,mode = <0>;		/* Digital input */
		qcom,pull = <0>;		/* Pull up 30 uA */
		qcom,vin-sel = <2>;		/* PMA8084 S4 = 1.8 V */
		qcom,src-sel = <0>;		/* Constant */
		qcom,master-en = <1>;
	};

	gpio@c500 { /* GPIO 6 */
		/* Flash LED now */
		qcom,mode = <0>;		/* Digital input */
		qcom,pull = <4>;		/* Pull down */
		qcom,master-en = <1>;
	};

	gpio@c600 { /* GPIO 7 */
		/* GRFC_12 */
	};

	gpio@c700 { /* GPIO 8 */
		/* Unused */
		qcom,mode = <0>;		/* Digital input */
		qcom,pull = <0>;		/* Pull up 30 uA */
		qcom,master-en = <1>;
	};

	gpio@c800 { /* GPIO 9 */
		/* Unused */
		qcom,mode = <1>;		/* Digital output */
		qcom,out-strength = <1>;	/* Low */
		qcom,src-sel = <2>;		/* Function 1  */
		qcom,master-en = <1>;
	};

	gpio@c900 { /* GPIO 10 */
		/* NFC clk request */
		qcom,mode = <0>;		/* QPNP_PIN_MODE_DIG_IN */
		qcom,pull = <5>;		/* QPNP_PIN_PULL_NO */
		qcom,vin-sel = <2>;		/* QPNP_PIN_VIN2 */
		qcom,src-sel = <2>;		/* QPNP_PIN_SEL_FUNC_1 */
		qcom,master-en = <1>;
	};

	gpio@ca00 { /* GPIO 11 */
		/* Unused */
		qcom,mode = <1>;		/* Digital output */
		qcom,out-strength = <1>;	/* Low */
		qcom,src-sel = <2>;		/* Function 1  */
		qcom,master-en = <1>;
	};

	gpio@cb00 { /* GPIO 12 */
		/* NFC clk request */
		qcom,mode = <0>;		/* QPNP_PIN_MODE_DIG_IN */
		qcom,pull = <5>;		/* QPNP_PIN_PULL_NO */
		qcom,vin-sel = <2>;		/* QPNP_PIN_VIN2 */
		qcom,src-sel = <2>;		/* QPNP_PIN_SEL_FUNC_1 */
		qcom,master-en = <1>;
	};

	gpio@cc00 { /* GPIO 13 */
		/* TS_CHGR_IN */
		qcom,mode = <0>;		/* Digital input */
		qcom,pull = <4>;		/* Pull down */
		qcom,master-en = <1>;
	};

	gpio@cd00 { /* GPIO 14 */
		/* Unused */
		qcom,mode = <1>;		/* Digital output */
		qcom,out-strength = <1>;	/* Low */
		qcom,src-sel = <2>;		/* Function 1  */
		qcom,master-en = <1>;
	};

	gpio@ce00 { /* GPIO 15 */
		/* Codec clock */
		qcom,mode = <1>;		/* Digital output */
		qcom,output-type = <0>;		/* CMOS */
		qcom,vin-sel = <2>;		/* PMA8084 S4 = 1.8 V */
		qcom,out-strength = <1>;	/* Low */
		qcom,src-sel = <2>;		/* Function 1 - DIVCLK1 */
		qcom,master-en = <1>;
	};

	gpio@cf00 { /* GPIO 16 */
		/* Haptics clock */
		qcom,mode = <1>;		/* Digital output */
		qcom,output-type = <0>;		/* CMOS */
		qcom,vin-sel = <2>;		/* PMA8084 S4 = 1.8 V */
		qcom,out-strength = <3>;	/* High */
		qcom,src-sel = <3>;       	/* Function 2 - SLEEPCLK3  */
		qcom,master-en = <1>;
	};

	gpio@d000 { /* GPIO 17 */
		/* QPA clock */
	};

	gpio@d100 { /* GPIO 18 */
		/* Unused */
	};

	gpio@d200 { /* GPIO 19 */
		/* BOOST_BYP */
	};

	gpio@d300 { /* GPIO 20 */
		/* Display enable */
		qcom,mode = <1>;		/* Digital output */
		qcom,output-type = <0>;		/* CMOS */
		qcom,vin-sel = <2>;		/* PMA8084 S4 = 1.8 V */
		qcom,out-strength = <1>;	/* Low */
		qcom,src-sel = <0>;		/* Constant */
		qcom,master-en = <1>;
	};

	gpio@d400 { /* GPIO 21 */
		/* BATT_GONE */
	};

	gpio@d500 { /* GPIO 22 */
		/* BATT_REM_ALARM */
	};
};

&pma8084_mpps {
	mpp@a000 { /* MPP 1 */
		/* SDC_UIM_VBIAS */
		status = "disabled";
	};

	mpp@a100 { /* MPP 2 */
		/* PM8941_PON_1 */
	};

	mpp@a200 { /* MPP 3 */
		/* VREF_DAC */
	};

	mpp@a300 { /* MPP 4 */
		/* Unused */
	};

	mpp@a400 { /* MPP 5 */
		/* Unused */
	};

	mpp@a500 { /* MPP 6 */
		/* SPI ethernet enable */
		qcom,mode = <1>;		/* Digital output */
		qcom,output-type = <0>;		/* CMOS */
		qcom,vin-sel = <2>;		/* PMA8084 S4 = 1.8V > 1.6V */
		qcom,src-sel = <0>;		/* Constant */
		qcom,out-strength = <1>;	/* Low */
		qcom,master-en = <1>;
	};

	mpp@a600 { /* MPP 7 */
		/* NFC disable */
		qcom,mode = <1>;		/* Digital output */
		qcom,out-strength = <1>;	/* Low */
		qcom,master-en = <1>;
	};

	mpp@a700 { /* MPP 8 */
		/* Unused */
		qcom,mode = <1>;		/* Digital output */
		qcom,out-strength = <1>;	/* Low */
		qcom,master-en = <1>;
	};
};
