#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>

#include "waipio-pmic-overlay.dtsi"
#include "waipio-thermal-overlay.dtsi"

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

	vdda-phy-supply = <&pm8350_l5>;
	vdda-pll-supply = <&pm8350_l6>;
	vdda-phy-max-microamp = <173000>;
	vdda-pll-max-microamp = <24900>;

	status = "ok";
};

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

	vcc-supply = <&pm8350_l7>;
	vcc-max-microamp = <1100000>;

	vccq-supply = <&pm8350_l9>;
	vccq-max-microamp = <1200000>;

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

	qcom,vccq-parent-supply = <&pm8350_s12>;
	qcom,vccq-parent-max-microamp = <210000>;

	status = "ok";
};

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

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

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

	cd-gpios = <&tlmm 92 GPIO_ACTIVE_LOW>;

	status = "ok";
};

&qupv3_se5_i2c {
	status = "ok";
};

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

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

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

&pm8350b_haptics {
	qcom,vmax-mv = <1300>;
	qcom,lra-period-us = <5880>;
	status = "ok";

	effect_0 {
		/* CLICK */
		qcom,wf-vmax-mv = <1800>;
		qcom,wf-pattern-period-us = <5880>;
	};

	effect_1 {
		/* DOUBLE_CLICK */
		qcom,wf-vmax-mv = <1800>;
		qcom,wf-pattern-period-us = <5880>;
	};

	effect_2 {
		/* TICK */
		qcom,wf-vmax-mv = <1800>;
		qcom,wf-pattern-period-us = <5880>;
	};

	effect_3 {
		/* THUD */
		qcom,wf-vmax-mv = <1800>;
		qcom,wf-pattern-period-us = <5880>;
	};

	effect_4 {
		/* POP */
		qcom,wf-vmax-mv = <1800>;
		qcom,wf-pattern-period-us = <5880>;
	};

	effect_5 {
		/* HEAVY CLICK */
		qcom,wf-vmax-mv = <1800>;
		qcom,wf-pattern-period-us = <5880>;
	};
};

&pm8350c_switch0 {
	qcom,led-mask = <9>; /* Channels 1 & 4 */
	qcom,symmetry-en;
};

&pm8350c_switch1 {
	qcom,led-mask = <6>; /* Channels 2 & 3 */
	qcom,symmetry-en;
};

&pm8350c_switch2 {
	qcom,led-mask = <15>; /* All Channels */
	qcom,symmetry-en;
};

&pm8350c_flash {
	status = "ok";
};

&battery_charger {
	qcom,thermal-mitigation = <11500000 11000000 10500000 10000000 9500000
				9000000 8500000 8000000 7500000 7000000 6500000
				6000000 5500000 5000000 4500000 4000000 3500000
				3000000 2500000 2000000 1500000 1000000 500000>;
	qcom,wireless-fw-name = "idt9415.bin";
};

&qupv3_se9_i2c {
	status = "ok";
	qcom,clk-freq-out = <1000000>;
	#address-cells = <1>;
	#size-cells = <0>;
	nq@28 {
		compatible = "qcom,sn-nci";
		reg = <0x28>;
		qcom,sn-irq = <&tlmm 46 0x00>;
		qcom,sn-ven = <&tlmm 34 0x00>;
		qcom,sn-firm = <&tlmm 45 0x00>;
		qcom,sn-clkreq = <&tlmm 35 0x00>;
		qcom,sn-vdd-1p8-supply = <&S10B>;
		qcom,sn-vdd-1p8-voltage = <1800000 1800000>;
		qcom,sn-vdd-1p8-current = <157000>;
		interrupt-parent = <&tlmm>;
		interrupts = <46 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_se4_spi {
	status = "ok";

	#address-cells = <1>;
	#size-cells = <0>;
	qcom,spi-touch-active = "focaltech,fts_ts";
	qcom,la-vm;

	focaltech@0 {
		compatible = "focaltech,fts_ts";
		reg = <0x0>;
		spi-max-frequency = <6000000>;
		interrupt-parent = <&tlmm>;
		interrupts = <21 0x2008>;
		focaltech,reset-gpio = <&tlmm 20 0x00>;
		focaltech,irq-gpio = <&tlmm 21 0x2008>;
		focaltech,display-coords = <0 0 1080 2340>;
		focaltech,max-touch-number = <5>;
		focaltech,ic-type = <0x3658D488>;
		focaltech,touch-type = "primary";

		vdd-supply = <&L3C>;

		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 = <&ts_release>;

		focaltech,trusted-touch-mode = "vm_mode";
		focaltech,touch-environment = "pvm";
		focaltech,trusted-touch-type = "primary";
		focaltech,trusted-touch-spi-irq = <754>;
		focaltech,trusted-touch-io-bases = <0x990000 0x910000>;
		focaltech,trusted-touch-io-sizes = <0x1000 0x4000>;
		focaltech,trusted-touch-vm-gpio-list = <&tlmm 16 0 &tlmm 17 0 &tlmm 18 0
						&tlmm 19 0 &tlmm 20 0 &tlmm 21 0x2008>;
	};
};

&qupv3_se5_i2c {
	status = "ok";

	#address-cells = <1>;
	#size-cells = <0>;
	redriver: redriver@1c {
		compatible = "onnn,redriver";
		reg = <0x1c>;

		lane-channel-swap;

		pinctrl-names = "default";
		pinctrl-0 = <&usb3phy_portselect_gpio>;
		gpios = <&tlmm 91 0>;

		eq = /bits/ 8 <
				/* Parameters for USB */
				0x4 0x4 0x4 0x4
				/* Parameters for DP */
				0x6 0x4 0x4 0x6>;
		flat-gain = /bits/ 8 <
				/* Parameters for USB */
				0x3 0x1 0x1 0x3
				/* Parameters for DP */
				0x2 0x1 0x1 0x2>;
		output-comp = /bits/ 8 <
				/* Parameters for USB */
				0x3 0x3 0x3 0x3
				/* Parameters for DP */
				0x3 0x3 0x3 0x3>;
		loss-match = /bits/ 8 <
				/* Parameters for USB */
				0x1 0x3 0x3 0x1
				/* Parameters for DP */
				0x3 0x3 0x3 0x3>;
	};
};

&usb_qmp_dp_phy {
	pinctrl-names = "unused";
};

&usb0 {
	usb-role-switch;
	ssusb_redriver = <&redriver>;

	dwc3@a600000 {
		usb-role-switch;
		dr_mode = "otg";
	};

	port {
		usb_port0: endpoint {
			remote-endpoint = <&usb_port0_connector>;
		};
	};
};

&usb2_phy0 {
	qcom,param-override-seq =
		<0xe6 0x6c
		0x0c 0x70
		0x17 0x74>;
};

&ucsi {
	connector {
		port {
			usb_port0_connector: endpoint {
				remote-endpoint = <&usb_port0>;
			};
		};
	};
};

&thermal_zones {
	mmw_pa2 {
		trips {
			qtm_config0: qtm-config0 {
				temperature = <59500>;
				hysteresis = <3000>;
				type = "passive";
			};

			qtm_config1: qtm-config1 {
				temperature = <63500>;
				hysteresis = <3000>;
				type = "passive";
			};
		};

		cooling-maps {
			mmw2_cdev0 {
				trip = <&qtm_config0>;
				cooling-device = <&mmw1_dsc 1 1>;
			};

			mmw2_cdev1 {
				trip = <&qtm_config1>;
				cooling-device = <&mmw1_dsc 3 3>;
			};
		};
	};

	skin-msm-therm {
		trips {
			skin_config0: skin-config0 {
				temperature = <49800>;
				hysteresis = <1000>;
				type = "passive";
			};

			skin_config1: skin-config1 {
				temperature = <50800>;
				hysteresis = <0500>;
				type = "passive";
			};

			skin_config2: skin-config2 {
				temperature = <65000>;
				hysteresis = <2000>;
				type = "passive";
			};

			skin_config3: skin-config3 {
				temperature = <85000>;
				hysteresis = <2000>;
				type = "passive";
			};
		};

		cooling-maps {
			nr_scg_cdev0 {
				trip = <&skin_config0>;
				cooling-device = <&modem_nr_scg_dsc 2 2>;
			};

			nr_scg_cdev1 {
				trip = <&skin_config1>;
				cooling-device = <&modem_nr_scg_dsc 3 3>;
			};

			nr_scg_cdev2 {
				trip = <&skin_config2>;
				cooling-device = <&modem_nr_scg_dsc 10 10>;
			};

			nr_cdev3 {
				trip = <&skin_config3>;
				cooling-device = <&modem_nr_dsc 255 255>;
			};
		};
	};
};
