/*
 * Copyright (c) 2018, 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 "msm8953-qrd.dtsi"
#include "msm8953-mdss-panels.dtsi"
#include "msm8953-camera-sensor-qrd.dtsi"

&qusb_phy {
	qcom,qusb-phy-init-seq = <0x78 0x80
				0xb3 0x84
				0x83 0x88
				0xc7 0x8c
				0x14 0x9c
				0x30 0x08
				0x79 0x0c
				0x21 0x10
				0x00 0x90
				0x9f 0x1c
				0x00 0x18>;
};

&i2c_3 {
	status = "disabled";
};

&int_codec {
	status = "okay";
	qcom,model = "msm8953-sku4-snd-card";
	qcom,msm-micbias1-ext-cap;
	qcom,msm-micbias2-ext-cap;
	qcom,msm-mbhc-hphl-swh = <1>;
	qcom,msm-mbhc-gnd-swh = <0>;
	qcom,msm-hs-micbias-type = "external";
};

&wsa881x_i2c_f {
	status = "okay";
};

&wsa881x_i2c_45 {
	status = "okay";
};

&tlmm {
	pmx_mdss {
		mdss_dsi_active: mdss_dsi_active {
			mux {
				pins = "gpio61";
			};
			config {
				pins = "gpio61";
			};
		};
		mdss_dsi_suspend: mdss_dsi_suspend {
			mux {
				pins = "gpio61";
			};
			config {
				pins = "gpio61";
			};
		};
	};
};

&dsi_panel_pwr_supply {
	qcom,panel-supply-entry@2 {
		reg = <2>;
		qcom,supply-name = "lab";
		qcom,supply-min-voltage = <4600000>;
		qcom,supply-max-voltage = <6000000>;
		qcom,supply-enable-load = <100000>;
		qcom,supply-disable-load = <100>;
	};

	qcom,panel-supply-entry@3 {
		reg = <3>;
		qcom,supply-name = "ibb";
		qcom,supply-min-voltage = <4600000>;
		qcom,supply-max-voltage = <6000000>;
		qcom,supply-enable-load = <100000>;
		qcom,supply-disable-load = <100>;
		qcom,supply-post-on-sleep = <10>;
	};
};

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

&mdss_dsi {
	hw-config = "single_dsi";
};

&mdss_dsi0 {
	lab-supply = <&lcdb_ldo_vreg>;
	ibb-supply = <&lcdb_ncp_vreg>;
	/delete-property/ vdd-supply;

	qcom,dsi-pref-prim-pan = <&dsi_hx8399c_truly_vid>;
	qcom,platform-bklight-en-gpio = <&pm8953_gpios 4 0>;
	pinctrl-names = "mdss_default", "mdss_sleep";
	pinctrl-0 = <&mdss_dsi_active &mdss_te_active>;
	pinctrl-1 = <&mdss_dsi_suspend &mdss_te_suspend>;
	qcom,platform-te-gpio = <&tlmm 24 0>;
	qcom,platform-reset-gpio = <&tlmm 61 0>;
};

&mdss_dsi1 {
	status = "disabled";
};

&dsi_hx8399c_truly_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 = <&pm8953_gpios 8 0>;
	qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
};

&soc {
	gpio_keys {
		compatible = "gpio-keys";
		label = "gpio-keys";
		pinctrl-names = "default", "sleep";
		pinctrl-0 = <&gpio_key_active>;
		pinctrl-1 = <&gpio_key_suspend>;

		vol_up {
			label = "volume_up";
			gpios = <&tlmm 85 GPIO_ACTIVE_LOW>;
			linux,input-type = <1>;
			linux,code = <115>;
			gpio-key,wakeup;
			debounce-interval = <15>;
			linux,can-disable;
		};
	};
};

&sdhc_2 {
	cd-gpios = <&tlmm 133 0x0>;
};

&pmi632_vadc {
	chan@4a {
		qcom,scale-function = <22>;
	};
};

&soc {
	gpio_keys {
		camera_focus {
			label = "camera_focus";
			gpios = <&tlmm 87 0x1>;
			linux,input-type = <1>;
			linux,code = <0x210>;
			debounce-interval = <15>;
		};

		camera_snapshot {
			label = "camera_snapshot";
			gpios = <&tlmm 86 0x1>;
			linux,input-type = <1>;
			linux,code = <0x2fe>;
			debounce-interval = <15>;
		};
	};
};

&i2c_2 {
#include "smb1355.dtsi"
};

&pmi632_gpios {
	smb_en {
		smb_en_default: smb_en_default {
			pins = "gpio2";
			function = "func1";
			output-enable;
		};
	};

	pmi632_sense {
		/* GPIO 7 and 8 are external-sense pins for PMI632 */
		pmi632_sense_default: pmi632_sense_default {
			pins = "gpio7", "gpio8";
			bias-high-impedance;	/* disable the GPIO */
			bias-disable;		/* no-pull */
		};
	};

	pmi632_ctm {
		/* Disable GPIO1 for h/w base mitigation */
		pmi632_ctm_default: pmi632_ctm_default {
			pins = "gpio1";
			bias-high-impedance;	/* disable the GPIO */
			bias-disable;		/* no-pull */
		};
	};
};

&tlmm {
	smb_int_default: smb_int_default {
		mux {
			pins = "gpio59";
			function = "gpio";
		};
		config {
			pins = "gpio59";
			drive-strength = <2>;
			bias-pull-up;
			input-enable;
		};
	};
};

&smb1355_0 {
	pinctrl-names = "default";
	pinctrl-0 = <&smb_int_default
		&smb_en_default &pmi632_sense_default &pmi632_ctm_default>;
	interrupt-parent = <&tlmm>;
	interrupts = <59 IRQ_TYPE_LEVEL_LOW>;
	smb1355_charger_0: qcom,smb1355-charger@1000 {
		status ="ok";
		/delete-property/ io-channels;
		/delete-property/ io-channels-names;
		qcom,parallel-mode = <1>;
		qcom,disable-ctm;
		qcom,hw-die-temp-mitigation;
	};
};

&smb1355_1 {
	pinctrl-names = "default";
	pinctrl-0 = <&smb_int_default
		&smb_en_default &pmi632_sense_default &pmi632_ctm_default>;
	interrupt-parent = <&tlmm>;
	interrupts = <59 IRQ_TYPE_LEVEL_LOW>;
	smb1355_charger_1: qcom,smb1355-charger@1000 {
		status ="ok";
		/delete-property/ io-channels;
		/delete-property/ io-channels-names;
		qcom,parallel-mode = <1>;
		qcom,disable-ctm;
		qcom,hw-die-temp-mitigation;
	};
};

&pmi632_charger {
	qcom,thermal-mitigation = <4200000 3500000 3000000 2500000
				2000000 1500000 1000000 500000>;
};
