// SPDX-License-Identifier: BSD-3-Clause
/*
 * Copyright (c) 2022, Eugene Lepshy <fekz115@gmail.com>
 * Copyright (c) 2022, Gianluca Boiano <morf3089@gmail.com>
 */
/dts-v1/;

#include "msm8953.dtsi"
#include "pm8953.dtsi"
#include "pmi8950.dtsi"
#include <dt-bindings/leds/common.h>

/delete-node/ &adsp_fw_mem;
/delete-node/ &cont_splash_mem;
/delete-node/ &qseecom_mem;
/delete-node/ &wcnss_fw_mem;

/ {
	model = "Xiaomi Redmi 5 Plus";
	compatible = "xiaomi,vince", "qcom,msm8953";
	chassis-type = "handset";
	qcom,msm-id = <293 0>;
	qcom,board-id= <0x1000b 0x08>;

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

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

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

	reserved-memory {
		qseecom_mem: qseecom@84a00000 {
			reg = <0x0 0x84a00000 0x0 0x1900000>;
			no-map;
		};

		cont_splash_mem: cont-splash@90001000 {
			reg = <0x0 0x90001000 0x0 (1080 * 2160 * 3)>;
			no-map;
		};

		adsp_fw_mem: adsp@8d600000 {
			reg = <0x0 0x8d600000 0x0 0x1200000>;
			no-map;
		};

		wcnss_fw_mem: wcnss@8e800000 {
			reg = <0x0 0x8e800000 0x0 0x700000>;
			no-map;
		};

		ramoops@9ff00000 {
			compatible = "ramoops";
			reg = <0x0 0x9ff00000 0x0 0x100000>;
			record-size = <0x1000>;
			console-size = <0x80000>;
			ftrace-size = <0x1000>;
			pmsg-size = <0x8000>;
		};
	};

	/*
	 * We bitbang on &i2c_4 because BLSP is protected by TZ as sensors are
	 * normally proxied via ADSP firmware. GPIOs aren't protected.
	 */
	i2c-sensors {
		compatible = "i2c-gpio";
		sda-gpios = <&tlmm 14 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
		scl-gpios = <&tlmm 15 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
		i2c-gpio,delay-us = <2>; /* ~100 kHz */
		#address-cells = <1>;
		#size-cells = <0>;

		imu@6a {
			compatible = "st,lsm6dsl";
			reg = <0x6a>;
			vdd-supply = <&pm8953_l10>;
			vddio-supply = <&pm8953_l6>;
			mount-matrix = "1", "0", "0",
					"0", "-1", "0",
					"0", "0", "1";
		};
	};

	vph_pwr: vph-pwr-regulator {
		compatible = "regulator-fixed";
		regulator-name = "vph_pwr";
		regulator-always-on;
		regulator-boot-on;
	};
};

&hsusb_phy {
	vdd-supply = <&pm8953_l3>;
	vdda-pll-supply = <&pm8953_l7>;
	vdda-phy-dpdm-supply = <&pm8953_l13>;

	status = "okay";
};

&i2c_2 {
	status = "okay";

	led-controller@45 {
		compatible = "awinic,aw2013";
		reg = <0x45>;

		vcc-supply = <&pm8953_l10>;

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

		led@0 {
			reg = <0>;
			led-max-microamp = <5000>;
			function = LED_FUNCTION_INDICATOR;
			color = <LED_COLOR_ID_WHITE>;
		};
	};
};

&i2c_3 {
	status = "okay";

	touchscreen@20 {
		reg = <0x20>;
		compatible = "syna,rmi4-i2c";
		interrupts-parent = <&tlmm>;
		interrupts-extended = <&tlmm 65 IRQ_TYPE_EDGE_FALLING>;

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

		vdd-supply = <&pm8953_l10>;
		vio-supply = <&pm8953_l6>;

		pinctrl-names = "init", "suspend";
		pinctrl-0 = <&ts_reset_active &ts_int_active>;
		pinctrl-1 = <&ts_reset_suspend &ts_int_suspend>;
		syna,reset-delay-ms = <200>;
		syna,startup-delay-ms = <500>;

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

		rmi4-f12@12 {
			reg = <0x12>;
			syna,rezero-wait-ms = <20>;
			syna,sensor-type = <1>;
			touchscreen-x-mm = <68>;
			touchscreen-y-mm = <122>;
		};
	};
};

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

&pmi8950_wled {
	qcom,current-limit-microamp = <20000>;
	qcom,ovp-millivolt = <29600>;
	qcom,num-strings = <2>;
	qcom,external-pfet;
	qcom,cabc;

	status = "okay";
};

&rpm_requests {
	regulators {
		compatible = "qcom,rpm-pm8953-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_l1-supply = <&pm8953_s3>;
		vdd_l2_l3-supply = <&pm8953_s3>;
		vdd_l4_l5_l6_l7_l16_l19-supply = <&pm8953_s4>;
		vdd_l8_l11_l12_l13_l14_l15-supply = <&vph_pwr>;
		vdd_l9_l10_l17_l18_l22-supply = <&vph_pwr>;

		pm8953_s1: s1 {
			regulator-min-microvolt = <870000>;
			regulator-max-microvolt = <1156000>;
		};

		pm8953_s3: s3 {
			regulator-min-microvolt = <984000>;
			regulator-max-microvolt = <1224000>;
		};

		pm8953_s4: s4 {
			regulator-min-microvolt = <1900000>;
			regulator-max-microvolt = <2050000>;
		};

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

		pm8953_l2: l2 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1225000>;
		};

		pm8953_l3: l3 {
			regulator-min-microvolt = <925000>;
			regulator-max-microvolt = <925000>;
		};

		pm8953_l5: l5 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

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

		pm8953_l7: l7 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1900000>;
		};

		pm8953_l8: l8 {
			regulator-min-microvolt = <2900000>;
			regulator-max-microvolt = <2900000>;
		};

		pm8953_l9: l9 {
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3300000>;
		};

		pm8953_l10: l10 {
			regulator-min-microvolt = <2850000>;
			regulator-max-microvolt = <2850000>;
		};

		pm8953_l11: l11 {
			regulator-min-microvolt = <2950000>;
			regulator-max-microvolt = <2950000>;
		};

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

		pm8953_l13: l13 {
			regulator-min-microvolt = <3125000>;
			regulator-max-microvolt = <3125000>;
		};

		pm8953_l16: l16 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1800000>;
		};

		pm8953_l17: l17 {
			regulator-min-microvolt = <2750000>;
			regulator-max-microvolt = <2850000>;
		};

		pm8953_l19: l19 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1380000>;
		};

		pm8953_l22: l22 {
			regulator-min-microvolt = <2800000>;
			regulator-max-microvolt = <2800000>;
		};

		pm8953_l23: l23 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1225000>;
		};
	};
};

&sdhc_1 {
	vmmc-supply = <&pm8953_l8>;
	vqmmc-supply = <&pm8953_l5>;

	status = "okay";
};

&sdhc_2 {
	vmmc-supply = <&pm8953_l11>;
	vqmmc-supply = <&pm8953_l12>;

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

	status = "okay";
};

&tlmm {
	gpio-reserved-ranges = <0 4>, <16 4>, <135 4>;

	ts_reset_active: ts-reset-active-state {
		pins = "gpio64";
		function = "gpio";
		drive-strength = <8>;
		bias-pull-up;
	};

	ts_reset_suspend: ts-reset-suspend-state {
		pins = "gpio64";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-up;
	};

	ts_int_active: ts-int-active-state {
		pins = "gpio65";
		function = "gpio";
		drive-strength = <8>;
		bias-pull-up;
	};

	ts_int_suspend: ts-int-suspend-state {
		pins = "gpio65";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-down;
	};
};

&uart_0 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart_console_active>;

	status = "okay";
};

&usb3 {
	status = "okay";
};

&usb3_dwc3 {
	dr_mode = "peripheral";
};
