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