/* Copyright (c) 2014-2017, 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 "msm8909.dtsi"
#include "msm8909-pinctrl.dtsi"
#include "msm8909-regulator.dtsi"

&soc {
	i2c@78b9000 { /* BLSP1 QUP5 */
		synaptics@20 {
			compatible = "synaptics,dsx";
			reg = <0x20>;
			interrupt-parent = <&msm_gpio>;
			interrupts = <13 0x2008>;
			avdd-supply = <&pm8909_l17>;
			vdd-supply = <&pm8909_l6>;
			/* pins used by touchscreen */
			pinctrl-names = "pmx_ts_active","pmx_ts_suspend","pmx_ts_release";
			pinctrl-0 = <&ts_int_active &ts_reset_active>;
			pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;
			pinctrl-2 = <&ts_release>;
			synaptics,irq-gpio = <&msm_gpio 13 0x2008>;
			synaptics,reset-gpio = <&msm_gpio 12 0x0>;
			synaptics,disable-gpios;
			synaptics,detect-device;
			synaptics,device1 {
				synaptics,package-id = <3408>;
				synaptics,display-coords = <0 0 719 1279>;
				synaptics,panel-coords = <0 0 719 1405>;
				synaptics,key-codes = <158 139 172 217>;
			};
		};

		atmel_mxt_ts@4a {
			compatible = "atmel,mxt-ts";
			reg = <0x4a>;
			interrupt-parent = <&msm_gpio>;
			interrupts = <13 0x2>;
			vdd_ana-supply = <&pm8909_l17>;
			vcc_i2c-supply = <&pm8909_l6>;
			/* pins used by touchscreen */
			pinctrl-names = "pmx_ts_active","pmx_ts_suspend","pmx_ts_release";
			pinctrl-0 = <&ts_int_active &ts_reset_active>;
			pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;
			pinctrl-2 = <&ts_release>;
			atmel,reset-gpio = <&msm_gpio 12 0x00>;
			atmel,irq-gpio = <&msm_gpio 13 0x00>;
			atmel,i2c-pull-up;
			atmel,no-force-update;
			atmel,no-lpm-support;
			atmel,create-vkeys;
			atmel,cfg_1 {
				atmel,family-id = <0x81>;
				atmel,variant-id = <0x01>;
				atmel,version = <0x20>;
				atmel,build = <0xab>;
				atmel,bootldr-id = <0x06>;
				atmel,check-panel-coordinates;
				atmel,panel-coords = <0 0 566 1067>;
				/* qHD resolution */
				atmel,display-coords = <0 0 540 960>;
				atmel,vkey-codes = <158 139 172 217>;
				atmel,config = [
					/* Object 6, Instance = 0 */
					00 00 00 00 00 00
					/* Object 38, Instance = 0 */
					0F 04 02 1B 0B 0E 00 00
					/* Object 7, Instance = 0 */
					20 10 32
					/* Object 8, Instance = 0 */
					1E 00 05 0A 00 00 0A 0A 00 00
					/* Object 9, Instance = 0 */
					83 00 00 13 0B 00 10 32 01 03
					0C 07 02 00 04 05 02 0A 2B 04
					36 02 E7 1D 26 12 8F 28 CF 50
					11 05 32 32 00
					/* Object 18, Instance = 0 */
					00 00
					/* Object 19, Instance = 0 */
					00 00 00 00 00 00
					/* Object 25, Instance = 0 */
					00 00 00 00 00 00
					/* Object 42, Instance = 0 */
					03 3C 14 14 96 00 00 00
					/* Object 46, Instance = 0 */
					00 03 1C 1C 00 00 01 00 00
					/* Object 47, Instance = 0 */
					00 00 00 00 00 00 00 00 00 00
					/* Object 48, Instance = 0 */
					01 03 52 00 00 00 00 00 00 00
					10 1E 00 06 06 00 00 7C 04 64
					00 00 00 05 00 2A 00 01 00 28
					34 14 00 00 00 32 01 05 02 01
					04 05 03 E7 1D 26 12 8F 28 CF
					50 0A 05 02
					/* Object 55, Instance = 0 */
					00 00 00 00
					];
			};
			atmel,cfg_2 {
				atmel,family-id = <0x81>;
				atmel,variant-id = <0x15>;
				atmel,version = <0x11>;
				atmel,build = <0xaa>;
				atmel,bootldr-id = <0x06>;
				atmel,check-panel-coordinates;
				atmel,panel-coords = <0 0 508 880>;
				/* wvga resolution */
				atmel,display-coords = <0 0 480 800>;
				atmel,vkey-codes = <158 172 139>;
				atmel,config = [
					/* Object 6, Instance = 0 */
					00 00 00 00 00 00
					/* Object 38, Instance = 0 */
					00 00 01 1B 0B 0E 00 00
					/* Object 7, Instance = 0 */
					20 08 32
					/* Object 8, Instance = 0 */
					19 00 14 14 00 00 FF 00 00 00
					/* Object 9, Instance = 0 */
					83 00 00 13 0B 00 20 32 01 03
					00 32 05 30 0A 05 0A 00 70 03
					FC 01 04 2F F8 DC 00 00 40 00
					00 0A 00 00 02
					/* Object 18, Instance = 0 */
					00 00
					/* Object 19, Instance = 0 */
					00 00 00 00 00 00
					/* Object 25, Instance = 0 */
					03 00 18 79 A8 61
					/* Object 58, Instance = 0 */
					00 00 00 00 00 00 00 00 00 00
					00
					/* Object 42, Instance = 0 */
					00 00 00 00 00 00 00 00
					/* Object 46, Instance = 0 */
					04 03 08 10 00 00 00 00 00
					/* Object 47, Instance = 0 */
					00 00 00 00 00 00 00 00 00 00
					/* Object 48, Instance = 0 */
					00 00 00 00 00 00 00 00 00 00
					00 00 00 00 00 00 00 00 00 00
					00 00 00 00 00 00 00 00 00 00
					00 00 00 00 00 00 00 00 00 00
					00 00 00 00 00 00 00 00 00 00
					00 00 00 00
					/* Object 55, Instance = 0 */
					00 00 00 00
					];
			};
		};
	};

	i2c@78b6000 { /* BLSP1 QUP2 */
		nq@28 {
			compatible = "qcom,nq-nci";
			reg = <0x28>;
			qcom,nq-irq = <&msm_gpio 21 0x00>;
			qcom,nq-ven = <&msm_gpio 20 0x00>;
			qcom,nq-firm = <&msm_gpio 45 0x00>;
			qcom,clk-src = "BBCLK2";
			interrupt-parent = <&msm_gpio>;
			interrupts = <21 0>;
			interrupt-names = "nfc_irq";
			pinctrl-names = "nfc_active","nfc_suspend";
			pinctrl-0 = <&nfc_int_active &nfc_disable_active>;
			pinctrl-1 = <&nfc_int_suspend &nfc_disable_suspend>;
			clocks = <&clock_rpm clk_bb_clk2_pin>;
			clock-names = "ref_clk";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		input-name = "gpio-keys";
		pinctrl-names = "tlmm_gpio_key_active","tlmm_gpio_key_suspend";
		pinctrl-0 = <&gpio_key_active>;
		pinctrl-1 = <&gpio_key_suspend>;

		camera_focus {
			label = "camera_focus";
			gpios = <&msm_gpio 91 0x1>;
			linux,input-type = <1>;
			linux,code = <0x210>;
			gpio-key,wakeup;
			debounce-interval = <15>;
		};

		camera_snapshot {
			label = "camera_snapshot";
			gpios = <&msm_gpio 92 0x1>;
			linux,input-type = <1>;
			linux,code = <0x2fe>;
			gpio-key,wakeup;
			debounce-interval = <15>;
		};

		vol_up {
			label = "volume_up";
			gpios = <&msm_gpio 90 0x1>;
			linux,input-type = <1>;
			linux,code = <115>;
			gpio-key,wakeup;
			debounce-interval = <15>;
		};
	};

};

&blsp1_uart1 {
	status = "ok";
	pinctrl-names = "default";
	pinctrl-0 = <&uart_console_sleep>;
};

&mdss_mdp {
	qcom,mdss-pref-prim-intf = "dsi";
};

&dsi_auo_cx_qvga_cmd {
	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
	qcom,mdss-dsi-bl-pmic-pwm-frequency = <100>;
	qcom,mdss-dsi-bl-pmic-bank-select = <0>;
	qcom,mdss-dsi-pwm-gpio = <&pm8909_mpps 2 0>;
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
};

&dsi_auo_qvga_cmd {
	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
	qcom,mdss-dsi-bl-pmic-pwm-frequency = <100>;
	qcom,mdss-dsi-bl-pmic-bank-select = <0>;
	qcom,mdss-dsi-pwm-gpio = <&pm8909_mpps 2 0>;
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
};

&dsi_hx8394d_480_vid {
	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_pwm";
	qcom,mdss-dsi-bl-pmic-pwm-frequency = <100>;
	qcom,mdss-dsi-bl-pmic-bank-select = <0>;
	qcom,mdss-dsi-pwm-gpio = <&pm8909_mpps 2 0>;
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
};

&dsi_hx8394d_720_vid {
	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_pwm";
	qcom,mdss-dsi-bl-pmic-pwm-frequency = <100>;
	qcom,mdss-dsi-bl-pmic-bank-select = <0>;
	qcom,mdss-dsi-pwm-gpio = <&pm8909_mpps 2 0>;
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
};


&dsi_sharp_qhd_vid {
	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_pwm";
	qcom,mdss-dsi-bl-pmic-pwm-frequency = <100>;
	qcom,mdss-dsi-bl-pmic-bank-select = <0>;
	qcom,mdss-dsi-pwm-gpio = <&pm8909_mpps 2 0>;
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
};

&dsi_truly_wvga_cmd {
	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_pwm";
	qcom,mdss-dsi-bl-pmic-pwm-frequency = <100>;
	qcom,mdss-dsi-bl-pmic-bank-select = <0>;
	qcom,mdss-dsi-pwm-gpio = <&pm8909_mpps 2 0>;
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
};

&dsi_hx8394d_qhd_vid {
	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_pwm";
	qcom,mdss-dsi-bl-pmic-pwm-frequency = <100>;
	qcom,mdss-dsi-bl-pmic-bank-select = <0>;
	qcom,mdss-dsi-pwm-gpio = <&pm8909_mpps 2 0>;
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
};

&msm_gpio {
	pmx_mdss {
		mdss_dsi_active: mdss_dsi_active {
			mux {
				pins = "gpio25", "gpio37";
			};
			config {
				pins = "gpio25", "gpio37";
			};
		};
		mdss_dsi_suspend: mdss_dsi_suspend {
			mux {
				pins = "gpio25", "gpio37";
			};
			config {
				pins = "gpio25", "gpio37";
			};
		};
	};
	pmx_mdss_te {
		mdss_te_active: mdss_te_active {
			mux {
				pins = "gpio24";
			};
			config {
				pins = "gpio24";
			};
		};
		mdss_te_suspend: mdss_te_suspend {
			mux {
				pins = "gpio24";
			};
			config {
				pins = "gpio24";
			};
		};
	};
};

&mdss_dsi0 {
	qcom,dsi-pref-prim-pan = <&dsi_auo_cx_qvga_cmd>;
	pinctrl-names = "mdss_default", "mdss_sleep";
	pinctrl-0 = <&mdss_dsi_active &mdss_te_active>;
	pinctrl-1 = <&mdss_dsi_suspend &mdss_te_suspend>;

	qcom,platform-reset-gpio = <&msm_gpio 25 0>;
	qcom,platform-bklight-en-gpio = <&msm_gpio 37 0>;
};

&usb_otg {
	qcom,hsusb-otg-phy-init-seq =
		<0x33 0x80 0x68 0x81 0x24 0x82 0x13 0x83 0xffffffff>;
};

&qcom_rng {
	status = "okay";
};

&qcom_crypto {
	status = "okay";
};

&qcom_cedev {
	status = "okay";
};

&qcom_seecom {
	status = "okay";
};

&qcom_tzlog {
	status = "okay";
};

&sdhc_1 {
	vdd-supply = <&pm8909_l8>;
	qcom,vdd-voltage-level = <2900000 2900000>;
	qcom,vdd-current-level = <200 400000>;

	vdd-io-supply = <&pm8909_l5>;
	qcom,vdd-io-always-on;
	qcom,vdd-io-lpm-sup;
	qcom,vdd-io-voltage-level = <1800000 1800000>;
	qcom,vdd-io-current-level = <200 60000>;

	pinctrl-names = "active", "sleep";
	pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
	pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;

	qcom,bus-speed-mode = "HS200_1p8v", "DDR_1p8v";
	qcom,nonremovable;

	status = "ok";
};

&sdhc_2 {
	 #address-cells = <0>;
	interrupt-parent = <&sdhc_2>;
	interrupts = <0 1 2>;
	#interrupt-cells = <1>;
	interrupt-map-mask = <0xffffffff>;
	interrupt-map = <0 &intc 0 125 0
			1 &intc 0 221 0
			2 &msm_gpio 38 0>;
	interrupt-names = "hc_irq", "pwr_irq", "status_irq";
	cd-gpios = <&msm_gpio 38 0x1>;

	vdd-supply = <&pm8909_l11>;
	qcom,vdd-voltage-level = <1800000 2950000>;
	qcom,vdd-current-level = <15000 400000>;

	vdd-io-supply = <&pm8909_l12>;
	qcom,vdd-io-voltage-level = <1800000 2950000>;
	qcom,vdd-io-current-level = <200 50000>;

	pinctrl-names = "active", "sleep";
	pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
	pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;


	status = "ok";
};

/* CoreSight */
&tpiu {
	pinctrl-names = "seta-pctrl", "setb-pctrl", "sdcard", "trace",
			"swduart", "swdtrc", "jtag", "spmi";
	/* Mictor */
	pinctrl-0 = <&seta_1 &seta_2 &seta_3 &seta_4 &seta_5 &seta_6 &seta_7
		     &seta_8 &seta_9 &seta_10 &seta_11 &seta_12 &seta_13
		     &seta_14 &seta_15 &seta_16 &seta_17 &seta_18>;
	pinctrl-1 = <&setb_1 &setb_2 &setb_3 &setb_4 &setb_5 &setb_6 &setb_7
		     &setb_8 &setb_9 &setb_10 &setb_11 &setb_12 &setb_13
		     &setb_14 &setb_15 &setb_16 &setb_17 &setb_18>;
	/* NIDnT */
	pinctrl-2 = <&qdsd_clk_sdcard &qdsd_cmd_sdcard
		    &qdsd_data0_sdcard &qdsd_data1_sdcard
		    &qdsd_data2_sdcard &qdsd_data3_sdcard>;
	pinctrl-3 = <&qdsd_clk_trace &qdsd_cmd_trace
		    &qdsd_data0_trace &qdsd_data1_trace
		    &qdsd_data2_trace &qdsd_data3_trace>;
	pinctrl-4 = <&qdsd_cmd_swduart &qdsd_data0_swduart
		    &qdsd_data1_swduart &qdsd_data2_swduart
		    &qdsd_data3_swduart>;
	pinctrl-5 = <&qdsd_clk_swdtrc &qdsd_cmd_swdtrc
		    &qdsd_data0_swdtrc &qdsd_data1_swdtrc
		    &qdsd_data2_swdtrc &qdsd_data3_swdtrc>;
	pinctrl-6 = <&qdsd_cmd_jtag &qdsd_data0_jtag
		    &qdsd_data1_jtag &qdsd_data2_jtag
		    &qdsd_data3_jtag>;
	pinctrl-7 = <&qdsd_clk_spmi &qdsd_cmd_spmi
		    &qdsd_data0_spmi &qdsd_data3_spmi>;
};
