// SPDX-License-Identifier: BSD-3-Clause
/*
 * Copyright (c) 2022, Luca Weiss <luca@z3ntu.xyz>
 */

/dts-v1/;

#include "qcom-msm8226.dtsi"
#include "qcom-pm8226.dtsi"
#include <dt-bindings/input/ti-drv260x.h>

/delete-node/ &adsp_region;

/ {
	model = "Huawei Watch";
	compatible = "huawei,sturgeon", "qcom,apq8026";
	chassis-type = "watch";
	qcom,msm-id = <199 0x20000>;
	qcom,board-id = <8 4>;

	reserved-memory {
		sbl_region: sbl@2f00000 {
			reg = <0x02f00000 0x100000>;
			no-map;
		};

		external_image_region: external-image@3100000 {
			reg = <0x3100000 0x200000>;
			no-map;
		};

		peripheral_region: peripheral@3300000 {
			reg = <0x3300000 0x600000>;
			no-map;
		};

		adsp_region: adsp@3900000 {
			reg = <0x3900000 0x1400000>;
			no-map;
		};

		modem_region: modem@4d00000 {
			reg = <0x4d00000 0x1b00000>;
			no-map;
		};

		modem_efs_region: modem-efs@7f00000 {
			reg = <0x7f00000 0x100000>;
			no-map;
		};
	};

	vreg_wlan: wlan-regulator {
		compatible = "regulator-fixed";

		regulator-name = "wl-reg";
		regulator-min-microvolt = <2950000>;
		regulator-max-microvolt = <2950000>;

		gpio = <&tlmm 110 GPIO_ACTIVE_HIGH>;
		enable-active-high;

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

&adsp {
	status = "okay";
};

&blsp1_i2c2 {
	clock-frequency = <384000>;

	status = "okay";

	vibrator@5a {
		compatible = "ti,drv2605";
		reg = <0x5a>;
		enable-gpios = <&tlmm 60 GPIO_ACTIVE_HIGH>;

		mode = <DRV260X_ERM_MODE>;
		library-sel = <DRV260X_ERM_LIB_D>;
		vib-rated-mv = <2765>;
		vib-overdrive-mv = <3525>;

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

&blsp1_i2c5 {
	clock-frequency = <384000>;

	status = "okay";

	touchscreen@20 {
		compatible = "syna,rmi4-i2c";
		reg = <0x20>;

		interrupts-extended = <&tlmm 17 IRQ_TYPE_EDGE_FALLING>;
		vdd-supply = <&pm8226_l19>;
		vio-supply = <&pm8226_lvs1>;

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

		syna,startup-delay-ms = <160>;

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

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

		rmi4-f12@12 {
			reg = <0x12>;
			syna,sensor-type = <1>;
		};
	};
};

&blsp1_uart4 {
	pinctrl-names = "default";
	pinctrl-0 = <&blsp1_uart4_default_state>;

	status = "okay";

	bluetooth {
		compatible = "brcm,bcm43430a0-bt";
		max-speed = <3000000>;

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

		host-wakeup-gpios = <&tlmm 64 GPIO_ACTIVE_HIGH>;
		device-wakeup-gpios = <&tlmm 63 GPIO_ACTIVE_HIGH>;
		shutdown-gpios = <&tlmm 67 GPIO_ACTIVE_HIGH>;
	};
};

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

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

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

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

		pm8226_l1: l1 {
			regulator-min-microvolt = <1225000>;
			regulator-max-microvolt = <1225000>;
		};

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

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

		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>;
		};

		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 = <2800000>;
			regulator-max-microvolt = <2800000>;
		};

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

		pm8226_l17: l17 {
			regulator-min-microvolt = <2950000>;
			regulator-max-microvolt = <2950000>;
		};

		pm8226_l18: l18 {
			regulator-min-microvolt = <2950000>;
			regulator-max-microvolt = <2950000>;
		};

		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 = <1800000>;
			regulator-max-microvolt = <2950000>;
		};

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

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

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

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

		pm8226_l26: l26 {
			regulator-min-microvolt = <1225000>;
			regulator-max-microvolt = <1225000>;
		};

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

		pm8226_l28: l28 {
			regulator-min-microvolt = <1800000>;
			regulator-max-microvolt = <2950000>;
		};

		pm8226_lvs1: lvs1 {};
	};
};

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

	bus-width = <8>;
	non-removable;

	status = "okay";
};

&sdhc_3 {
	max-frequency = <100000000>;
	non-removable;

	vmmc-supply = <&vreg_wlan>;
	vqmmc-supply = <&pm8226_l6>;

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

	status = "okay";

	wifi@1 {
		compatible = "brcm,bcm43430a0-fmac", "brcm,bcm4329-fmac";
		reg = <1>;

		interrupts-extended = <&tlmm 66 IRQ_TYPE_EDGE_FALLING>;
		interrupt-names = "host-wake";

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

&smbb {
	qcom,fast-charge-safe-voltage = <4370000>;
	qcom,fast-charge-high-threshold-voltage = <4350000>;
	qcom,minimum-input-voltage = <4350000>;
	qcom,fast-charge-current-limit = <300000>;
	qcom,fast-charge-safe-current = <600000>;
	qcom,auto-recharge-threshold-voltage = <4240000>;
};

&tlmm {
	blsp1_uart4_default_state: blsp1-uart4-default-state {
		pins = "gpio12", "gpio13", "gpio14", "gpio15";
		function = "blsp_uart4";
		drive-strength = <8>;
		bias-disable;
	};

	bluetooth_default_state: bluetooth-default-state {
		pins = "gpio63", "gpio64";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-down;
	};

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

		reset-pins {
			pins = "gpio16";
			function = "gpio";
			drive-strength = <6>;
			bias-pull-up;
		};
	};

	vibrator_default_state: vibrator-default-state {
		pins = "gpio59", "gpio60";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-down;
	};

	wlan_hostwake_default_state: wlan-hostwake-default-state {
		pins = "gpio66";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	wlan_regulator_default_state: wlan-regulator-default-state {
		pins = "gpio110";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-down;
	};
};

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

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