/*
 * 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";
	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;
	};
};
