// SPDX-License-Identifier: BSD-3-Clause
/*
 * Copyright (c) 2022, Lux Aliaga <they@mint.lgbt>
 */

/dts-v1/;

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

/ {
	model = "Xiaomi Mi A3";
	compatible = "xiaomi,laurel-sprout", "qcom,sm6125";
	chassis-type = "handset";

	/* required for bootloader to select correct board */
	qcom,msm-id = <394 0>; /* sm6125 v1 */
	qcom,board-id = <11 0>;

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

		framebuffer0: framebuffer@5c000000 {
			compatible = "simple-framebuffer";
			reg = <0 0x5c000000 0 (1560 * 720 * 4)>;
			width = <720>;
			height = <1560>;
			stride = <(720 * 4)>;
			format = "a8r8g8b8";
		};
	};

	reserved-memory {
		debug_mem: debug@ffb00000 {
			reg = <0x0 0xffb00000 0x0 0xc0000>;
			no-map;
		};

		last_log_mem: lastlog@ffbc0000 {
			reg = <0x0 0xffbc0000 0x0 0x80000>;
			no-map;
		};

		pstore_mem: ramoops@ffc00000 {
			compatible = "ramoops";
			reg = <0x0 0xffc40000 0x0 0xc0000>;
			record-size = <0x1000>;
			console-size = <0x40000>;
			pmsg-size = <0x20000>;
		};

		cmdline_mem: memory@ffd00000 {
			reg = <0x0 0xffd40000 0x0 0x1000>;
			no-map;
		};
	};

	extcon_usb: usb-id {
		compatible = "linux,extcon-usb-gpio";
		id-gpios = <&tlmm 102 GPIO_ACTIVE_HIGH>;
	};

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

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

		key-volume-up {
			label = "Volume Up";
			gpios = <&pm6125_gpios 5 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_VOLUMEUP>;
			debounce-interval = <15>;
			linux,can-disable;
			wakeup-source;
		};
	};

	thermal-zones {
		rf-pa0-thermal {
			thermal-sensors = <&pm6125_adc_tm 0>;

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

		quiet-thermal {
			thermal-sensors = <&pm6125_adc_tm 1>;

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

		xo-thermal {
			thermal-sensors = <&pm6125_adc_tm 2>;

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

&hsusb_phy1 {
	vdd-supply = <&vreg_l7a>;
	vdda-pll-supply = <&vreg_l10a>;
	vdda-phy-dpdm-supply = <&vreg_l15a>;
	status = "okay";
};

&pm6125_adc {
	pinctrl-names = "default";
	pinctrl-0 = <&camera_flash_therm &emmc_ufs_therm>;

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

	channel@4e {
		reg = <ADC5_AMUX_THM2_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
		label = "quiet_therm";
	};

	channel@52 {
		reg = <ADC5_GPIO1_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
		label = "camera_flash_therm";
	};

	channel@54 {
		reg = <ADC5_GPIO3_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time = <200>;
		qcom,pre-scaling = <1 1>;
		label = "emmc_ufs_therm";
	};
};

&pm6125_adc_tm {
	status = "okay";

	rf-pa0-therm@0 {
		reg = <0>;
		io-channels = <&pm6125_adc ADC5_AMUX_THM1_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time-us = <200>;
	};

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

	xo-therm@2 {
		reg = <2>;
		io-channels = <&pm6125_adc ADC5_XO_THERM_100K_PU>;
		qcom,ratiometric;
		qcom,hw-settle-time-us = <200>;
	};
};

&pm6125_gpios {
	camera_flash_therm: camera-flash-therm-state {
		pins = "gpio3";
		function = PMIC_GPIO_FUNC_NORMAL;
		bias-high-impedance;
	};

	emmc_ufs_therm: emmc-ufs-therm-state {
		pins = "gpio6";
		function = PMIC_GPIO_FUNC_NORMAL;
		bias-high-impedance;
	};

	vol_up_n: vol-up-n-state {
		pins = "gpio5";
		function = PMIC_GPIO_FUNC_NORMAL;
		input-enable;
		bias-pull-up;
	};
};

&pon_pwrkey {
	status = "okay";
};

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

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

		vreg_s6a: s6 {
			regulator-min-microvolt = <936000>;
			regulator-max-microvolt = <1422000>;
		};

		vreg_l1a: l1 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1256000>;
		};

		vreg_l2a: l2 {
			regulator-min-microvolt = <1000000>;
			regulator-max-microvolt = <1056000>;
		};

		vreg_l3a: l3 {
			regulator-min-microvolt = <1000000>;
			regulator-max-microvolt = <1064000>;
		};

		vreg_l4a: l4 {
			regulator-min-microvolt = <872000>;
			regulator-max-microvolt = <976000>;
			regulator-allow-set-load;
		};

		vreg_l5a: l5 {
			regulator-min-microvolt = <1648000>;
			regulator-max-microvolt = <2950000>;
			regulator-allow-set-load;
		};

		vreg_l6a: l6 {
			regulator-min-microvolt = <576000>;
			regulator-max-microvolt = <656000>;
		};

		vreg_l7a: l7 {
			regulator-min-microvolt = <872000>;
			regulator-max-microvolt = <976000>;
		};

		vreg_l8a: l8 {
			regulator-min-microvolt = <400000>;
			regulator-max-microvolt = <728000>;
		};

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

		vreg_l10a: l10 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1896000>;
			regulator-allow-set-load;
		};

		vreg_l11a: l11 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1952000>;
			regulator-allow-set-load;
		};

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

		vreg_l13a: l13 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1832000>;
		};

		vreg_l14a: l14 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <1904000>;
		};

		vreg_l15a: l15 {
			regulator-min-microvolt = <3104000>;
			regulator-max-microvolt = <3232000>;
		};

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

		vreg_l17a: l17 {
			regulator-min-microvolt = <1248000>;
			regulator-max-microvolt = <1304000>;
		};

		vreg_l18a: l18 {
			regulator-min-microvolt = <1200000>;
			regulator-max-microvolt = <1264000>;
			regulator-allow-set-load;
		};

		vreg_l19a: l19 {
			regulator-min-microvolt = <1648000>;
			regulator-max-microvolt = <2952000>;
		};

		vreg_l20a: l20 {
			regulator-min-microvolt = <1648000>;
			regulator-max-microvolt = <2952000>;
		};

		vreg_l21a: l21 {
			regulator-min-microvolt = <2600000>;
			regulator-max-microvolt = <2856000>;
		};

		vreg_l22a: l22 {
			regulator-min-microvolt = <2944000>;
			regulator-max-microvolt = <2950000>;
			regulator-allow-set-load;
		};

		vreg_l23a: l23 {
			regulator-min-microvolt = <3000000>;
			regulator-max-microvolt = <3400000>;
		};

		vreg_l24a: l24 {
			regulator-min-microvolt = <2944000>;
			regulator-max-microvolt = <2950000>;
			regulator-allow-set-load;
		};
	};
};

&sdc2_off_state {
	sd-cd-pins {
		pins = "gpio98";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};
};

&sdc2_on_state {
	sd-cd-pins {
		pins = "gpio98";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-up;
	};
};

&sdhc_2 {
	cd-gpios = <&tlmm 98 GPIO_ACTIVE_HIGH>;
	vmmc-supply = <&vreg_l22a>;
	vqmmc-supply = <&vreg_l5a>;
	no-sdio;
	no-mmc;
	status = "okay";
};

&tlmm {
	gpio-reserved-ranges = <22 2>, <28 6>;
};

&ufs_mem_hc {
	vcc-supply = <&vreg_l24a>;
	vccq2-supply = <&vreg_l11a>;
	vcc-max-microamp = <600000>;
	vccq2-max-microamp = <600000>;
	vdd-hba-supply = <&vreg_l18a>;
	status = "okay";
};

&ufs_mem_phy {
	vdda-phy-supply = <&vreg_l4a>;
	vdda-pll-supply = <&vreg_l10a>;
	status = "okay";
};

&usb3 {
	status = "okay";
};

&usb3_dwc3 {
	extcon = <&extcon_usb>;
};
