// SPDX-License-Identifier: BSD-3-Clause
/*
 * Copyright (c) 2023, Luca Weiss <luca.weiss@fairphone.com>
 */

/dts-v1/;

/* PM7250B is configured to use SID8/9 */
#define PM7250B_SID 8
#define PM7250B_SID1 9

#include <dt-bindings/iio/qcom,spmi-adc7-pm7325.h>
#include <dt-bindings/iio/qcom,spmi-adc7-pmk8350.h>
#include <dt-bindings/leds/common.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
#include "sc7280.dtsi"
#include "pm7250b.dtsi"
#include "pm7325.dtsi"
#include "pm8350c.dtsi" /* PM7350C */
#include "pmk8350.dtsi" /* PMK7325 */

/delete-node/ &rmtfs_mem;

/ {
	model = "Fairphone 5";
	compatible = "fairphone,fp5", "qcom,qcm6490";
	chassis-type = "handset";

	aliases {
		serial0 = &uart5;
		serial1 = &uart7;
	};

	chosen {
		#address-cells = <2>;
		#size-cells = <2>;
		ranges;

		framebuffer0: framebuffer@a000000 {
			compatible = "simple-framebuffer";
			reg = <0x0 0xe1000000 0x0 (2700 * 1224 * 4)>;
			width = <1224>;
			height = <2700>;
			stride = <(1224 * 4)>;
			format = "a8r8g8b8";
			clocks = <&gcc GCC_DISP_HF_AXI_CLK>;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";

		pinctrl-0 = <&volume_down_default>, <&hall_sensor_default>;
		pinctrl-names = "default";

		key-volume-up {
			label = "Volume up";
			gpios = <&pm7325_gpios 6 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_VOLUMEUP>;
		};

		/* Powered by the always-on vreg_l8c */
		event-hall-sensor {
			label = "Hall Effect Sensor";
			gpios = <&tlmm 155 GPIO_ACTIVE_LOW>;
			linux,input-type = <EV_SW>;
			linux,code = <SW_LID>;
			linux,can-disable;
			wakeup-source;
		};
	};

	pmic-glink {
		compatible = "qcom,qcm6490-pmic-glink", "qcom,pmic-glink";

		#address-cells = <1>;
		#size-cells = <0>;

		orientation-gpios = <&tlmm 140 GPIO_ACTIVE_HIGH>;

		connector@0 {
			compatible = "usb-c-connector";
			reg = <0>;
			power-role = "dual";
			data-role = "dual";

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

				port@0 {
					reg = <0>;

					pmic_glink_hs_in: endpoint {
						remote-endpoint = <&usb_1_dwc3_hs>;
					};
				};

				port@1 {
					reg = <1>;

					pmic_glink_ss_in: endpoint {
						remote-endpoint = <&usb_1_dwc3_ss>;
					};
				};
			};
		};
	};

	reserved-memory {
		cont_splash_mem: cont-splash@e1000000 {
			reg = <0x0 0xe1000000 0x0 0x2300000>;
			no-map;
		};

		cdsp_mem: cdsp@88f00000 {
			reg = <0x0 0x88f00000 0x0 0x1e00000>;
			no-map;
		};

		removed_mem: removed@c0000000 {
			reg = <0x0 0xc0000000 0x0 0x5100000>;
			no-map;
		};

		rmtfs_mem: memory@f8500000 {
			compatible = "qcom,rmtfs-mem";
			reg = <0x0 0xf8500000 0x0 0x600000>;
			no-map;

			qcom,client-id = <1>;
			qcom,vmid = <QCOM_SCM_VMID_MSS_MSA>, <QCOM_SCM_VMID_NAV>;
		};
	};

	ois_avdd0_1p8: regulator-ois-avdd0-1p8 {
		compatible = "regulator-fixed";
		regulator-name = "OIS_AVDD0_1P8";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		gpio = <&tlmm 157 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		vin-supply = <&vreg_bob>;
	};

	ois_dvdd_1p1: regulator-ois-dvdd-1p1 {
		compatible = "regulator-fixed";
		regulator-name = "OIS_DVDD_1P1";
		regulator-min-microvolt = <1100000>;
		regulator-max-microvolt = <1100000>;
		gpio = <&tlmm 97 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		vin-supply = <&vreg_s8b>;
	};

	afvdd_2p8: regulator-afvdd-2p8 {
		compatible = "regulator-fixed";
		regulator-name = "AFVDD_2P8";
		regulator-min-microvolt = <2800000>;
		regulator-max-microvolt = <2800000>;
		gpio = <&tlmm 68 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		vin-supply = <&vreg_bob>;
	};

	thermal-zones {
		camera-thermal {
			polling-delay-passive = <0>;
			polling-delay = <0>;
			thermal-sensors = <&pmk8350_adc_tm 2>;

			trips {
				active-config0 {
					temperature = <125000>;
					hysteresis = <1000>;
					type = "passive";
				};
			};
		};

		chg-skin-thermal {
			polling-delay-passive = <0>;
			polling-delay = <0>;
			thermal-sensors = <&pm7250b_adc_tm 0>;

			trips {
				active-config0 {
					temperature = <125000>;
					hysteresis = <1000>;
					type = "passive";
				};
			};
		};

		conn-thermal {
			polling-delay-passive = <0>;
			polling-delay = <0>;
			thermal-sensors = <&pm7250b_adc_tm 1>;

			trips {
				active-config0 {
					temperature = <125000>;
					hysteresis = <1000>;
					type = "passive";
				};
			};
		};

		quiet-thermal {
			polling-delay-passive = <0>;
			polling-delay = <0>;
			thermal-sensors = <&pmk8350_adc_tm 1>;

			trips {
				active-config0 {
					temperature = <125000>;
					hysteresis = <1000>;
					type = "passive";
				};
			};
		};

		rear-cam-thermal {
			polling-delay-passive = <0>;
			polling-delay = <0>;
			thermal-sensors = <&pmk8350_adc_tm 4>;

			trips {
				active-config0 {
					temperature = <125000>;
					hysteresis = <1000>;
					type = "passive";
				};
			};
		};

		sdm-skin-thermal {
			polling-delay-passive = <0>;
			polling-delay = <0>;
			thermal-sensors = <&pmk8350_adc_tm 3>;

			trips {
				active-config0 {
					temperature = <125000>;
					hysteresis = <1000>;
					type = "passive";
				};
			};
		};

		xo-thermal {
			polling-delay-passive = <0>;
			polling-delay = <0>;
			thermal-sensors = <&pmk8350_adc_tm 0>;

			trips {
				active-config0 {
					temperature = <125000>;
					hysteresis = <1000>;
					type = "passive";
				};
			};
		};
	};
};

&apps_rsc {
	regulators-0 {
		compatible = "qcom,pm7325-rpmh-regulators";
		qcom,pmic-id = "b";

		vreg_s1b: smps1 {
			regulator-min-microvolt = <1840000>;
			regulator-max-microvolt = <2040000>;
		};

		vreg_s7b: smps7 {
			regulator-min-microvolt = <535000>;
			regulator-max-microvolt = <1120000>;
		};

		vreg_s8b: smps8 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1500000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_RET>;
		};

		vreg_l1b: ldo1 {
			regulator-min-microvolt = <825000>;
			regulator-max-microvolt = <925000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l2b: ldo2 {
			regulator-min-microvolt = <2700000>;
			regulator-max-microvolt = <3544000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l3b: ldo3 {
			regulator-min-microvolt = <312000>;
			regulator-max-microvolt = <910000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l6b: ldo6 {
			regulator-min-microvolt = <1140000>;
			regulator-max-microvolt = <1260000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l7b: ldo7 {
			/* Constrained for UFS VCC, at least until UFS driver scales voltage */
			regulator-min-microvolt = <2952000>;
			regulator-max-microvolt = <2952000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l8b: ldo8 {
			regulator-min-microvolt = <870000>;
			regulator-max-microvolt = <970000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l9b: ldo9 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1304000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l11b: ldo11 {
			regulator-min-microvolt = <1504000>;
			regulator-max-microvolt = <2000000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l12b: ldo12 {
			regulator-min-microvolt = <751000>;
			regulator-max-microvolt = <824000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l13b: ldo13 {
			regulator-min-microvolt = <530000>;
			regulator-max-microvolt = <824000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l14b: ldo14 {
			regulator-min-microvolt = <1080000>;
			regulator-max-microvolt = <1304000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l15b: ldo15 {
			regulator-min-microvolt = <765000>;
			regulator-max-microvolt = <1020000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l16b: ldo16 {
			regulator-min-microvolt = <1100000>;
			regulator-max-microvolt = <1300000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l17b: ldo17 {
			regulator-min-microvolt = <1700000>;
			regulator-max-microvolt = <1900000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l18b: ldo18 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <2000000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l19b: ldo19 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <2000000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};
	};

	regulators-1 {
		compatible = "qcom,pm8350c-rpmh-regulators";
		qcom,pmic-id = "c";

		vreg_s1c: smps1 {
			regulator-min-microvolt = <2190000>;
			regulator-max-microvolt = <2210000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_s9c: smps9 {
			regulator-min-microvolt = <1010000>;
			regulator-max-microvolt = <1170000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l1c: ldo1 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1980000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l2c: ldo2 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1950000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l3c: ldo3 {
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3400000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l4c: ldo4 {
			regulator-min-microvolt = <1620000>;
			regulator-max-microvolt = <3300000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l5c: ldo5 {
			regulator-min-microvolt = <1620000>;
			regulator-max-microvolt = <3300000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l6c: ldo6 {
			regulator-min-microvolt = <1650000>;
			regulator-max-microvolt = <3544000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l7c: ldo7 {
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3544000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l8c: ldo8 {
			regulator-min-microvolt = <1620000>;
			regulator-max-microvolt = <2000000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
			/* Hall sensor VDD */
			regulator-always-on;
		};

		vreg_l9c: ldo9 {
			regulator-min-microvolt = <2700000>;
			regulator-max-microvolt = <3544000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l10c: ldo10 {
			regulator-min-microvolt = <720000>;
			regulator-max-microvolt = <1050000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l11c: ldo11 {
			regulator-min-microvolt = <2800000>;
			regulator-max-microvolt = <3544000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l12c: ldo12 {
			regulator-min-microvolt = <1650000>;
			regulator-max-microvolt = <2000000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_l13c: ldo13 {
			regulator-min-microvolt = <2700000>;
			regulator-max-microvolt = <3544000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
		};

		vreg_bob: bob {
			regulator-min-microvolt = <3008000>;
			regulator-max-microvolt = <3960000>;
			regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
		};
	};
};

&dispcc {
	/* Disable for now so simple-framebuffer continues working */
	status = "disabled";
};

&gcc {
	protected-clocks = <GCC_CFG_NOC_LPASS_CLK>,
			   <GCC_EDP_CLKREF_EN>,
			   <GCC_MSS_CFG_AHB_CLK>,
			   <GCC_MSS_GPLL0_MAIN_DIV_CLK_SRC>,
			   <GCC_MSS_OFFLINE_AXI_CLK>,
			   <GCC_MSS_Q6SS_BOOT_CLK_SRC>,
			   <GCC_MSS_Q6_MEMNOC_AXI_CLK>,
			   <GCC_MSS_SNOC_AXI_CLK>,
			   <GCC_QSPI_CNOC_PERIPH_AHB_CLK>,
			   <GCC_QSPI_CORE_CLK>,
			   <GCC_QSPI_CORE_CLK_SRC>,
			   <GCC_SEC_CTRL_CLK_SRC>,
			   <GCC_WPSS_AHB_BDG_MST_CLK>,
			   <GCC_WPSS_AHB_CLK>,
			   <GCC_WPSS_RSCP_CLK>;
};

&gpi_dma0 {
	status = "okay";
};

&gpi_dma1 {
	status = "okay";
};

&i2c1 {
	status = "okay";

	/* PM8008 PMIC @ 8 and 9 */
	/* Pixelworks @ 26 */
	/* FSA4480 USB audio switch @ 42 */
	/* AW86927FCR haptics @ 5a */
};

&i2c2 {
	status = "okay";

	/* AW88261FCR amplifier @ 34 */
	/* AW88261FCR amplifier @ 35 */
};

&i2c4 {
	status = "okay";

	/* PTN36502 USB redriver @ 1a */
};

&i2c9 {
	status = "okay";

	/* ST21NFC NFC @ 28 */
	/* VL53L3 ToF @ 29 */
};

&ipa {
	qcom,gsi-loader = "self";
	memory-region = <&ipa_fw_mem>;
	firmware-name = "qcom/qcm6490/fairphone5/ipa_fws.mdt";
	status = "okay";
};

&pm7250b_adc {
	channel@4d {
		reg = <ADC5_AMUX_THM1_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
		label = "charger_skin_therm";
	};

	channel@4f {
		reg = <ADC5_AMUX_THM3_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
		label = "conn_therm";
	};
};

&pm7250b_adc_tm {
	status = "okay";

	charger-skin-therm@0 {
		reg = <0>;
		io-channels = <&pm7250b_adc ADC5_AMUX_THM1_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time-us = <200>;
	};

	conn-therm@1 {
		reg = <1>;
		io-channels = <&pm7250b_adc ADC5_AMUX_THM3_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time-us = <200>;
	};
};

&pm7325_gpios {
	volume_down_default: volume-down-default-state {
		pins = "gpio6";
		function = PMIC_GPIO_FUNC_NORMAL;
		power-source = <1>;
		bias-pull-up;
		input-enable;
	};
};

&pm8350c_flash {
	status = "okay";

	led-0 {
		function = LED_FUNCTION_FLASH;
		color = <LED_COLOR_ID_WHITE>;
		led-sources = <1>, <4>;
		led-max-microamp = <500000>;
		flash-max-microamp = <1500000>;
		flash-max-timeout-us = <1280000>;
	};
};

&pmk8350_adc_tm {
	status = "okay";

	xo-therm@0 {
		reg = <0>;
		io-channels = <&pmk8350_vadc PMK8350_ADC7_AMUX_THM1_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time-us = <200>;
	};

	quiet-therm@1 {
		reg = <1>;
		io-channels = <&pmk8350_vadc PM7325_ADC7_AMUX_THM1_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time-us = <200>;
	};

	cam-flash-therm@2 {
		reg = <2>;
		io-channels = <&pmk8350_vadc PM7325_ADC7_AMUX_THM2_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time-us = <200>;
	};

	sdm-skin-therm@3 {
		reg = <3>;
		io-channels = <&pmk8350_vadc PM7325_ADC7_AMUX_THM3_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time-us = <200>;
	};

	wide-rfc-therm@4 {
		reg = <4>;
		io-channels = <&pmk8350_vadc PM7325_ADC7_AMUX_THM4_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time-us = <200>;
	};
};

&pmk8350_rtc {
	status = "okay";
};

&pmk8350_vadc {
	status = "okay";

	channel@44 {
		reg = <PMK8350_ADC7_AMUX_THM1_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
		label = "pmk8350_xo_therm";
	};

	channel@144 {
		reg = <PM7325_ADC7_AMUX_THM1_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
		label = "pm7325_quiet_therm";
	};

	channel@145 {
		reg = <PM7325_ADC7_AMUX_THM2_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
		label = "pm7325_cam_flash_therm";
	};

	channel@146 {
		reg = <PM7325_ADC7_AMUX_THM3_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
		label = "pm7325_sdm_skin_therm";
	};

	channel@147 {
		reg = <PM7325_ADC7_AMUX_THM4_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
		label = "pm7325_wide_rfc_therm";
	};
};

&pon_pwrkey {
	status = "okay";
};

&pon_resin {
	linux,code = <KEY_VOLUMEDOWN>;
	status = "okay";
};

&qup_spi13_cs {
	drive-strength = <6>;
	bias-disable;
};

&qup_spi13_data_clk {
	drive-strength = <6>;
	bias-disable;
};

&qup_uart5_rx {
	drive-strength = <2>;
	bias-disable;
};

&qup_uart5_tx {
	drive-strength = <2>;
	bias-disable;
};

&qupv3_id_0 {
	status = "okay";
};

&qupv3_id_1 {
	status = "okay";
};

&remoteproc_adsp {
	firmware-name = "qcom/qcm6490/fairphone5/adsp.mbn";
	status = "okay";
};

&remoteproc_cdsp {
	firmware-name = "qcom/qcm6490/fairphone5/cdsp.mbn";
	status = "okay";
};

&remoteproc_mpss {
	firmware-name = "qcom/qcm6490/fairphone5/modem.mbn";
	status = "okay";
};

&remoteproc_wpss {
	firmware-name = "qcom/qcm6490/fairphone5/wpss.mbn";
	status = "okay";
};

&sdc2_clk {
	drive-strength = <16>;
	bias-disable;
};

&sdc2_cmd {
	drive-strength = <10>;
	bias-pull-up;
};

&sdc2_data {
	drive-strength = <10>;
	bias-pull-up;
};

&sdhc_2 {
	vmmc-supply = <&vreg_l9c>;
	vqmmc-supply = <&vreg_l6c>;

	pinctrl-0 = <&sdc2_clk>, <&sdc2_cmd>, <&sdc2_data>;
	pinctrl-1 = <&sdc2_clk_sleep>, <&sdc2_cmd_sleep>, <&sdc2_data_sleep>;

	status = "okay";
};

&spi13 {
	status = "okay";

	/* Goodix touchscreen @ 0 */
};

&tlmm {
	/*
	 * 32-33: SMB1394 (SPMI)
	 * 56-59: fingerprint reader (SPI)
	 */
	gpio-reserved-ranges = <32 2>, <56 4>;

	bluetooth_enable_default: bluetooth-enable-default-state {
		pins = "gpio85";
		function = "gpio";
		output-low;
		bias-disable;
	};

	hall_sensor_default: hall-sensor-default-state {
		pins = "gpio155";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-up;
	};

	qup_uart7_sleep_cts: qup-uart7-sleep-cts-state {
		pins = "gpio28";
		function = "gpio";
		/*
		 * Configure a bias-bus-hold on CTS to lower power
		 * usage when Bluetooth is turned off. Bus hold will
		 * maintain a low power state regardless of whether
		 * the Bluetooth module drives the pin in either
		 * direction or leaves the pin fully unpowered.
		 */
		bias-bus-hold;
	};

	qup_uart7_sleep_rts: qup-uart7-sleep-rts-state {
		pins = "gpio29";
		function = "gpio";
		/*
		 * Configure pull-down on RTS. As RTS is active low
		 * signal, pull it low to indicate the BT SoC that it
		 * can wakeup the system anytime from suspend state by
		 * pulling RX low (by sending wakeup bytes).
		 */
		bias-pull-down;
	};

	qup_uart7_sleep_tx: qup-uart7-sleep-tx-state {
		pins = "gpio30";
		function = "gpio";
		/*
		 * Configure pull-up on TX when it isn't actively driven
		 * to prevent BT SoC from receiving garbage during sleep.
		 */
		bias-pull-up;
	};

	qup_uart7_sleep_rx: qup-uart7-sleep-rx-state {
		pins = "gpio31";
		function = "gpio";
		/*
		 * Configure a pull-up on RX. This is needed to avoid
		 * garbage data when the TX pin of the Bluetooth module
		 * is floating which may cause spurious wakeups.
		 */
		bias-pull-up;
	};

	sw_ctrl_default: sw-ctrl-default-state {
		pins = "gpio86";
		function = "gpio";
		bias-pull-down;
	};
};

&uart5 {
	compatible = "qcom,geni-debug-uart";
	status = "okay";
};

&uart7 {
	/delete-property/interrupts;
	interrupts-extended = <&intc GIC_SPI 608 IRQ_TYPE_LEVEL_HIGH>,
			      <&tlmm 31 IRQ_TYPE_EDGE_FALLING>;

	pinctrl-1 = <&qup_uart7_sleep_cts>, <&qup_uart7_sleep_rts>, <&qup_uart7_sleep_tx>, <&qup_uart7_sleep_rx>;
	pinctrl-names = "default", "sleep";

	status = "okay";

	bluetooth: bluetooth {
		compatible = "qcom,wcn6750-bt";

		pinctrl-0 = <&bluetooth_enable_default>, <&sw_ctrl_default>;
		pinctrl-names = "default";

		enable-gpios = <&tlmm 85 GPIO_ACTIVE_HIGH>;
		swctrl-gpios = <&tlmm 86 GPIO_ACTIVE_HIGH>;

		vddio-supply = <&vreg_l19b>;
		vddaon-supply = <&vreg_s7b>;
		vddbtcxmx-supply = <&vreg_s7b>;
		vddrfacmn-supply = <&vreg_s7b>;
		vddrfa0p8-supply = <&vreg_s7b>;
		vddrfa1p7-supply = <&vreg_s1b>;
		vddrfa1p2-supply = <&vreg_s8b>;
		vddrfa2p2-supply = <&vreg_s1c>;
		vddasd-supply = <&vreg_l11c>;

		max-speed = <3200000>;
	};
};

&ufs_mem_hc {
	reset-gpios = <&tlmm 175 GPIO_ACTIVE_LOW>;

	vcc-supply = <&vreg_l7b>;
	vcc-max-microamp = <800000>;
	/*
	 * Technically l9b enables an eLDO (supplied by s1b) which then powers
	 * VCCQ2 of the UFS.
	 */
	vccq-supply = <&vreg_l9b>;
	vccq-max-microamp = <900000>;

	status = "okay";
};

&ufs_mem_phy {
	vdda-phy-supply = <&vreg_l10c>;
	vdda-pll-supply = <&vreg_l6b>;

	status = "okay";
};

&usb_1 {
	status = "okay";
};

&usb_1_dwc3 {
	dr_mode = "otg";
	usb-role-switch;
};

&usb_1_dwc3_hs {
	remote-endpoint = <&pmic_glink_hs_in>;
};

&usb_1_dwc3_ss {
	remote-endpoint = <&pmic_glink_ss_in>;
};

&usb_1_hsphy {
	vdda-pll-supply = <&vreg_l10c>;
	vdda18-supply = <&vreg_l1c>;
	vdda33-supply = <&vreg_l2b>;

	qcom,hs-crossover-voltage-microvolt = <28000>;
	qcom,hs-output-impedance-micro-ohms = <2600000>;
	qcom,hs-rise-fall-time-bp = <5430>;
	qcom,hs-disconnect-bp = <1743>;
	qcom,hs-amplitude-bp = <2430>;

	qcom,pre-emphasis-amplitude-bp = <20000>;
	qcom,pre-emphasis-duration-bp = <20000>;

	qcom,squelch-detector-bp = <(-2090)>;

	status = "okay";
};

&usb_1_qmpphy {
	vdda-phy-supply = <&vreg_l6b>;
	vdda-pll-supply = <&vreg_l1b>;

	status = "okay";
};

&venus {
	firmware-name = "qcom/qcm6490/fairphone5/venus.mbn";
	status = "okay";
};

&wifi {
	qcom,ath11k-calibration-variant = "Fairphone_5";
	status = "okay";
};
