// SPDX-License-Identifier: GPL-2.0-only

/dts-v1/;

#include "msm8916-pm8916.dtsi"
#include "msm8916-modem-qdsp6.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/leds/common.h>

/ {
	model = "Longcheer L8150";
	compatible = "longcheer,l8150", "qcom,msm8916-v1-qrd/9-v1", "qcom,msm8916";
	chassis-type = "handset";

	aliases {
		mmc0 = &sdhc_1; /* eMMC */
		mmc1 = &sdhc_2; /* SD card */
		serial0 = &blsp_uart2;
	};

	chosen {
		stdout-path = "serial0";
	};

	/*
	 * For some reason, the signed wcnss firmware is not relocatable.
	 * It must be loaded at 0x8b600000. Unfortunately, this also means that
	 * mpss_mem does not fit when loaded to the typical address at 0x86800000.
	 *
	 * Load wcnss_mem to the fixed address and relocate mpss_mem to the next
	 * working higher address. For some reason the modem firmware does not
	 * boot when placed at 0x8a800000 to 0x8e800000.
	 */
	reserved-memory {
		/delete-node/ mpss@86800000;
		/delete-node/ wcnss;

		wcnss_mem: wcnss@8b600000 {
			reg = <0x0 0x8b600000 0x0 0x600000>;
			no-map;
		};

		mpss_mem: mpss@8e800000 {
			reg = <0x0 0x8e800000 0x0 0x5000000>;
			no-map;
		};
	};

	battery: battery {
		compatible = "simple-battery";
		voltage-min-design-microvolt = <3400000>;
		voltage-max-design-microvolt = <4350000>;
		energy-full-design-microwatt-hours = <9500000>;
		charge-full-design-microamp-hours = <2500000>;

		ocv-capacity-celsius = <25>;
		ocv-capacity-table-0 = <4330000 100>, <4265000 95>,
			<4208000 90>, <4153000 85>, <4100000 80>, <4049000 75>,
			<4001000 70>, <3962000 65>, <3919000 60>, <3872000 55>,
			<3839000 50>, <3817000 45>, <3798000 40>, <3783000 35>,
			<3767000 30>, <3747000 25>, <3729000 20>, <3709000 16>,
			<3688000 13>, <3681000 11>, <3680000 10>, <3679000 9>,
			<3677000 8>, <3674000 7>, <3666000 6>, <3641000 5>,
			<3597000 4>, <3537000 3>, <3457000 2>, <3336000 1>,
			<3000000 0>;
	};

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

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

		label = "GPIO Buttons";

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

	reg_ctp: regulator-ctp {
		compatible = "regulator-fixed";
		regulator-name = "ctp";

		regulator-min-microvolt = <2800000>;
		regulator-max-microvolt = <2800000>;

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

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

	flash-led-controller {
		compatible = "sgmicro,sgm3140";
		flash-gpios = <&tlmm 31 GPIO_ACTIVE_HIGH>;
		enable-gpios = <&tlmm 32 GPIO_ACTIVE_HIGH>;

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

		flash_led: led {
			function = LED_FUNCTION_FLASH;
			color = <LED_COLOR_ID_WHITE>;
			flash-max-timeout-us = <250000>;
		};
	};
};

&blsp_i2c1 {
	status = "okay";

	led-controller@45 {
		compatible = "awinic,aw2013";
		reg = <0x45>;
		#address-cells = <1>;
		#size-cells = <0>;

		vcc-supply = <&pm8916_l17>;
		vio-supply = <&pm8916_l6>;

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

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

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

&blsp_i2c2 {
	status = "okay";

	accelerometer@10 {
		compatible = "bosch,bmc156_accel";
		reg = <0x10>;

		/*
		 * For some reason the interrupt line is usually not connected
		 * to the BMC156. However, there are two pads next to the chip
		 * that can be shorted to make it work if needed.
		 *
		 * interrupt-parent = <&tlmm>;
		 * interrupts = <116 IRQ_TYPE_EDGE_RISING>;
		 */

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

		vdd-supply = <&pm8916_l17>;
		vddio-supply = <&pm8916_l6>;

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

	magnetometer@12 {
		compatible = "bosch,bmc156_magn";
		reg = <0x12>;

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

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

		vdd-supply = <&pm8916_l17>;
		vddio-supply = <&pm8916_l6>;
	};

	light-sensor@23 {
		compatible = "liteon,ltr559";
		reg = <0x23>;
		proximity-near-level = <75>;

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

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

		vdd-supply = <&pm8916_l17>;
		vddio-supply = <&pm8916_l6>;
	};

	gyroscope@68 {
		compatible = "bosch,bmg160";
		reg = <0x68>;

		interrupt-parent = <&tlmm>;
		interrupts = <23 IRQ_TYPE_EDGE_RISING>,
			     <22 IRQ_TYPE_EDGE_RISING>;

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

		vdd-supply = <&pm8916_l17>;
		vddio-supply = <&pm8916_l6>;
	};
};

&blsp_i2c5 {
	status = "okay";

	rmi4@20 {
		compatible = "syna,rmi4-i2c";
		reg = <0x20>;
		#address-cells = <1>;
		#size-cells = <0>;

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

		vdd-supply = <&reg_ctp>;
		vio-supply = <&pm8916_l6>;

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

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

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

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

&blsp_uart2 {
	status = "okay";
};

&pm8916_bms {
	status = "okay";

	monitored-battery = <&battery>;
	power-supplies = <&pm8916_charger>;
};

&pm8916_charger {
	status = "okay";

	monitored-battery = <&battery>;

	qcom,fast-charge-safe-current = <900000>;
	qcom,fast-charge-safe-voltage = <4300000>;
};

&pm8916_codec {
	qcom,micbias-lvl = <2800>;
	qcom,mbhc-vthreshold-low = <75 150 237 450 500>;
	qcom,mbhc-vthreshold-high = <75 150 237 450 500>;
	qcom,hphl-jack-type-normally-open;
};

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

&pm8916_rpm_regulators {
	pm8916_l17: l17 {
		regulator-min-microvolt = <2850000>;
		regulator-max-microvolt = <2850000>;
	};
};

&pm8916_vib {
	status = "okay";
};

&sdhc_1 {
	status = "okay";
};

&sdhc_2 {
	status = "okay";
	non-removable;
};

&sound {
	audio-routing =
		"AMIC1", "MIC BIAS Internal1",
		"AMIC2", "MIC BIAS Internal2",
		"AMIC3", "MIC BIAS Internal3";
};

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

&usb_hs_phy {
	extcon = <&pm8916_charger>;
};

&venus {
	status = "okay";
};

&venus_mem {
	status = "okay";
};

&wcnss {
	status = "okay";
};

&wcnss_iris {
	compatible = "qcom,wcn3620";
};

&wcnss_mem {
	status = "okay";
};

&tlmm {
	accel_int_default: accel-int-default-state {
		pins = "gpio116";
		function = "gpio";

		drive-strength = <2>;
		bias-disable;
	};

	camera_flash_default: camera-flash-default-state {
		pins = "gpio31", "gpio32";
		function = "gpio";

		drive-strength = <2>;
		bias-disable;
	};

	ctp_pwr_en_default: ctp-pwr-en-default-state {
		pins = "gpio17";
		function = "gpio";

		drive-strength = <2>;
		bias-disable;
	};

	gpio_keys_default: gpio-keys-default-state {
		pins = "gpio107";
		function = "gpio";

		drive-strength = <2>;
		bias-pull-up;
	};

	gyro_int_default: gyro-int-default-state {
		pins = "gpio22", "gpio23";
		function = "gpio";

		drive-strength = <2>;
		bias-disable;
	};

	light_int_default: light-int-default-state {
		pins = "gpio115";
		function = "gpio";

		drive-strength = <2>;
		bias-disable;
	};

	magn_int_default: magn-int-default-state {
		pins = "gpio113";
		function = "gpio";

		drive-strength = <2>;
		bias-disable;
	};

	tp_int_default: tp-int-default-state {
		pins = "gpio13";
		function = "gpio";

		drive-strength = <2>;
		bias-disable;
	};
};
