/*
 * Copyright (c) 2018-2019, 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-mtp.dtsi"

&eeprom0 {
	cam_vdig-supply = <&pm8953_l23>;
};

&camera0 {
	cam_vdig-supply = <&pm8953_l23>;
};

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

	//qcom,platform-bklight-en-gpio = <&pm8953_gpios 4 0>;
	lab-supply = <&lcdb_ldo_vreg>;
	ibb-supply = <&lcdb_ncp_vreg>;

};

&dsi_truly_1080_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>;
};

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

&i2c_2 {
#address-cells = <1>;
#size-cells = <0>;

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