/* Copyright (c) 2015-2016, 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 "msm8996-pinctrl.dtsi"
#include "msm8996-camera-sensor-liquid.dtsi"
#include "msm8996-wsa881x.dtsi"

/ {
	bluetooth: bt_qca6174 {
		compatible = "qca,qca6174";
		qca,bt-reset-gpio = <&pm8994_gpios 19 0>; /* BT_EN */
		qca,bt-vdd-core-supply = <&pm8994_s3>;
		qca,bt-vdd-pa-supply = <&rome_vreg>;
		qca,bt-vdd-io-supply = <&pm8994_s4>;
		qca,bt-vdd-xtal-supply = <&pm8994_l30>;
		qca,bt-vdd-core-voltage-level = <1300000 1800000>;
		qca,bt-vdd-io-voltage-level = <1800000 1800000>;
		qca,bt-vdd-xtal-voltage-level = <1800000 1800000>;
	};
};

&ufs_ice {
	status = "ok";
};

&ufsphy1 {
	status = "ok";
};

&ufs1 {
	status = "ok";
};

&uartblsp2dm1 {
	status = "ok";
	pinctrl-names = "default";
	pinctrl-0 = <&uart_console_active>;
};

&sdhc_1 {
	vdd-supply = <&pm8994_l20>;
	qcom,vdd-voltage-level = <2950000 2950000>;
	qcom,vdd-current-level = <200 570000>;

	vdd-io-supply = <&pm8994_s4>;
	qcom,vdd-io-always-on;
	qcom,vdd-io-voltage-level = <1800000 1800000>;
	qcom,vdd-io-current-level = <110 325000>;

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

	qcom,clk-rates = <400000 20000000 25000000 50000000 96000000 192000000 384000000>;
	qcom,nonremovable;
	qcom,bus-speed-mode = "HS400_1p8v", "HS200_1p8v", "DDR_1p8v";

	status = "ok";
};

&sdhc_2 {
	vdd-supply = <&pm8994_l21>;
	qcom,vdd-voltage-level = <2950000 2950000>;
	qcom,vdd-current-level = <200 800000>;

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

	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>;

	qcom,clk-rates = <400000 20000000 25000000 50000000 100000000 200000000>;
	qcom,bus-speed-mode = "SDR12", "SDR25", "SDR50", "DDR50", "SDR104";

	cd-gpios = <&tlmm 95 0x1>;
	status = "ok";
};

&pm8994_vadc {
	chan@5 {
		label = "vcoin";
		reg = <5>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <1>;
		qcom,calibration-type = "absolute";
		qcom,scale-function = <0>;
		qcom,hw-settle-time = <0>;
		qcom,fast-avg-setup = <0>;
	};

	chan@7 {
		label = "vph_pwr";
		reg = <7>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <1>;
		qcom,calibration-type = "absolute";
		qcom,scale-function = <0>;
		qcom,hw-settle-time = <0>;
		qcom,fast-avg-setup = <0>;
	};

	chan@73 {
		label = "msm_therm";
		reg = <0x73>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <0>;
		qcom,calibration-type = "ratiometric";
		qcom,scale-function = <2>;
		qcom,hw-settle-time = <2>;
		qcom,fast-avg-setup = <0>;
	};

	chan@74 {
		label = "emmc_therm";
		reg = <0x74>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <0>;
		qcom,calibration-type = "ratiometric";
		qcom,scale-function = <2>;
		qcom,hw-settle-time = <2>;
		qcom,fast-avg-setup = <0>;
	};

	chan@75 {
		label = "pa_therm0";
		reg = <0x75>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <0>;
		qcom,calibration-type = "ratiometric";
		qcom,scale-function = <2>;
		qcom,hw-settle-time = <2>;
		qcom,fast-avg-setup = <0>;
	};

	chan@77 {
		label = "pa_therm1";
		reg = <0x77>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <0>;
		qcom,calibration-type = "ratiometric";
		qcom,scale-function = <2>;
		qcom,hw-settle-time = <2>;
		qcom,fast-avg-setup = <0>;
	};

	chan@78 {
		label = "quiet_therm";
		reg = <0x78>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <0>;
		qcom,calibration-type = "ratiometric";
		qcom,scale-function = <2>;
		qcom,hw-settle-time = <2>;
		qcom,fast-avg-setup = <0>;
	};
};

&pm8994_adc_tm {
	chan@73 {
		label = "msm_therm";
		reg = <0x73>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <0>;
		qcom,calibration-type = "ratiometric";
		qcom,scale-function = <2>;
		qcom,hw-settle-time = <2>;
		qcom,fast-avg-setup = <0>;
		qcom,btm-channel-number = <0x48>;
		qcom,thermal-node;
	};

	chan@74 {
		label = "emmc_therm";
		reg = <0x74>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <0>;
		qcom,calibration-type = "ratiometric";
		qcom,scale-function = <2>;
		qcom,hw-settle-time = <2>;
		qcom,fast-avg-setup = <0>;
		qcom,btm-channel-number = <0x68>;
		qcom,thermal-node;
	};

	chan@75 {
		label = "pa_therm0";
		reg = <0x75>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <0>;
		qcom,calibration-type = "ratiometric";
		qcom,scale-function = <2>;
		qcom,hw-settle-time = <2>;
		qcom,fast-avg-setup = <0>;
		qcom,btm-channel-number = <0x70>;
		qcom,thermal-node;
	};

	chan@77 {
		label = "pa_therm1";
		reg = <0x77>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <0>;
		qcom,calibration-type = "ratiometric";
		qcom,scale-function = <2>;
		qcom,hw-settle-time = <2>;
		qcom,fast-avg-setup = <0>;
		qcom,btm-channel-number = <0x78>;
		qcom,thermal-node;
	};

	chan@78 {
		label = "quiet_therm";
		reg = <0x78>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <0>;
		qcom,calibration-type = "ratiometric";
		qcom,scale-function = <2>;
		qcom,hw-settle-time = <2>;
		qcom,fast-avg-setup = <0>;
		qcom,btm-channel-number = <0x80>;
		qcom,thermal-node;
	};
};

&mdss_hdmi_tx {
	pinctrl-names = "hdmi_hpd_active", "hdmi_ddc_active", "hdmi_cec_active",
				"hdmi_active", "hdmi_sleep";
	pinctrl-0 = <&mdss_hdmi_hpd_active &mdss_hdmi_ddc_suspend
						&mdss_hdmi_cec_suspend>;
	pinctrl-1 = <&mdss_hdmi_hpd_active &mdss_hdmi_ddc_active
						&mdss_hdmi_cec_suspend>;
	pinctrl-2 = <&mdss_hdmi_hpd_active &mdss_hdmi_cec_active
						&mdss_hdmi_ddc_suspend>;
	pinctrl-3 = <&mdss_hdmi_hpd_active &mdss_hdmi_ddc_active
						&mdss_hdmi_cec_active>;
	pinctrl-4 = <&mdss_hdmi_hpd_suspend &mdss_hdmi_ddc_suspend
						&mdss_hdmi_cec_suspend>;
};

&pmi8994_vadc {
	chan@0 {
		label = "usbin";
		reg = <0>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <4>;
		qcom,calibration-type = "absolute";
		qcom,scale-function = <0>;
		qcom,hw-settle-time = <0>;
		qcom,fast-avg-setup = <0>;
	};

	chan@1 {
		label = "dcin";
		reg = <1>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <4>;
		qcom,calibration-type = "absolute";
		qcom,scale-function = <0>;
		qcom,hw-settle-time = <0>;
		qcom,fast-avg-setup = <0>;
	};

	chan@43 {
		label = "usb_dp";
		reg = <0x43>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <1>;
		qcom,calibration-type = "absolute";
		qcom,scale-function = <0>;
		qcom,hw-settle-time = <0>;
		qcom,fast-avg-setup = <0>;
	};

	chan@44 {
		label = "usb_dm";
		reg = <0x44>;
		qcom,decimation = <0>;
		qcom,pre-div-channel-scaling = <1>;
		qcom,calibration-type = "absolute";
		qcom,scale-function = <0>;
		qcom,hw-settle-time = <0>;
		qcom,fast-avg-setup = <0>;
	};
};

#include "msm8996-sde-display.dtsi"

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

&mdss_dsi0 {
	qcom,dsi-pref-prim-pan = <&dsi_dual_jdi_4k_nofbc_video>;
	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 = <&tlmm 8 0>;
	qcom,platform-bklight-en-gpio = <&pm8994_gpios 14 0>;
};

&mdss_dsi1 {
	qcom,dsi-pref-prim-pan = <&dsi_dual_jdi_4k_nofbc_video>;
};

&labibb {
	status = "ok";
	qpnp,qpnp-labibb-mode = "lcd";
};

&dsi_dual_jdi_4k_nofbc_video {
	pwms = <&pmi8994_pwm_4 0 0>;
	pwm-names = "backlight";
	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_pwm";
	qcom,mdss-dsi-bl-pwm-pmi;
	qcom,mdss-dsi-bl-pmic-pwm-frequency = <100>;
	qcom,mdss-dsi-bl-min-level = <1>;
	qcom,mdss-dsi-bl-max-level = <4095>;
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
};

&pmi8994_pwm_4 {
	qcom,channel-owner = "lcd_bl";
	qcom,dtest-line = <4>;
	qcom,dtest-output = <1>;
	status = "okay";
};

/{
	mtp_batterydata: qcom,battery-data {
		qcom,batt-id-range-pct = <15>;
		#include "batterydata-liquid-7650-sanyo.dtsi"
	};
};

&pmi8994_charger {
	qcom,dc-psy-type = "Wipower";
	qcom,dcin-vadc = <&pmi8994_vadc>;
	qcom,wipower-default-ilim-map = <4000000 20000000 550 700 300>;
	qcom,wipower-pt-ilim-map = <4000000 7140000 550 700 300>,
					<7140000 8140000 550 700 300>,
					<8140000 9140000 500 700 300>,
					<9140000 9950000 500 700 300>;
	qcom,wipower-div2-ilim-map = <4000000 4820000 550 700 300>,
					<4820000 5820000 550 700 300>,
					<5820000 6820000 550 650 650>,
					<6820000 7820000 550 700 600>,
					<7820000 8500000 550 700 550>;
};

&pmi8994_fg {
	qcom,battery-data = <&mtp_batterydata>;
	qcom,ext-sense-type;
};

&usb_otg_switch {
	status = "okay";
};

&usb3 {
	vbus_dwc3-supply = <&usb_otg_switch>;
};

&pm8994_mpps {
	mpp@a300 { /* MPP 4 */
		/* HDMI_5v_vreg regulator enable */
		qcom,mode = <1>;		/* Digital output */
		qcom,output-type = <0>;		/* CMOS logic */
		qcom,vin-sel = <2>;		/* S4 1.8V */
		qcom,src-sel = <0>;		/* Constant */
		qcom,master-en = <1>;		/* Enable GPIO */
		qcom,invert = <0>;
		status = "okay";
	};
};

&pmi8994_gpios {
	gpio@c400 { /* GPIO 5 - USB3 OTG SWITCH EN */
		qcom,mode = <1>;	/* Digital output */
		qcom,vin-sel = <2>;	/* 1.8 */
		qcom,src-sel = <0>;	/* GPIO */
		qcom,master-en = <1>;	/* Enable GPIO */
		qcom,invert = <0>;	/* Output low initially */
		status = "okay";
	};
};

&pmi8994_gpios {
	gpio@c100 {	/* GPIO 2  SPKR_SD_N */
		qcom,mode = <1>;	/* DIGITAL OUT */
		qcom,pull = <5>;	/* No Pull */
		qcom,vin-sel = <2>;	/* 1.8 */
		qcom,src-sel = <0>;	/* CONSTANT */
		qcom,master-en = <1>;	/* ENABLE GPIO */
		status = "okay";
	};

	gpio@c200 {	/* GPIO 3 SPKR_SD_N */
		qcom,mode = <1>;	/* DIGITAL OUT */
		qcom,pull = <5>;	/* No Pull */
		qcom,vin-sel = <2>;	/* 1.8 */
		qcom,src-sel = <0>;	/* CONSTANT */
		qcom,master-en = <1>;	/* ENABLE GPIO */
		status = "okay";
	};
};

&pmi8994_mpps {
	mpp@a000 { /* MPP 1 */
		qcom,mode = <1>;                /* Digital output */
		qcom,output-type = <0>;         /* CMOS logic */
		qcom,vin-sel = <0>;             /* S4 1.8V */
		qcom,src-sel = <7>;             /* DTEST4 */
		qcom,master-en = <1>;           /* Enable MPP */
		status = "okay";
	};

	mpp@a300 { /* MPP 4 */
		/* WLED FET */
		qcom,mode = <1>;        /* DIGITAL OUT */
		qcom,vin-sel = <0>;     /* VIN0 */
		qcom,master-en = <1>;
		status = "okay";
	};
};

&soc {
	drv2667_vreg: drv2667_vdd_vreg {
		compatible = "regulator-fixed";
		regulator-name = "vdd_drv2667";
	};

	gpio_keys {
		compatible = "gpio-keys";
		input-name = "gpio-keys";

		home {
			label = "home";
			gpios = <&pm8994_gpios 1 0x1>;
			linux,input-type = <1>;
			linux,code = <102>;
			gpio-key,wakeup;
			debounce-interval = <15>;
		};

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

	ts_xvdd_vreg: ts_xvdd_vreg {
		compatible = "regulator-fixed";
		regulator-name = "ts_xvdd_vreg";
		startup-delay-us = <4000>;
		enable-active-high;
		gpio = <&pm8994_gpios 3 0>;
		status = "ok";
	};

	sound-9335 {
		qcom,model = "msm8996-tasha-mtp-snd-card";
		qcom,hdmi-audio-rx;
		asoc-codec = <&stub_codec>, <&hdmi_audio>;
		asoc-codec-names = "msm-stub-codec.1", "msm-hdmi-audio-codec-rx";
		qcom,wsa-max-devs = <2>;
		qcom,wsa-devs = <&wsa881x_211>, <&wsa881x_212>,
				<&wsa881x_213>, <&wsa881x_214>;
		qcom,wsa-aux-dev-prefix = "SpkrLeft", "SpkrRight",
					  "SpkrLeft", "SpkrRight";
	};
};

&pm8994_gpios {
	gpio@c700 { /* GPIO 8 - WLAN_EN */
		qcom,mode = <1>;		/* Digital output*/
		qcom,pull = <4>;		/* Pulldown 10uA */
		qcom,vin-sel = <2>;		/* VIN2 */
		qcom,src-sel = <0>;		/* GPIO */
		qcom,invert = <0>;		/* Invert */
		qcom,master-en = <1>;		/* Enable GPIO */
		status = "okay";
	};

	gpio@c800 { /* GPIO 9 - Rome 3.3V control */
		qcom,mode = <1>;		/* Digital output */
		qcom,output-type = <0>;		/* MOS logic */
		qcom,invert = <1>;		/* Output high */
		qcom,vin-sel = <0>;		/* VPH_PWR */
		qcom,src-sel = <0>;		/* Constant */
		qcom,out-strength = <1>;	/* High drive strength */
		qcom,master-en = <1>;		/* Enable GPIO */
		status = "okay";
	};

	gpio@cd00 { /* GPIO 14 - lcd_bklt_reg_en */
		qcom,mode = <1>;	/* DIGITAL OUT */
		qcom,output-type = <0>;		/* CMOS logic */
		qcom,invert = <1>; 	/* output hight initially */
		qcom,vin-sel = <2>;	/* 1.8 */
		qcom,src-sel = <0>;	/* CONSTANT */
		qcom,out-strength = <1>;	/* Low drive strength */
		qcom,master-en = <1>;	/* ENABLE GPIO */
		status = "okay";
	};

	gpio@c000 { /* GPIO 1 */
		qcom,mode = <0>;
		qcom,pull = <0>;
		qcom,vin-sel = <2>;
		qcom,src-sel = <0>;
		status = "okay";
	};

	gpio@c100 { /* GPIO 2 */
		qcom,mode = <0>;
		qcom,pull = <0>;
		qcom,vin-sel = <2>;
		qcom,src-sel = <0>;
		status = "okay";
	};

	gpio@c200 { /* GPIO 3 - TS_XVDD_EN */
		qcom,mode = <1>;		/* Digital output*/
		qcom,output-type = <0>;         /* CMOS logic */
		qcom,vin-sel = <2>;		/* VIN2 */
		qcom,src-sel = <0>;		/* GPIO */
		qcom,invert = <0>;		/* Invert */
		qcom,master-en = <1>;		/* Enable GPIO */
		status = "okay";
	};


	gpio@ce00 { /* GPIO 15 */
		qcom,mode = <1>;
		qcom,output-type = <0>;
		qcom,pull = <5>;
		qcom,vin-sel = <2>;
		qcom,out-strength = <1>;
		qcom,src-sel = <2>;
		qcom,master-en = <1>;
		status = "okay";
	};

	gpio@d100 { /* GPIO 18 - Rome Sleep Clock */
		qcom,mode = <1>;		/* Digital output */
		qcom,output-type = <0>;		/* CMOS logic */
		qcom,invert = <0>;		/* Output low initially */
		qcom,vin-sel = <2>;		/* VIN 2 */
		qcom,src-sel = <3>;		/* Function 2 */
		qcom,out-strength = <2>;	/* Medium */
		qcom,master-en = <1>;		/* Enable GPIO */
		status = "okay";
	};

	gpio@d200 { /* GPIO 19 - Rome BT Reset */
		qcom,mode = <1>;		/* Digital output*/
		qcom,pull = <4>;		/* Pulldown 10uA */
		qcom,vin-sel = <2>;		/* VIN2 */
		qcom,src-sel = <0>;		/* GPIO */
		qcom,invert = <0>;		/* Invert */
		qcom,master-en = <1>;		/* Enable GPIO */
		status = "okay";
	};
};

&pmi8994_haptics {
	status = "okay";
};

&flash_led {
	qcom,follow-otst2-rb-disabled;
};

&blsp1_uart2 {
	status = "ok";
};

&i2c_7 {
	ti-drv2667@59 {
		compatible = "ti,drv2667";
		reg = <0x59>;
		vdd-supply = <&drv2667_vreg>;
		vdd-i2c-supply = <&pm8994_s4>;
		ti,label = "vibrator";
		ti,gain = <2>;
		ti,idle-timeout-ms = <20>;
		ti,max-runtime-ms = <15000>;
		ti,mode = <2>;
		ti,wav-seq = [
			/* wave form id */
			01
			/* header size, start and stop bytes */
			05 80 06 00 09
			/* repeat, amp, freq, duration, envelope */
			01 ff 19 02 00];
	};
};

&i2c_12 {
	atmel_maxtouch_ts@4a {
		compatible = "atmel,maxtouch-ts";
		reg = <0x4a>;
		interrupt-parent = <&tlmm>;
		interrupts = <125 0x2008>;
		vdd-supply = <&pm8994_l14>;
		avdd-supply = <&pm8994_l22>;
		xvdd-supply = <&ts_xvdd_vreg>;
		pinctrl-names = "pmx_ts_active","pmx_ts_suspend";
		pinctrl-0 = <&ts_active>;
		pinctrl-1 = <&ts_suspend>;
		atmel,panel-coords = <0 0 3839 2159>;
		atmel,display-coords = <0 0 3839 2159>;
		atmel,irq-gpio = <&tlmm 125 0x2008>;
		atmel,reset-gpio = <&tlmm 89 0x00>;
		atmel,i2cmode-gpio = <&tlmm 86 0x00>;
		atmel,ignore-crc;
		/* Underlying clocks used by secure touch */
		clock-names = "iface_clk", "core_clk";
		clocks = <&clock_gcc clk_gcc_blsp2_ahb_clk>,
			 <&clock_gcc clk_gcc_blsp2_qup6_i2c_apps_clk>;
		atmel,cfg-name = "maxtouch_8996_liquid_cfg.raw";
		atmel,cfg_1 {
			atmel,version = <0x10>;
			atmel,build = <0xaa>;
			atmel,fw-name = "maxtouch_8996_liquid_v1_1_AB.fw";
		};
		atmel,cfg_2 {
			atmel,version = <0x11>;
			atmel,build = <0xab>;
		};
	};
};

&wil6210 {
	status = "ok";
};
