// 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/leds/common.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>

/ {
	model = "BQ Aquaris X5 (Longcheer L8910)";
	compatible = "longcheer,l8910", "qcom,msm8916";
	chassis-type = "handset";

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

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

	speaker_amp: audio-amplifier {
		compatible = "awinic,aw8738";
		mode-gpios = <&tlmm 114 GPIO_ACTIVE_HIGH>;
		awinic,mode = <5>;
		sound-name-prefix = "Speaker Amp";

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

	flash-led-controller {
		compatible = "ocs,ocp8110";
		enable-gpios = <&tlmm 49 GPIO_ACTIVE_HIGH>;
		flash-gpios = <&tlmm 119 GPIO_ACTIVE_HIGH>;

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

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

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

	leds {
		compatible = "gpio-leds";

		led-0 {
			gpios = <&tlmm 17 GPIO_ACTIVE_HIGH>;
			color = <LED_COLOR_ID_WHITE>;
			default-state = "off";
			function = LED_FUNCTION_KBD_BACKLIGHT;

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

	usb_id: usb-id {
		compatible = "linux,extcon-usb-gpio";
		id-gpios = <&tlmm 110 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&usb_id_default>;
	};
};

&blsp_i2c2 {
	status = "okay";

	led-controller@30 {
		compatible = "kinetic,ktd2026";
		reg = <0x30>;
		#address-cells = <1>;
		#size-cells = <0>;

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

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

		multi-led {
			color = <LED_COLOR_ID_RGB>;
			function = LED_FUNCTION_STATUS;

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

			led@0 {
				reg = <0>;
				color = <LED_COLOR_ID_RED>;
			};

			led@1 {
				reg = <1>;
				color = <LED_COLOR_ID_GREEN>;
			};

			led@2 {
				reg = <2>;
				color = <LED_COLOR_ID_BLUE>;
			};
		};
	};

	flash-led-controller@53 {
		compatible = "silergy,sy7802";
		reg = <0x53>;

		enable-gpios = <&tlmm 16 GPIO_ACTIVE_HIGH>;

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

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

		led@0 {
			reg = <0>;
			function = LED_FUNCTION_FLASH;
			color = <LED_COLOR_ID_WHITE>;
			led-sources = <0>, <1>;
		};
	};
};

&blsp_i2c3 {
	status = "okay";

	magnetometer@d {
		compatible = "asahi-kasei,ak09911";
		reg = <0x0d>;

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

		reset-gpios = <&tlmm 111 GPIO_ACTIVE_LOW>;

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

	imu@68 {
		compatible = "bosch,bmi160";
		reg = <0x68>;

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

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

&blsp_uart2 {
	status = "okay";
};

&mpss_mem {
	reg = <0x0 0x86800000 0x0 0x5000000>;
};

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

&pm8916_gpios {
	status_led_default: status-led-default-state {
		pins = "gpio3";
		function = PMIC_GPIO_FUNC_NORMAL;
		power-source = <PM8916_GPIO_VPH>;
		bias-disable;
		output-high;
	};
};

&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";

	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&sdc2_default &sdc2_cd_default>;
	pinctrl-1 = <&sdc2_sleep &sdc2_cd_default>;

	cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
};

&sound {
	/*
	 * Provide widgets/pin-switches to allow enabling speaker separately.
	 * The hardware does not provide a way to disable the output via the
	 * headphone jack when the speaker is enabled.
	 */
	model = "bq-paella";
	widgets =
		"Speaker", "Speaker",
		"Headphone", "Headphones";
	pin-switches = "Speaker";
	audio-routing =
		"Speaker", "Speaker Amp OUT",
		"Speaker Amp IN", "HPH_R",
		"Headphones", "HPH_L",
		"Headphones", "HPH_R",
		"AMIC1", "MIC BIAS External1",
		"AMIC2", "MIC BIAS Internal2",
		"AMIC3", "MIC BIAS External1";
	aux-devs = <&speaker_amp>;
};

&usb {
	status = "okay";
	extcon = <&usb_id>, <&usb_id>;
};

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

&venus {
	status = "okay";
};

&venus_mem {
	status = "okay";
};

&wcnss {
	status = "okay";
};

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

&wcnss_mem {
	status = "okay";
};

&tlmm {
	button_backlight_default: button-backlight-default-state {
		pins = "gpio17";
		function = "gpio";

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

	camera_front_flash_default: camera-front-flash-default-state {
		pins = "gpio49", "gpio119";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	camera_rear_flash_default: camera-rear-flash-default-state {
		pins = "gpio9", "gpio16", "gpio117";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

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

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

	mag_reset_default: mag-reset-default-state {
		pins = "gpio111";
		function = "gpio";

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

	sdc2_cd_default: sdc2-cd-default-state {
		pins = "gpio38";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	spk_ext_pa_default: spk-ext-pa-default-state {
		pins = "gpio114";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	usb_id_default: usb-id-default-state {
		pins = "gpio110";
		function = "gpio";

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