#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/iio/qcom,spmi-vadc.h>
#include <dt-bindings/iio/qti_power_supply_iio.h>

&qupv3_se4_2uart {
		status = "ok";
};

&usb0 {
	extcon = <&pmi632_charger>, <&eud>;
};

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

	vdd-io-supply = <&pm6125_l11>;
	qcom,vdd-io-always-on;
	qcom,vdd-io-lpm-sup;
	qcom,vdd-io-voltage-level = <1800000 1800000>;
	qcom,vdd-io-current-level = <0 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>;

	status = "ok";
};

&qupv3_se1_i2c {
	status = "ok";
	#include "smb1355.dtsi"
};

&soc {
	mtp_batterydata: qcom,battery-data {
		qcom,batt-id-range-pct = <15>;
		#include "qg-batterydata-ascent-3450mah.dtsi"
		#include "qg-batterydata-mlp356477-2800mah.dtsi"
	};
};

&pm6125_vadc {
	rf_pa1_therm {
		reg = <ADC5_GPIO4_100K_PU>;
		label = "rf_pa1_therm";
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
	};
};

&pm6125_adc_tm {
	io-channels = <&pm6125_vadc ADC5_AMUX_THM1_100K_PU>,
			<&pm6125_vadc ADC5_AMUX_THM2_100K_PU>,
			<&pm6125_vadc ADC5_XO_THERM_100K_PU>,
			<&pm6125_vadc ADC5_GPIO4_100K_PU>;

	rf_pa1_therm {
		reg = <3>;
		io-channels = <&pm6125_vadc ADC5_GPIO4_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
	};
};

&thermal_zones {
	rf-pa1-therm-adc {
		polling-delay-passive = <0>;
		polling-delay = <0>;
		thermal-governor = "user_space";
		thermal-sensors = <&pm6125_adc_tm 3>;
		wake-capable-sensor;
		trips {
			active-config0 {
				temperature = <125000>;
				hysteresis = <1000>;
				type = "passive";
			};
		};
	};
};

&pmi632_qg {
	status = "ok";
	#io-channel-cells = <1>;
	io-channels = <&pmi632_vadc ADC5_BAT_THERM_100K_PU>,
			<&pmi632_vadc ADC5_BAT_ID_100K_PU>,
			<&pmi632_charger PSY_IIO_INPUT_CURRENT_LIMITED>,
			<&pmi632_charger PSY_IIO_RECHARGE_SOC>,
			<&pmi632_charger PSY_IIO_FORCE_RECHARGE>,
			<&pmi632_charger PSY_IIO_CHARGE_DONE>;
	io-channel-names = "batt-therm",
			   "batt-id",
			   "input_current_limited",
			   "recharge_soc",
			   "force_recharge",
			   "charge_done",
			   "cp_charging_enabled";
	qcom,battery-data = <&mtp_batterydata>;
	qcom,qg-iterm-ma = <100>;
	qcom,hold-soc-while-full;
	qcom,linearize-soc;
	qcom,qg-use-s7-ocv;
};

&pmi632_charger {
	status = "ok";
	#io-channel-cells = <1>;
	io-channels = <&pmi632_qg PSY_IIO_RESISTANCE_ID>,
			<&pmi632_qg PSY_IIO_VOLTAGE_NOW>,
			<&pmi632_qg PSY_IIO_TEMP>,
			<&pmi632_qg PSY_IIO_CAPACITY>,
			<&pmi632_qg PSY_IIO_VOLTAGE_OCV>,
			<&pmi632_qg PSY_IIO_VOLTAGE_AVG>,
			<&pmi632_qg PSY_IIO_DEBUG_BATTERY>,
			<&pmi632_qg PSY_IIO_REAL_CAPACITY>,
			<&pmi632_qg PSY_IIO_CC_SOC>,
			<&pmi632_qg PSY_IIO_CURRENT_NOW>,
			<&pmi632_qg PSY_IIO_VOLTAGE_MAX>,
			<&pmi632_qg PSY_IIO_CHARGE_FULL>,
			<&pmi632_qg PSY_IIO_CHARGE_COUNTER>,
			<&pmi632_qg PSY_IIO_CYCLE_COUNT>,
			<&pmi632_qg PSY_IIO_CHARGE_FULL_DESIGN>,
			<&pmi632_qg PSY_IIO_TIME_TO_FULL_NOW>;
	io-channel-names = "resistance_id",
			   "voltage_now",
			   "temp",
			   "capacity",
			   "voltage_ocv",
			   "voltage_avg",
			   "debug_battery",
			   "real_capacity",
			   "cc_soc",
			   "current_now",
			   "voltage_max",
			   "charge_full",
			   "charge_counter",
			   "cycle_count",
			   "charge_full_design",
			   "time_to_full_now";
	qcom,battery-data = <&mtp_batterydata>;
	qcom,suspend-input-on-debug-batt;
	qcom,sw-jeita-enable;
	qcom,step-charging-enable;
	/* SMB1355 only */
	qcom,sec-charger-config = <2>;
	qcom,hvdcp2-max-icl-ua = <2000000>;
	dpdm-supply = <&qusb_phy0>;
	qcom,charger-temp-max = <800>;
	qcom,smb-temp-max = <800>;
	qcom,auto-recharge-soc = <98>;
	qcom,flash-disable-soc = <10>;
	qcom,hw-die-temp-mitigation;
	qcom,hw-connector-mitigation;
	qcom,connector-internal-pull-kohm = <100>;
	qcom,float-option = <1>;
	qcom,thermal-mitigation = <3000000 2500000
			2000000 1500000 1000000 500000>;
};

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

&pm6125_gpios {
	key_vol_up {
		key_vol_up_default: key_vol_up_default {
			pins = "gpio5";
			function = "normal";
			input-enable;
			bias-pull-up;
			power-source = <0>;
		};
	};
};

&soc {
	gpio_keys {
		compatible = "gpio-keys";
		label = "gpio-keys";

		pinctrl-names = "default";
		pinctrl-0 = <&key_vol_up_default>;

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

&tlmm {
	smb_int_default: smb_int_default {
		mux {
			pins = "gpio130";
			function = "gpio";
		};

		config {
			pins = "gpio130";
			bias-pull-up;
			input-enable;
		};
	};
};

&smb1355 {
	pinctrl-names = "default";
	pinctrl-0 = <&smb_int_default>;
	interrupt-parent = <&tlmm>;
	interrupts = <130 IRQ_TYPE_LEVEL_LOW>;
	status = "ok";
};

&smb1355_charger {
	pinctrl-names = "default";
	pinctrl-0 = <&smb_en_default &pmi632_sense_default &pmi632_ctm_default>;
	qcom,parallel-mode = <1>;
	qcom,disable-ctm;
	qcom,hw-die-temp-mitigation;
	status = "ok";
};

&pm6125_pwm {
	status = "ok";
};

&sdhc_2 {
	vdd-supply = <&pm6125_l22>;
	qcom,vdd-voltage-level = <2950000 2950000>;
	qcom,vdd-current-level = <0 800000>;
	vdd-io-supply = <&pm6125_l5>;
	qcom,vdd-io-voltage-level = <1800000 2950000>;
	qcom,vdd-io-current-level = <0 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>;

	cd-gpios = <&tlmm 98 GPIO_ACTIVE_LOW>;

	status = "ok";
};

&qupv3_se1_i2c {
	status = "ok";
	#include "pm8008.dtsi"
};

&tlmm {
	pm8008_active: pm8008_active {
		mux {
			pins = "gpio49";
			function = "gpio";
		};

		config {
			pins = "gpio49";
			bias-pull-up;
			output-high;
			drive-strength = <2>;
		};
	};
};

&pm8008_chip {
	pinctrl-names = "default";
	pinctrl-0 = <&pm8008_active>;
};

&pm8008_regulators {
	vdd_l1_l2-supply = <&S6A>;
};

&pm8008_9 {
	pinctrl-names = "default";
	pinctrl-0 = <&pm8008_gpio1_active>;
};

&L1P {
	regulator-max-microvolt = <1200000>;
	qcom,min-dropout-voltage = <100000>;
};

&L2P {
	regulator-max-microvolt = <1104000>;
	qcom,min-dropout-voltage = <100000>;
};

&L3P {
	regulator-min-microvolt = <2800000>;
	regulator-max-microvolt = <2800000>;
};

&L4P {
	regulator-min-microvolt = <2800000>;
	regulator-max-microvolt = <2800000>;
};

&L5P {
	regulator-min-microvolt = <2800000>;
	regulator-max-microvolt = <2800000>;
};

&L6P {
	regulator-min-microvolt = <3000000>;
	regulator-max-microvolt = <3000000>;
};

&L7P {
	regulator-min-microvolt = <3000000>;
	regulator-max-microvolt = <3000000>;
};

&ufsphy_mem {
	compatible = "qcom,ufs-phy-qmp-v3-660";
	vdda-phy-supply = <&pm6125_l4>; /* 0.9v */
	vdda-pll-supply = <&pm6125_l10>; /* 1.8v */
	vdda-phy-max-microamp = <51400>;
	vdda-pll-max-microamp = <14200>;
	status = "ok";
};

&ufshc_mem {
	vdd-hba-supply = <&ufs_phy_gdsc>;
	vcc-supply = <&pm6125_l24>;
	vcc-voltage-level = <2950000 2960000>;
	vccq2-supply = <&pm6125_l11>;
	vcc-max-microamp = <600000>;
	vccq2-max-microamp = <600000>;

	qcom,vddp-ref-clk-supply = <&pm6125_l18>;
	qcom,vddp-ref-clk-max-microamp = <100>;
	qcom,vddp-ref-clk-min-uV = <1200000>;
	qcom,vddp-ref-clk-max-uV = <1232000>;
	status = "ok";
};
