#include "holi-audio-overlay.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/linux-event-codes.h>
#include "holi-pmic-overlay.dtsi"
#include "holi-thermal-overlay.dtsi"
#include <dt-bindings/iio/qti_power_supply_iio.h>

&sdhc_1 {
	status = "ok";

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc1_on>;
	pinctrl-1 = <&sdc1_off>;

	vdd-supply = <&L7E>;
	qcom,vdd-voltage-level = <2960000 2960000>;
	qcom,vdd-current-level = <0 570000>;

	vdd-io-supply = <&L12A>;
	qcom,vdd-io-always-on;
	qcom,vdd-io-lpm-sup;
	qcom,vdd-io-voltage-level = <1800000 1800000>;
	qcom,vdd-io-current-level = <0 325000>;
};

&sdhc_2 {
	status = "ok";

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc2_on>;
	pinctrl-1 = <&sdc2_off>;

	vdd-supply = <&L9E>;
	qcom,vdd-voltage-level = <2960000 2960000>;
	qcom,vdd-current-level = <0 800000>;

	vdd-io-supply = <&L6E>;
	qcom,vdd-io-voltage-level = <1800000 2960000>;
	qcom,vdd-io-current-level = <0 22000>;

	cd-gpios = <&tlmm 94 GPIO_ACTIVE_LOW>;
};

&ufsphy_mem {
		compatible = "qcom,ufs-phy-qmp-v3";

		vdda-phy-supply = <&L18A>;
		vdda-pll-supply = <&L22A>;
		vdda-phy-max-microamp = <62900>;
		vdda-pll-max-microamp = <18300>;

		status = "ok";
};

&ufshc_mem {
		vdd-hba-supply = <&gcc_ufs_phy_gdsc>;
		vdd-hba-fixed-regulator;

		vcc-supply = <&L7E>;
		vcc-voltage-level = <2950000 2960000>;
		vcc-max-microamp = <800000>;

		vccq2-supply = <&L12A>;
		vccq2-max-microamp = <800000>;
		vccq2-voltage-level = <1800000 1800000>;

		qcom,vddp-ref-clk-supply = <&L22A>;
		qcom,vddp-ref-clk-max-microamp = <100>;

		status = "ok";
};

&qupv3_se0_i2c {
	status = "ok";
	#address-cells = <1>;
	#size-cells = <0>;
	nq@28 {
		compatible = "qcom,sn-nci";
		reg = <0x28>;
		qcom,sn-irq = <&tlmm 9 0x00>;
		qcom,sn-ven = <&tlmm 6 0x00>;
		qcom,sn-firm = <&tlmm 8 0x00>;
		qcom,sn-clkreq = <&tlmm 7 0x00>;
		qcom,sn-vdd-1p8-supply = <&L11A>;
		qcom,sn-vdd-1p8-voltage = <1800000 1800000>;
		qcom,sn-vdd-1p8-current = <157000>;
		interrupt-parent = <&tlmm>;
		interrupts = <9 0>;
		interrupt-names = "nfc_irq";
		pinctrl-names = "nfc_active", "nfc_suspend";
		pinctrl-0 = <&nfc_int_active &nfc_enable_active>;
		pinctrl-1 = <&nfc_int_suspend &nfc_enable_suspend>;
	};
};

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

	status = "ok";
	qcom,i2c-touch-active = "focaltech,fts_ts";

	focaltech@38 {
		compatible = "focaltech,fts_ts";
		reg = <0x38>;
		interrupt-parent = <&tlmm>;
		interrupts = <22 0x2008>;
		focaltech,reset-gpio = <&tlmm 21 0x00>;
		focaltech,irq-gpio = <&tlmm 22 0x2008>;
		focaltech,max-touch-number = <5>;
		focaltech,display-coords = <0 0 1080 2340>;

		vdd-supply = <&L6A>;

		pinctrl-names = "pmx_ts_active", "pmx_ts_suspend",
				"pmx_ts_release";
		pinctrl-0 = <&ts_active>;
		pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;
		pinctrl-2 = <&pmx_ts_release>;

		panel = <&dsi_r66451_amoled_cmd &dsi_r66451_amoled_video>;
	};
};

&wsa881x_analog_reset_gpio {
	compatible = "qcom,msm-cdc-pinctrl";
	pinctrl-names = "aud_active", "aud_sleep";
	pinctrl-0 = <&spkr_1_sd_n_active>;
	pinctrl-1 = <&spkr_1_sd_n_sleep>;
};

&wsa881x_i2c_e {
	compatible = "qcom,wsa881x-i2c-codec";
	reg = <0x0e>;
	clock-names = "wsa_mclk";
	clocks = <&wsa881x_analog_clk 0>;
	qcom,wsa-analog-clk-gpio = <&wsa881x_analog_clk_gpio>;
	qcom,wsa-analog-reset-gpio = <&wsa881x_analog_reset_gpio>;
};

&wsa881x_i2c_e {
	status = "ok";
};

&holi_snd {
	qcom,model = "holi-qrd-snd-card";
	qcom,sku-model = "holi-qrdsku1-snd-card";
	qcom,msm-mi2s-master = <1>, <1>, <1>, <1>;
	qcom,wcn-btfm = <1>;
	qcom,audio-routing =
		"AMIC1", "Analog Mic1",
		"Analog Mic1", "MIC BIAS1",
		"AMIC2", "Analog Mic2",
		"Analog Mic2", "MIC BIAS2",
		"AMIC3", "Analog Mic3",
		"Analog Mic3", "MIC BIAS3",
		"AMIC4", "Analog Mic4",
		"Analog Mic4", "MIC BIAS3",
		"TX DMIC0", "Digital Mic0",
		"TX DMIC0", "MIC BIAS1",
		"TX DMIC1", "Digital Mic1",
		"TX DMIC1", "MIC BIAS1",
		"TX DMIC2", "Digital Mic2",
		"TX DMIC2", "MIC BIAS3",
		"TX DMIC3", "Digital Mic3",
		"TX DMIC3", "MIC BIAS3",
		"IN1_HPHL", "HPHL_OUT",
		"IN2_HPHR", "HPHR_OUT",
		"IN3_AUX", "AUX_OUT",
		"RX_TX DEC0_INP", "TX DEC0 MUX",
		"RX_TX DEC1_INP", "TX DEC1 MUX",
		"RX_TX DEC2_INP", "TX DEC2 MUX",
		"RX_TX DEC3_INP", "TX DEC3 MUX",
		"SpkrMono WSA_IN", "AUX",
		"TX SWR_INPUT", "WCD_TX_OUTPUT",
		"VA SWR_INPUT", "VA_SWR_CLK",
		"VA SWR_INPUT", "WCD_TX_OUTPUT",
		"VA_AIF1 CAP", "VA_SWR_CLK",
		"VA_AIF2 CAP", "VA_SWR_CLK",
		"VA_AIF3 CAP", "VA_SWR_CLK",
		"VA DMIC0", "Digital Mic0",
		"VA DMIC1", "Digital Mic1",
		"VA DMIC2", "Digital Mic2",
		"VA DMIC3", "Digital Mic3",
		"VA DMIC4", "Digital Mic4",
		"VA DMIC5", "Digital Mic5",
		"VA DMIC0", "VA MIC BIAS1",
		"VA DMIC1", "VA MIC BIAS1",
		"VA DMIC2", "VA MIC BIAS3",
		"VA DMIC3", "VA MIC BIAS3";
	qcom,msm-mbhc-hphl-swh = <1>;
	qcom,msm-mbhc-gnd-swh = <1>;
	qcom,cdc-dmic01-gpios = <&cdc_dmic01_gpios>;
	qcom,cdc-dmic23-gpios = <&cdc_dmic23_gpios>;
	asoc-codec  = <&stub_codec>, <&bolero>,
		      <&wcd937x_codec>, <&wsa881x_i2c_e>,
		      <&wsa881x_i2c_f>;
	asoc-codec-names = "msm-stub-codec.1", "bolero_codec",
			   "wcd937x_codec", "wsa-codec0",
			   "wsa-codec1";
	qcom,msm_audio_ssr_devs = <&audio_apr>, <&q6core>, <&lpi_tlmm>,
				  <&bolero>;
};

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

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

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

	qrd_batterydata: qcom,battery-data {
		qcom,batt-id-range-pct = <15>;
		#include "qg-batterydata-atl436186020H_3780mAh.dtsi"
		#include "qg-batterydata-atl466271_3300mAh.dtsi"
	};
};

&pm6150a_amoled {
	status = "ok";
};

&pm7250b_charger {
	status = "ok";
	#io-channel-cells = <1>;
	io-channels = <&pm7250b_vadc ADC5_USB_IN_V_16>,
		      <&pm7250b_vadc ADC5_USB_IN_I>,
		      <&pm7250b_vadc ADC5_CHG_TEMP>,
		      <&pm7250b_vadc ADC5_DIE_TEMP>,
		      <&pm7250b_vadc ADC5_AMUX_THM3_100K_PU>,
		      <&pm7250b_vadc ADC5_SBUx>,
		      <&pm7250b_vadc ADC5_VPH_PWR>,
		      <&pm7250b_vadc ADC5_AMUX_THM1_100K_PU>,
		      <&pm7250b_qg PSY_IIO_RESISTANCE_ID>,
		      <&pm7250b_qg PSY_IIO_VOLTAGE_NOW>,
		      <&pm7250b_qg PSY_IIO_TEMP>,
		      <&pm7250b_qg PSY_IIO_CAPACITY>,
		      <&pm7250b_qg PSY_IIO_VOLTAGE_OCV>,
		      <&pm7250b_qg PSY_IIO_VOLTAGE_AVG>,
		      <&pm7250b_qg PSY_IIO_DEBUG_BATTERY>,
		      <&pm7250b_qg PSY_IIO_REAL_CAPACITY>,
		      <&pm7250b_qg PSY_IIO_CC_SOC>,
		      <&pm7250b_qg PSY_IIO_CURRENT_NOW>,
		      <&pm7250b_qg PSY_IIO_VOLTAGE_MAX>,
		      <&pm7250b_qg PSY_IIO_CHARGE_FULL>,
		      <&pm7250b_qg PSY_IIO_CHARGE_COUNTER>,
		      <&pm7250b_qg PSY_IIO_CYCLE_COUNT>,
		      <&pm7250b_qg PSY_IIO_CHARGE_FULL_DESIGN>,
		      <&pm7250b_qg PSY_IIO_TIME_TO_FULL_NOW>,
		      <&smb1396_div2_cp_master PSY_IIO_PARALLEL_MODE>,
		      <&smb1396_div2_cp_master PSY_IIO_PARALLEL_OUTPUT_MODE>,
		      <&smb1396_div2_cp_master PSY_IIO_MIN_ICL>,
		      <&smb1396_div2_cp_master PSY_IIO_CP_SWITCHER_EN>,
		      <&smb1396_div2_cp_master PSY_IIO_CP_ENABLE>,
		      <&smb1396_div2_cp_master PSY_IIO_CP_ILIM>,
		      <&smb1396_div2_cp_master PSY_IIO_CP_DIE_TEMP>,
		      <&smb1396_div2_cp_slave PSY_IIO_CURRENT_CAPABILITY>;
	io-channel-names = "usb_in_voltage",
			   "usb_in_current",
			   "chg_temp",
			   "die_temp",
			   "conn_temp",
			   "sbux_res",
			   "vph_voltage",
			   "skin_temp",
			   "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",
			   "parallel_mode",
			   "parallel_output_mode",
			   "min_icl",
			   "cp_switcher_en",
			   "cp_enable",
			   "cp_ilim",
			   "cp_die_temp",
			   "current_capability";
	qcom,battery-data = <&qrd_batterydata>;
	qcom,sec-charger-config = <1>;
	qcom,auto-recharge-soc = <98>;
	qcom,step-charging-enable;
	qcom,sw-jeita-enable;
	qcom,charger-temp-max = <800>;
	qcom,smb-temp-max = <800>;
	qcom,suspend-input-on-debug-batt;
	qcom,fcc-stepping-enable;
	qcom,fcc-step-delay-ms = <100>;
	qcom,fcc-step-size-ua = <100000>;
	qcom,smb-internal-pull-kohm = <0>;
	qcom,en-skin-therm-mitigation;
	qcom,thermal-mitigation = <10000000 9500000 9000000 8500000 8000000
				7500000 7000000 6500000 6000000 5500000 5000000 4500000
				4000000 3500000 3000000 2500000 2000000 1500000 1000000
				500000>;
};

&pm7250b_qg {
	status = "ok";
	#io-channel-cells = <1>;
	io-channels = <&pm7250b_vadc ADC5_BAT_THERM_100K_PU>,
		      <&pm7250b_vadc ADC5_BAT_ID_100K_PU>,
		      <&pm7250b_charger PSY_IIO_INPUT_CURRENT_LIMITED>,
		      <&pm7250b_charger PSY_IIO_RECHARGE_SOC>,
		      <&pm7250b_charger PSY_IIO_FORCE_RECHARGE>,
		      <&pm7250b_charger PSY_IIO_CHARGE_DONE>,
		      <&smb1396_div2_cp_master PSY_IIO_CP_ENABLE>;
	io-channel-names = "batt-therm",
			   "batt-id",
			   "input_current_limited",
			   "recharge_soc",
			   "force_recharge",
			   "charge_done",
			   "cp_charging_enabled";
	qcom,qg-iterm-ma = <150>;
	qcom,hold-soc-while-full;
	qcom,linearize-soc;
	qcom,cl-feedback-on;
	qcom,tcss-enable;
	qcom,fvss-enable;
	qcom,fvss-vbatt-mv = <3300>;
	qcom,bass-enable;
	qcom,use-cp-iin-sns;
};

&pm7250b_charger {
	dpdm-supply = <&qusb_phy0>;

	smb5_vbus: qcom,smb5-vbus {
		regulator-name = "smb5-vbus";
	};

	smb5_vconn: qcom,smb5-vconn {
		regulator-name = "smb5-vconn";
	};
};

&pm7250b_pdphy {
	vdd-pdphy-supply = <&L3A>;
	vbus-supply = <&smb5_vbus>;
	vconn-supply = <&smb5_vconn>;

	#io-channel-cells = <1>;
	io-channels = <&pm7250b_charger PSY_IIO_PD_ACTIVE>,
		      <&pm7250b_charger PSY_IIO_TYPEC_CC_ORIENTATION>,
		      <&pm7250b_charger PSY_IIO_CONNECTOR_TYPE>,
		      <&pm7250b_charger PSY_IIO_TYPEC_POWER_ROLE>,
		      <&pm7250b_charger PSY_IIO_PD_USB_SUSPEND_SUPPORTED>,
		      <&pm7250b_charger PSY_IIO_TYPEC_SRC_RP>,
		      <&pm7250b_charger PSY_IIO_PD_IN_HARD_RESET>,
		      <&pm7250b_charger PSY_IIO_PD_CURRENT_MAX>,
		      <&pm7250b_charger PSY_IIO_PR_SWAP>,
		      <&pm7250b_charger PSY_IIO_PD_VOLTAGE_MIN>,
		      <&pm7250b_charger PSY_IIO_PD_VOLTAGE_MAX>,
		      <&pm7250b_charger PSY_IIO_USB_REAL_TYPE>,
		      <&pm7250b_charger PSY_IIO_TYPEC_MODE>,
		      <&pm7250b_charger PSY_IIO_PE_START>;
	io-channel-names = "pd_active",
			   "typec_cc_orientation",
			   "connector_type",
			   "typec_power_role",
			   "pd_usb_suspend_supported",
			   "typec_src_rp",
			   "pd_in_hard_reset",
			   "pr_current_max",
			   "pr_swap",
			   "pd_voltage_min",
			   "pd_voltage_max",
			   "real_type",
			   "typec_mode",
			   "pe_start";
};

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

&pm7250b_vadc {
	smb1390_therm@e {
		qcom,scale-fn-type = <ADC_SCALE_HW_CALIB_PM5_SMB1398_TEMP>;
	};
};

&pm7250b_gpios {
	smb_stat {
		smb_stat_default: smb_stat_default {
			pins = "gpio6";
			function = "normal";
			input-enable;
			bias-pull-up;
			qcom,pull-up-strength = <PMIC_GPIO_PULL_UP_30>;
			power-source = <0>;
		};
	};
};

&qupv3_se10_i2c {
	qcom,clk-freq-out = <100000>;
	status = "ok";
	#include "smb1398.dtsi"
};

&smb1396 {
	interrupts = <0x2 0xc5 0x0 IRQ_TYPE_LEVEL_LOW>;
	interrupt-parent = <&spmi_bus>;
	interrupt-names = "smb1396";
	pinctrl-names = "default";
	qcom,enable-toggle-stat;
	pinctrl-0 = <&smb_stat_default>;
	status = "ok";
};

&smb1396_div2_cp_master {
	io-channels = <&smb1396_div2_cp_slave PSY_IIO_CURRENT_CAPABILITY>,
		      <&smb1396_div2_cp_slave PSY_IIO_CP_ENABLE>,
		      <&smb1396_div2_cp_slave PSY_IIO_CP_INPUT_CURRENT_MAX>,
		      <&pm7250b_vadc ADC5_AMUX_THM2>,
		      <&pm7250b_charger PSY_IIO_USB_REAL_TYPE>,
		      <&pm7250b_charger PSY_IIO_ADAPTER_CC_MODE>,
		      <&pm7250b_charger PSY_IIO_PD_CURRENT_MAX>,
		      <&pm7250b_charger PSY_IIO_USB_INPUT_CURRENT_SETTLED>,
		      <&pm7250b_charger PSY_IIO_SMB_EN_MODE>,
		      <&pm7250b_charger PSY_IIO_SMB_EN_REASON>;
	io-channel-names = "current_capability",
			   "cp_enable",
			   "cp_input_current_max",
			   "die_temp",
			   "real_type",
			   "adapter_cc_mode",
			   "pd_current_max",
			   "input_current_settled",
			   "smb_en_mode",
			   "smb_en_reason";
	qcom,parallel-input-mode = <1>; /* USBIN */
	qcom,parallel-output-mode = <2>; /* VBAT */
	status = "ok";
};

&smb1396_slave {
	status = "ok";
};

&smb1396_div2_cp_slave {
	status = "ok";
};
