// SPDX-License-Identifier: BSD-3-Clause
/*
 * Common Board Device Tree for Microsoft MSM8x26-based Lumias
 *
 * Copyright (c) 2023, Jack Matthews <jm5112356@gmail.com>
 * Copyright (c) 2023, Ivaylo Ivanov <ivo.ivanov.ivanov1@gmail.com>
 * Copyright (c) 2023, Dominik Kobinski <dominikkobinski314@gmail.com>
 * Copyright (c) 2023, Rayyan Ansari <rayyan@ansari.sh>
 */

/*
 * The .dts should first include qcom-msm8226.dtsi or msm8926.dtsi depending on
 * the SoC on the given device.
 */

#include "pm8226.dtsi"
#include <dt-bindings/input/input.h>

/*
 * Delete all generic (msm8226.dtsi) reserved
 * memory mappings which are different on these devices.
 */
/delete-node/ &smem_region;

/ {
	aliases {
		mmc0 = &sdhc_1; /* eMMC */
		mmc1 = &sdhc_2; /* microSD */
		display0 = &framebuffer;
	};

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

		stdout-path = "display0";

		framebuffer: framebuffer@3200000 {
			compatible = "simple-framebuffer";
			reg = <0x3200000 0x800000>;
			format = "a8r8g8b8";
			width = <720>;
			height = <1280>;
			stride = <(720 * 4)>;

			clocks = <&mmcc MDSS_AHB_CLK>,
				 <&mmcc MDSS_AXI_CLK>,
				 <&mmcc MDSS_BYTE0_CLK>,
				 <&mmcc MDSS_MDP_CLK>,
				 <&mmcc MDSS_PCLK0_CLK>,
				 <&mmcc MDSS_VSYNC_CLK>;
			power-domains = <&mmcc MDSS_GDSC>;
		};
	};

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

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

		label = "GPIO Buttons";

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

	/*
	 * This device being a WP platform has a different
	 * memory layout than other Android based devices.
	 * This smem memory region is directly copied from
	 * the original UEFI firmware.
	 */
	reserved-memory {
		display_reserved: framebuffer@3200000 {
			reg = <0x03200000 0x800000>;
			no-map;
		};

		smem_region: smem@fa00000 {
			reg = <0x0fa00000 0x100000>;
			no-map;
		};
	};
};

&blsp1_i2c2 {
	status = "okay";

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

		vdd-supply = <&pm8226_l15>;
		vid-supply = <&pm8226_l6>;
	};

	accelerometer: accelerometer@1e {
		compatible = "kionix,kx022-1020";
		reg = <0x1e>;

		interrupts-extended = <&tlmm 63 IRQ_TYPE_EDGE_RISING>;

		vdd-supply = <&pm8226_l15>;
		vddio-supply = <&pm8226_l6>;

		mount-matrix = "1",  "0",  "0",
			       "0", "-1",  "0",
			       "0",  "0",  "1";
	};
};

&blsp1_i2c5 {
	status = "okay";

	touchscreen: touchscreen@4b {
		compatible = "syna,rmi4-i2c";
		reg = <0x4b>;

		interrupts-extended = <&tlmm 17 IRQ_TYPE_EDGE_FALLING>;
		vdd-supply = <&pm8226_l15>;
		vio-supply = <&pm8226_l6>;

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

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

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

		rmi4-f11@11 {
			reg = <0x11>;
			syna,sensor-type = <1>;
		};
	};
};

&blsp1_uart3 {
	status = "okay";
};

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

&pm8226_vib {
	status = "okay";
};

&rpm_requests {
	regulators {
		compatible = "qcom,rpm-pm8226-regulators";

		/* These values were taken from the original firmware DSDT */
		pm8226_s1: s1 {
			regulator-min-microvolt = <1050000>;
			regulator-max-microvolt = <1050000>;
		};

		pm8226_s3: s3 {
			regulator-min-microvolt = <1300000>;
			regulator-max-microvolt = <1300000>;
		};

		pm8226_s4: s4 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <2100000>;
		};

		pm8226_s5: s5 {
			regulator-min-microvolt = <1150000>;
			regulator-max-microvolt = <1150000>;
		};

		pm8226_l3: l3 {
			regulator-min-microvolt = <750000>;
			regulator-max-microvolt = <1150000>;
		};

		pm8226_l4: l4 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1200000>;
		};

		pm8226_l5: l5 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1200000>;
		};

		pm8226_l6: l6 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

		pm8226_l7: l7 {
			regulator-min-microvolt = <1850000>;
			regulator-max-microvolt = <1850000>;
		};

		pm8226_l8: l8 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
			regulator-always-on;
		};

		pm8226_l9: l9 {
			regulator-min-microvolt = <2050000>;
			regulator-max-microvolt = <2050000>;
		};

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

		pm8226_l12: l12 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

		pm8226_l14: l14 {
			regulator-min-microvolt = <2750000>;
			regulator-max-microvolt = <2750000>;
		};

		pm8226_l15: l15 {
			regulator-min-microvolt = <2850000>;
			regulator-max-microvolt = <2850000>;
		};

		pm8226_l16: l16 {
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3000000>;
		};

		pm8226_l17: l17 {
			regulator-min-microvolt = <2950000>;
			regulator-max-microvolt = <2950000>;
			regulator-system-load = <200000>;
			regulator-allow-set-load;
		};

		pm8226_l18: l18 {
			regulator-min-microvolt = <2950000>;
			regulator-max-microvolt = <2950000>;
			regulator-system-load = <200000>;
			regulator-allow-set-load;
		};

		pm8226_l19: l19 {
			regulator-min-microvolt = <2850000>;
			regulator-max-microvolt = <2850000>;
		};

		pm8226_l20: l20 {
			regulator-min-microvolt = <3075000>;
			regulator-max-microvolt = <3075000>;
		};

		pm8226_l21: l21 {
			regulator-min-microvolt = <1850000>;
			regulator-max-microvolt = <2950000>;
		};

		pm8226_l22: l22 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

		pm8226_l23: l23 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

		pm8226_l24: l24 {
			regulator-min-microvolt = <1300000>;
			regulator-max-microvolt = <1300000>;
		};

		pm8226_l25: l25 {
			regulator-min-microvolt = <1775000>;
			regulator-max-microvolt = <2075000>;
		};

		pm8226_l27: l27 {
			regulator-min-microvolt = <2050000>;
			regulator-max-microvolt = <2050000>;
		};

		pm8226_l28: l28 {
			regulator-min-microvolt = <2000000>;
			regulator-max-microvolt = <3000000>;
		};
	};
};

&sdhc_1 {
	vmmc-supply = <&pm8226_l17>;
	vqmmc-supply = <&pm8226_l6>;

	status = "okay";
};

&sdhc_2 {
	vmmc-supply = <&pm8226_l18>;
	vqmmc-supply = <&pm8226_l21>;

	status = "okay";
};

&smbb {
	status = "okay";
};

&usb {
	extcon = <&smbb>;
	dr_mode = "peripheral";

	status = "okay";
};

&usb_hs_phy {
	extcon = <&smbb>;
	v1p8-supply = <&pm8226_l10>;
	v3p3-supply = <&pm8226_l20>;
};

&tlmm {
	gpio_keys_default: gpio-keys-default-state {
		pins = "gpio106", "gpio107", "gpio108";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-up;
	};

	touchscreen_default: touchscreen-default-state {
		irq-pins {
			pins = "gpio17";
			function = "gpio";
			drive-strength = <8>;
			bias-pull-up;
		};

		reset-pins {
			pins = "gpio16";
			function = "gpio";
			drive-strength = <8>;
			bias-disable;
			output-high;
		};
	};
};
