// SPDX-License-Identifier: BSD-3-Clause
/*
 * Common Board Device Tree for
 * Microsoft Mobile MSM8994 Octagon Platforms
 *
 * Copyright (c) 2020, Konrad Dybcio
 * Copyright (c) 2020, Gustave Monce <gustave.monce@outlook.com>
 */

#include "pm8994.dtsi"
#include "pmi8994.dtsi"
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/gpio-keys.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>

/*
 * Delete all generic (msm8994.dtsi) reserved
 * memory mappings which are different in this device.
 */
/delete-node/ &adsp_mem;
/delete-node/ &audio_mem;
/delete-node/ &cont_splash_mem;
/delete-node/ &mba_mem;
/delete-node/ &mpss_mem;
/delete-node/ &peripheral_region;
/delete-node/ &rmtfs_mem;
/delete-node/ &smem_mem;

/ {
	/*
	 * Most Lumia 950/XL users use GRUB to load their kernels,
	 * hence there is no need for msm-id and friends.
	 */

	/*
	 * This enables graphical output via bootloader-enabled display.
	 * acpi=no is required due to WP platforms having ACPI support, but
	 * only for Windows-based OSes.
	 */
	chosen {
		bootargs = "earlycon=efifb console=efifb acpi=no";

		#address-cells = <2>;
		#size-cells = <2>;
		ranges;
	};

	clocks {
		divclk4: divclk4 {
			compatible = "fixed-clock";
			#clock-cells = <0>;

			clock-frequency = <32768>;
			clock-output-names = "divclk4";

			pinctrl-names = "default";
			pinctrl-0 = <&divclk4_pin_a>;
		};
	};

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

		volup-key {
			label = "Volume Up";
			gpios = <&pm8994_gpios 3 GPIO_ACTIVE_LOW>;
			linux,input-type = <1>;
			linux,code = <KEY_VOLUMEUP>;
			wakeup-source;
			debounce-interval = <15>;
		};

		camsnap-key {
			label = "Camera Snapshot";
			gpios = <&pm8994_gpios 4 GPIO_ACTIVE_LOW>;
			linux,input-type = <1>;
			linux,code = <KEY_CAMERA>;
			wakeup-source;
			debounce-interval = <15>;
		};

		camfocus-key {
			label = "Camera Focus";
			gpios = <&pm8994_gpios 5 GPIO_ACTIVE_LOW>;
			linux,input-type = <1>;
			linux,code = <KEY_VOLUMEUP>;
			wakeup-source;
			debounce-interval = <15>;
		};
	};

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

		pinctrl-names = "default";
		pinctrl-0 = <&hall_front_default &hall_back_default>;

		label = "GPIO Hall Effect Sensor";

		event-hall-front-sensor {
			label = "Hall Effect Front Sensor";
			gpios = <&tlmm 42 GPIO_ACTIVE_HIGH>;
			linux,input-type = <EV_SW>;
			linux,code = <SW_LID>;
			linux,can-disable;
		};

		event-hall-back-sensor {
			label = "Hall Effect Back Sensor";
			gpios = <&tlmm 75 GPIO_ACTIVE_HIGH>;
			linux,input-type = <EV_SW>;
			linux,code = <SW_MACHINE_COVER>;
			linux,can-disable;
		};
	};

	reserved-memory {
		/*
		 * This device being a WP platform has a very different
		 * memory layout than other Android based devices.
		 * This memory layout is directly copied from the original
		 * device UEFI firmware, and adapted based on observations
		 * using JTAG for the Qualcomm Peripheral Image regions.
		 */

		uefi_mem: memory@200000 {
			reg = <0 0x00200000 0 0x100000>;
			no-map;
		};

		mppark_mem: memory@300000 {
			reg = <0 0x00300000 0 0x80000>;
			no-map;
		};

		fbpt_mem: memory@380000 {
			reg = <0 0x00380000 0 0x1000>;
			no-map;
		};

		dbg2_mem: memory@381000 {
			reg = <0 0x00381000 0 0x4000>;
			no-map;
		};

		capsule_mem: memory@385000 {
			reg = <0 0x00385000 0 0x1000>;
			no-map;
		};

		tpmctrl_mem: memory@386000 {
			reg = <0 0x00386000 0 0x3000>;
			no-map;
		};

		uefiinfo_mem: memory@389000 {
			reg = <0 0x00389000 0 0x1000>;
			no-map;
		};

		reset_mem: memory@389000 {
			reg = <0 0x00389000 0 0x1000>;
			no-map;
		};

		resuncached_mem: memory@38e000 {
			reg = <0 0x0038e000 0 0x72000>;
			no-map;
		};

		disp_mem: memory@400000 {
			reg = <0 0x00400000 0 0x800000>;
			no-map;
		};

		uefistack_mem: memory@c00000 {
			reg = <0 0x00c00000 0 0x40000>;
			no-map;
		};

		cpuvect_mem: memory@c40000 {
			reg = <0 0x00c40000 0 0x10000>;
			no-map;
		};

		rescached_mem: memory@400000 {
			reg = <0 0x00c50000 0 0xb0000>;
			no-map;
		};

		tzapps_mem: memory@6500000 {
			reg = <0 0x06500000 0 0x500000>;
			no-map;
		};

		smem_mem: memory@6a00000 {
			reg = <0 0x06a00000 0 0x200000>;
			no-map;
		};

		hyp_mem: memory@6c00000 {
			reg = <0 0x06c00000 0 0x100000>;
			no-map;
		};

		tz_mem: memory@6d00000 {
			reg = <0 0x06d00000 0 0x160000>;
			no-map;
		};

		rfsa_adsp_mem: memory@6e60000 {
			reg = <0 0x06e60000 0 0x10000>;
			no-map;
		};

		rfsa_mpss_mem: memory@6e70000 {
			compatible = "qcom,rmtfs-mem";
			reg = <0 0x06e70000 0 0x10000>;
			no-map;

			qcom,client-id = <1>;
		};

		/*
		 * Value obtained from the device original ACPI DSDT table
		 * MPSS_EFS / SBL
		 */
		mba_mem: memory@6e80000 {
			reg = <0 0x06e80000 0 0x180000>;
			no-map;
		};

		/*
		 * Peripheral Image loader region begin!
		 * The region reserved for pil is 0x7000000-0xef00000
		 */

		mpss_mem: memory@7000000 {
			reg = <0 0x07000000 0 0x5a00000>;
			no-map;
		};

		adsp_mem: memory@ca00000 {
			reg = <0 0x0ca00000 0 0x1800000>;
			no-map;
		};

		venus_mem: memory@e200000 {
			reg = <0 0x0e200000 0 0x500000>;
			no-map;
		};

		pil_metadata_mem: memory@e700000 {
			reg = <0 0x0e700000 0 0x4000>;
			no-map;
		};

		memory@e704000 {
			reg = <0 0x0e704000 0 0x7fc000>;
			no-map;
		};
		/* Peripheral Image loader region end */

		cnss_mem: memory@ef00000 {
			reg = <0 0x0ef00000 0 0x300000>;
			no-map;
		};
	};
};

&blsp1_i2c1 {
	status = "okay";

	rmi4-i2c-dev@4b {
		compatible = "syna,rmi4-i2c";
		reg = <0x4b>;
		#address-cells = <1>;
		#size-cells = <0>;

		interrupt-parent = <&tlmm>;
		interrupts = <77 IRQ_TYPE_EDGE_FALLING>;

		rmi4-f01@1 {
			reg = <0x01>;
			syna,nosleep-mode = <1>;
		};

		rmi4-f12@12 {
			reg = <0x12>;
			syna,sensor-type = <1>;
			syna,clip-x-low = <0>;
			syna,clip-x-high = <1440>;
			syna,clip-y-low = <0>;
			syna,clip-y-high = <2560>;
		};
	};
};

&blsp1_i2c2 {
	status = "okay";

	/*
	 * This device uses the Texas Instruments TAS2553, however the TAS2552 driver
	 * seems to work here. In the future a proper driver might need to
	 * be written for this device.
	 */
	tas2553: tas2553@40 {
		compatible = "ti,tas2552";
		reg = <0x40>;

		vbat-supply = <&vph_pwr>;
		iovdd-supply = <&vreg_s4a_1p8>;
		avdd-supply = <&vreg_s4a_1p8>;

		enable-gpio = <&pm8994_gpios 12 GPIO_ACTIVE_HIGH>;
	};
};

&blsp1_i2c5 {
	status = "okay";

	ak09912: magnetometer@c {
		compatible = "asahi-kasei,ak09912";
		reg = <0xc>;

		interrupt-parent = <&tlmm>;
		interrupts = <26 IRQ_TYPE_EDGE_RISING>;

		vdd-supply = <&vreg_l18a_2p85>;
		vid-supply = <&vreg_lvs2a_1p8>;
	};

	zpa2326: barometer@5c {
		compatible = "murata,zpa2326";
		reg = <0x5c>;

		interrupt-parent = <&tlmm>;
		interrupts = <74 IRQ_TYPE_EDGE_RISING>;

		vdd-supply = <&vreg_lvs2a_1p8>;
	};

	mpu6050: accelerometer@68 {
		compatible = "invensense,mpu6500";
		reg = <0x68>;

		interrupt-parent = <&tlmm>;
		interrupts = <64 IRQ_TYPE_EDGE_RISING>;

		vdd-supply = <&vreg_lvs2a_1p8>;
		vddio-supply = <&vreg_lvs2a_1p8>;
	};
};

&blsp1_i2c6 {
	status = "okay";

	pn547: pn547@28 {
		compatible = "nxp,pn544-i2c";

		reg = <0x28>;

		interrupt-parent = <&tlmm>;
		interrupts = <29 IRQ_TYPE_EDGE_RISING>;

		enable-gpios = <&tlmm 30 GPIO_ACTIVE_HIGH>;
		firmware-gpios = <&tlmm 94 GPIO_ACTIVE_HIGH>;
	};
};

&blsp1_uart2 {
	status = "okay";
};

&blsp2_i2c1 {
	status = "okay";

	sideinteraction: ad7147_captouch@2c {
		compatible = "ad,ad7147_captouch";
		reg = <0x2c>;

		pinctrl-names = "default", "sleep";
		pinctrl-0 = <&grip_default>;
		pinctrl-1 = <&grip_sleep>;

		interrupts = <&tlmm 96 IRQ_TYPE_EDGE_FALLING>;

		button_num = <8>;
		touchpad_num = <0>;
		wheel_num = <0>;
		slider_num = <0>;

		vcc-supply = <&vreg_l18a_2p85>;
	};

	/*
	 * The QPDS-T900/QPDS-T930 is a customized part built for Nokia
	 * by Avago. It is very similar to the Avago APDS-9930 with some
	 * minor differences. In the future a proper driver might need to
	 * be written for this device. For now this works fine.
	 */
	qpdst900: qpdst900@39 {
		compatible = "avago,apds9930";
		reg = <0x39>;

		interrupt-parent = <&tlmm>;
		interrupts = <40 IRQ_TYPE_EDGE_FALLING>;
	};
};

&blsp2_i2c5 {
	status = "okay";

	fm_radio: si4705@11 {
		compatible = "silabs,si470x";
		reg = <0x11>;

		interrupt-parent = <&tlmm>;
		interrupts = <9 IRQ_TYPE_EDGE_FALLING>;
		reset-gpios = <&tlmm 93 GPIO_ACTIVE_HIGH>;
	};

	vreg_lpddr_1p1: fan53526a@6c {
		compatible = "fcs,fan53526";
		reg = <0x6c>;

		regulator-min-microvolt = <1100000>;
		regulator-max-microvolt = <1100000>;
		vin-supply = <&vph_pwr>;
		fcs,suspend-voltage-selector = <1>;
		regulator-always-on; /* Turning off DDR power doesn't sound good. */
	};

	/* ANX7816 HDMI bridge (needs MDSS HDMI) */
};

&blsp2_spi4 {
	status = "okay";

	/*
	 * This device is a Lattice UC120 USB-C PD PHY.
	 * It is actually a Lattice iCE40 FPGA pre-programmed by
	 * the device firmware with a specific bitstream
	 * enabling USB Type C PHY functionality.
	 * Communication is done via a proprietary protocol over SPI.
	 *
	 * TODO: Once a proper driver is available, replace this.
	 */
	uc120: ice5lp2k@0 {
		compatible = "lattice,ice40-fpga-mgr";
		reg = <0>;
		spi-max-frequency = <5000000>;
		cdone-gpios = <&tlmm 95 GPIO_ACTIVE_HIGH>;
		reset-gpios = <&pmi8994_gpios 4 GPIO_ACTIVE_LOW>;
	};
};

&blsp2_uart2 {
	status = "okay";

	qca6174_bt: bluetooth {
		compatible = "qcom,qca6174-bt";

		enable-gpios = <&pm8994_gpios 19 GPIO_ACTIVE_HIGH>;
		clocks = <&divclk4>;
	};
};

&pm8994_gpios {
	bt_en_gpios: bt-en-gpios-state {
		pinconf {
			pins = "gpio19";
			function = PMIC_GPIO_FUNC_NORMAL;
			output-low;
			power-source = <PM8994_GPIO_S4>;
			qcom,drive-strength = <PMIC_GPIO_STRENGTH_LOW>;
			bias-pull-down;
		};
	};

	divclk4_pin_a: divclk4-state {
		pinconf {
			pins = "gpio18";
			function = PMIC_GPIO_FUNC_FUNC2;
			power-source = <PM8994_GPIO_S4>;
			bias-disable;
		};
	};
};

&pm8994_pon {
	pwrkey {
		compatible = "qcom,pm8941-pwrkey";
		interrupts = <0 8 0 IRQ_TYPE_EDGE_BOTH>;
		debounce = <15625>;
		linux,code = <KEY_POWER>;
	};

	resin {
		compatible = "qcom,pm8941-resin";
		interrupts = <0 8 1 IRQ_TYPE_EDGE_BOTH>;
		debounce = <15625>;
		linux,code = <KEY_VOLUMEDOWN>;
	};
};

&pmi8994_gpios {
	pinctrl-0 = <&hd3ss460_pol &hd3ss460_amsel &hd3ss460_en>;
	pinctrl-names = "default";

	/*
	 * This device uses a TI HD3SS460 Type-C MUX
	 * As this device has no driver currently,
	 * the configuration for USB Face Up is set-up here.
	 *
	 * TODO: remove once a driver is available
	 * TODO: add VBUS GPIO 5
	 */
	hd3ss460_pol: pol-low-state {
		pins = "gpio8";
		function = PMIC_GPIO_FUNC_NORMAL;
		qcom,drive-strength = <3>;
		bias-pull-down;
	};

	hd3ss460_amsel: amsel-high-state {
		pins = "gpio9";
		function = PMIC_GPIO_FUNC_NORMAL;
		qcom,drive-strength = <1>;
		bias-pull-up;
	};

	hd3ss460_en: en-high-state {
		pins = "gpio10";
		function = PMIC_GPIO_FUNC_NORMAL;
		qcom,drive-strength = <1>;
		bias-pull-up;
	};
};

&pmi8994_spmi_regulators {
	vdd_gfx: s2 {
		regulator-min-microvolt = <980000>;
		regulator-max-microvolt = <980000>;
	};
};

&rpm_requests {
	/* These values were taken from the original firmware ACPI tables */
	pm8994_regulators: regulators-0 {
		compatible = "qcom,rpm-pm8994-regulators";

		vdd_s1-supply = <&vph_pwr>;
		vdd_s2-supply = <&vph_pwr>;
		vdd_s3-supply = <&vph_pwr>;
		vdd_s4-supply = <&vph_pwr>;
		vdd_s5-supply = <&vph_pwr>;
		vdd_s6-supply = <&vph_pwr>;
		vdd_s7-supply = <&vph_pwr>;
		vdd_s8-supply = <&vph_pwr>;
		vdd_s9-supply = <&vph_pwr>;
		vdd_s10-supply = <&vph_pwr>;
		vdd_s11-supply = <&vph_pwr>;
		vdd_s12-supply = <&vph_pwr>;
		vdd_l1-supply = <&vreg_s1b_1p0>;
		vdd_l2_l26_l28-supply = <&vreg_s3a_1p3>;
		vdd_l3_l11-supply = <&vreg_s3a_1p3>;
		vdd_l4_l27_l31-supply = <&vreg_s3a_1p3>;
		vdd_l5_l7-supply = <&vreg_s5a_2p15>;
		vdd_l6_l12_l32-supply = <&vreg_s5a_2p15>;
		vdd_l8_l16_l30-supply = <&vph_pwr>;
		vdd_l9_l10_l18_l22-supply = <&vph_pwr_bbyp>;
		vdd_l13_l19_l23_l24-supply = <&vph_pwr_bbyp>;
		vdd_l14_l15-supply = <&vreg_s5a_2p15>;
		vdd_l17_l29-supply = <&vph_pwr_bbyp>;
		vdd_l20_l21-supply = <&vph_pwr_bbyp>;
		vdd_l25-supply = <&vreg_s5a_2p15>;
		vdd_lvs1_2-supply = <&vreg_s4a_1p8>;

		/* S1, S2, S6 and S12 are managed by RPMPD */

		vreg_s3a_1p3: s3 {
			regulator-min-microvolt = <1300000>;
			regulator-max-microvolt = <1300000>;
			regulator-allow-set-load;
			regulator-system-load = <300000>;
		};

		vreg_s4a_1p8: s4 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-allow-set-load;
			regulator-always-on;
			regulator-system-load = <325000>;
		};

		vreg_s5a_2p15: s5 {
			regulator-min-microvolt = <2150000>;
			regulator-max-microvolt = <2150000>;
			regulator-allow-set-load;
			regulator-system-load = <325000>;
		};

		vreg_s7a_1p0: s7 {
			regulator-min-microvolt = <1000000>;
			regulator-max-microvolt = <1000000>;
		};

		/*
		 * S8 - SPMI-managed VDD_APC0
		 * S9, S10 and S11 (the main one) - SPMI-managed VDD_APC1
		 */

		vreg_l1a_1p0: l1 {
			regulator-min-microvolt = <1000000>;
			regulator-max-microvolt = <1000000>;
		};

		vreg_l2a_1p25: l2 {
			regulator-min-microvolt = <1250000>;
			regulator-max-microvolt = <1250000>;
			regulator-allow-set-load;
			regulator-system-load = <4160>;
		};

		vreg_l3a_1p2: l3 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1200000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <80000>;
		};

		vreg_l4a_1p225: l4 {
			regulator-min-microvolt = <1225000>;
			regulator-max-microvolt = <1225000>;
		};

		/* L5 is inaccessible from RPM */

		vreg_l6a_1p8: l6 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-allow-set-load;
			regulator-system-load = <1000>;
		};

		/* L7 is inaccessible from RPM */

		vreg_l8a_1p8: l8 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

		vreg_l9a_1p8: l9 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

		vreg_l10a_1p8: l10 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

		vreg_l11a_1p2: l11 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1200000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <35000>;
		};

		vreg_l12a_1p8: l12 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <50000>;
		};

		vreg_l13a_2p95: l13 {
			regulator-min-microvolt = <1850000>;
			regulator-max-microvolt = <2950000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <22000>;
		};

		vreg_l14a_1p8: l14 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <52000>;
		};

		vreg_l15a_1p8: l15 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

		vreg_l16a_2p7: l16 {
			regulator-min-microvolt = <2700000>;
			regulator-max-microvolt = <2700000>;
		};

		vreg_l17a_2p7: l17 {
			regulator-min-microvolt = <2800000>;
			regulator-max-microvolt = <2800000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <300000>;
		};

		vreg_l18a_2p85: l18 {
			regulator-min-microvolt = <2850000>;
			regulator-max-microvolt = <2850000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <600000>;
		};

		vreg_l19a_3p3: l19 {
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <500000>;
		};

		vreg_l20a_2p95: l20 {
			regulator-min-microvolt = <2950000>;
			regulator-max-microvolt = <2950000>;
			regulator-always-on;
			regulator-boot-on;
			regulator-allow-set-load;
			regulator-system-load = <570000>;
		};

		vreg_l21a_2p95: l21 {
			regulator-min-microvolt = <2950000>;
			regulator-max-microvolt = <2950000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <800000>;
		};

		vreg_l22a_3p0: l22 {
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3000000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <150000>;
		};

		vreg_l23a_2p8: l23 {
			regulator-min-microvolt = <2850000>;
			regulator-max-microvolt = <2850000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <80000>;
		};

		vreg_l24a_3p075: l24 {
			regulator-min-microvolt = <3075000>;
			regulator-max-microvolt = <3150000>;
			regulator-allow-set-load;
			regulator-system-load = <5800>;
		};

		vreg_l25a_1p1: l25 {
			regulator-min-microvolt = <1150000>;
			regulator-max-microvolt = <1150000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <80000>;
		};

		vreg_l26a_1p0: l26 {
			regulator-min-microvolt = <1000000>;
			regulator-max-microvolt = <1000000>;
		};

		vreg_l27a_1p05: l27 {
			regulator-min-microvolt = <1000000>;
			regulator-max-microvolt = <1000000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <500000>;
		};

		vreg_l28a_1p0: l28 {
			regulator-min-microvolt = <1000000>;
			regulator-max-microvolt = <1000000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <26000>;
		};

		vreg_l29a_2p8: l29 {
			regulator-min-microvolt = <2850000>;
			regulator-max-microvolt = <2850000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <80000>;
		};

		vreg_l30a_1p8: l30 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <2500>;
		};

		vreg_l31a_1p2: l31 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1200000>;
			regulator-always-on;
			regulator-allow-set-load;
			regulator-system-load = <600000>;
		};

		vreg_l32a_1p8: l32 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

		vreg_lvs1a_1p8: lvs1 { };

		vreg_lvs2a_1p8: lvs2 { };
	};

	pmi8994_regulators: regulators-1 {
		compatible = "qcom,rpm-pmi8994-regulators";

		vdd_s1-supply = <&vph_pwr>;
		vdd_bst_byp-supply = <&vph_pwr>;

		vreg_s1b_1p0: s1 {
			regulator-min-microvolt = <1025000>;
			regulator-max-microvolt = <1025000>;
		};

		/* S2 & S3 - VDD_GFX */

		vph_pwr_bbyp: boost-bypass {
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
		};
	};
};

&sdhc1 {
	status = "okay";

	/*
	 * This device is shipped with HS400 capabable eMMCs
	 * However various brands have been used in various product batches,
	 * including a Samsung eMMC (BGND3R) which features a quirk with HS400.
	 * Set the speed to HS200 as a safety measure.
	 */
	mmc-hs200-1_8v;
};

&sdhc2 {
	status = "okay";

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on>;
	pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off>;

	vmmc-supply = <&vreg_l21a_2p95>;
	vqmmc-supply = <&vreg_l13a_2p95>;

	cd-gpios = <&pm8994_gpios 8 GPIO_ACTIVE_LOW>;
};

&tlmm {
	grip_default: grip-default-state {
		pins = "gpio39";
		function = "gpio";
		drive-strength = <6>;
		bias-pull-down;
	};

	grip_sleep: grip-sleep-state {
		pins = "gpio39";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-down;
	};

	hall_front_default: hall-front-default-state {
		pins = "gpio42";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	hall_back_default: hall-back-default-state {
		pins = "gpio75";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};
};