// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (C) 2020 Stephan Gerhold
 */

/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>

/ {
	model = "Xiaomi Redmi 2 (Wingtech WT88047)";
	compatible = "wingtech,wt88047", "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 = "simple-audio-amplifier";
		enable-gpios = <&tlmm 117 GPIO_ACTIVE_HIGH>;
		sound-name-prefix = "Speaker Amp";
		pinctrl-0 = <&speaker_amp_default>;
		pinctrl-names = "default";
	};

	/*
	 * This seems to be actually an analog switch that either routes audio
	 * to the headphone jack or nowhere. Given that we need to enable a GPIO
	 * to get sound on headphones, modelling it as simple-audio-amplifier
	 * works just fine.
	 */
	headphones_switch: audio-switch {
		compatible = "simple-audio-amplifier";
		enable-gpios = <&tlmm 8 GPIO_ACTIVE_HIGH>;
		sound-name-prefix = "Headphones Switch";
		pinctrl-0 = <&headphones_switch_default>;
		pinctrl-names = "default";
	};

	flash-led-controller {
		compatible = "ocs,ocp8110";
		enable-gpios = <&tlmm 31 GPIO_ACTIVE_HIGH>;
		flash-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>;
		};
	};

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

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

	imu@68 {
		compatible = "invensense,mpu6880";
		reg = <0x68>;

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

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

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

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

&blsp_i2c5 {
	status = "okay";

	touchscreen@38 {
		/* Likely some other model but works just fine with this one */
		compatible = "edt,edt-ft5506";
		reg = <0x38>;

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

		reset-gpios = <&tlmm 12 GPIO_ACTIVE_LOW>;

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

		touchscreen-size-x = <720>;
		touchscreen-size-y = <1280>;

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

&blsp_i2c6 {
	status = "okay";

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

		vcc-supply = <&pm8916_l16>;
		vio-supply = <&pm8916_l5>;

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

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

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

&blsp_uart2 {
	status = "okay";
};

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

&pm8916_codec {
	qcom,micbias1-ext-cap;
	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_resin {
	status = "okay";
	linux,code = <KEY_VOLUMEDOWN>;
};

&pm8916_rpm_regulators {
	pm8916_l16: l16 {
		/*
		 * L16 is only used for AW2013 which is fine with 2.5-3.3V.
		 * Use the recommended typical voltage of 2.8V as minimum.
		 */
		regulator-min-microvolt = <2800000>;
		regulator-max-microvolt = <3300000>;
	};

	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 {
	/*
	 * Provide widgets/pin-switches to allow enabling speaker and headphones
	 * separately. Both are routed via the HPH_L/HPH_R pins of the codec.
	 */
	model = "wt88047";
	widgets =
		"Speaker", "Speaker",
		"Headphone", "Headphones";
	pin-switches = "Speaker", "Headphones";
	audio-routing =
		"Speaker", "Speaker Amp OUTL",
		"Speaker", "Speaker Amp OUTR",
		"Speaker Amp INL", "HPH_R",
		"Speaker Amp INR", "HPH_R",
		"Headphones", "Headphones Switch OUTL",
		"Headphones", "Headphones Switch OUTR",
		"Headphones Switch INL", "HPH_L",
		"Headphones Switch INR", "HPH_R",
		"AMIC1", "MIC BIAS External1",
		"AMIC2", "MIC BIAS Internal2";
	aux-devs = <&speaker_amp>, <&headphones_switch>;
};

&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 {
	camera_flash_default: camera-flash-default-state {
		pins = "gpio31", "gpio32";
		function = "gpio";

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

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

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

	headphones_switch_default: headphones-switch-default-state {
		pins = "gpio8";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	imu_default: imu-default-state {
		pins = "gpio115";
		function = "gpio";

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

	speaker_amp_default: speaker-amp-default-state {
		pins = "gpio117";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	touchscreen_default: touchscreen-default-state {
		touchscreen-pins {
			pins = "gpio13";
			function = "gpio";

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

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

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

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