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

/dts-v1/;

#include "msm8939-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/sound/apq8016-lpass.h>

/ {
	model = "Samsung Galaxy A7 (2015)";
	compatible = "samsung,a7", "qcom,msm8939";
	chassis-type = "handset";

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

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

	reserved-memory {
		/* Additional memory used by Samsung firmware modifications */
		tz-apps@85500000 {
			reg = <0x0 0x85500000 0x0 0xb00000>;
			no-map;
		};
	};

	battery: battery {
		compatible = "simple-battery";
		charge-term-current-microamp = <150000>;
		constant-charge-current-max-microamp = <1500000>;
		constant-charge-voltage-max-microvolt = <4300000>;
		precharge-current-microamp = <450000>;
		precharge-upper-limit-microvolt = <3500000>;
	};

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

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

		label = "GPIO Hall Effect Sensor";

		event-hall-sensor {
			label = "Hall Effect Sensor";
			gpios = <&tlmm 52 GPIO_ACTIVE_LOW>;
			linux,input-type = <EV_SW>;
			linux,code = <SW_LID>;
			linux,can-disable;
		};
	};

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

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

		label = "GPIO Buttons";

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

		button-home {
			label = "Home";
			gpios = <&tlmm 109 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_HOMEPAGE>;
		};
	};

	i2c-fg {
		compatible = "i2c-gpio";
		sda-gpios = <&tlmm 106 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
		scl-gpios = <&tlmm 105 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;

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

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

		fuel-gauge@35 {
			compatible = "richtek,rt5033-battery";
			reg = <0x35>;

			interrupt-parent = <&tlmm>;
			interrupts = <121 IRQ_TYPE_EDGE_BOTH>;

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

			power-supplies = <&charger>;
		};
	};

	i2c-nfc {
		compatible = "i2c-gpio";
		sda-gpios = <&tlmm 0 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
		scl-gpios = <&tlmm 1 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;

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

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

		nfc@2b {
			compatible = "nxp,pn547", "nxp,nxp-nci-i2c";
			reg = <0x2b>;

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

			enable-gpios = <&tlmm 116 GPIO_ACTIVE_HIGH>;
			firmware-gpios = <&tlmm 49 GPIO_ACTIVE_HIGH>;

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

	i2c-sensor {
		compatible = "i2c-gpio";
		sda-gpios = <&tlmm 84 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
		scl-gpios = <&tlmm 85 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;

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

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

		accelerometer: accelerometer@10 {
			compatible = "bosch,bmc150_accel";
			reg = <0x10>;
			interrupt-parent = <&tlmm>;
			interrupts = <115 IRQ_TYPE_EDGE_RISING>;

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

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

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

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

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

	i2c-tkey {
		compatible = "i2c-gpio";
		sda-gpios = <&tlmm 16 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
		scl-gpios = <&tlmm 17 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;

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

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

		touchkey@20 {
			/* Note: Actually an ABOV MCU that implements same interface */
			compatible = "coreriver,tc360-touchkey";
			reg = <0x20>;

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

			vcc-supply = <&reg_touch_key>;
			vdd-supply = <&reg_keyled>;
			vddio-supply = <&pm8916_l6>;

			linux,keycodes = <KEY_APPSELECT KEY_BACK>;

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

	pwm_vibrator: pwm {
		compatible = "clk-pwm";
		#pwm-cells = <2>;

		clocks = <&gcc GCC_GP2_CLK>;

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

	reg_keyled: regulator-keyled {
		compatible = "regulator-fixed";
		regulator-name = "keyled";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

		/* NOTE: On some variants e.g. SM-A700FD it's GPIO 91 */
		gpio = <&tlmm 100 GPIO_ACTIVE_HIGH>;
		enable-active-high;

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

	reg_touch_key: regulator-touch-key {
		compatible = "regulator-fixed";
		regulator-name = "touch_key";
		regulator-min-microvolt = <2800000>;
		regulator-max-microvolt = <2800000>;

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

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

	reg_tsp_vdd: regulator-tsp-vdd {
		compatible = "regulator-fixed";
		regulator-name = "tsp_vdd";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		vin-supply = <&pm8916_s4>;

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

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

	reg_vdd_tsp: regulator-vdd-tsp {
		compatible = "regulator-fixed";
		regulator-name = "vdd_tsp";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;

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

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

	reg_vibrator: regulator-vibrator {
		compatible = "regulator-fixed";
		regulator-name = "motor_en";
		regulator-min-microvolt = <3000000>;
		regulator-max-microvolt = <3000000>;

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

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

	vibrator {
		compatible = "pwm-vibrator";

		pwms = <&pwm_vibrator 0 100000>;
		pwm-names = "enable";

		vcc-supply = <&reg_vibrator>;
	};
};

&blsp_i2c1 {
	status = "okay";

	muic: extcon@25 {
		compatible = "siliconmitus,sm5502-muic";
		reg = <0x25>;

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

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

		usb_con: connector {
			compatible = "usb-b-connector";
			label = "micro-USB";
			type = "micro";
		};
	};
};

&blsp_i2c2 {
	status = "okay";

	speaker_codec: audio-codec@34 {
		compatible = "nxp,tfa9895";
		reg = <0x34>;
		vddd-supply = <&pm8916_l5>;
		sound-name-prefix = "Speaker";
		#sound-dai-cells = <0>;
	};
};

&blsp_i2c5 {
	status = "okay";

	touchscreen@24 {
		compatible = "cypress,tt21000";

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

		vdd-supply = <&reg_vdd_tsp>;
		vddio-supply = <&reg_tsp_vdd>;

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

&blsp_i2c6 {
	status = "okay";

	pmic@34 {
		compatible = "richtek,rt5033";
		reg = <0x34>;

		interrupts-extended = <&tlmm 62 IRQ_TYPE_EDGE_FALLING>;

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

		regulators {
			rt5033_reg_safe_ldo: SAFE_LDO {
				regulator-min-microvolt = <4900000>;
				regulator-max-microvolt = <4900000>;
				regulator-always-on;
			};

			/*
			 * Needed for camera, but not used yet.
			 * Define empty nodes to allow disabling the unused
			 * regulators.
			 */
			LDO {};
			BUCK {};
		};

		charger: charger {
			compatible = "richtek,rt5033-charger";
			monitored-battery = <&battery>;
			richtek,usb-connector = <&usb_con>;
		};
	};
};

&blsp_uart2 {
	status = "okay";
};

/*
 * For some reason the speaker amplifier is connected to the second SD line
 * (MI2S_2_D1) instead of the first (MI2S_2_D0). This must be configured in the
 * device tree, otherwise audio will seemingly play fine on the wrong SD line
 * but the speaker stays silent.
 *
 * When routing audio via QDSP6 (the default) the &lpass node is reserved and
 * the definitions from &q6afedai are used. When the modem is disabled audio can
 * be alternatively routed directly to the LPASS hardware with reduced latency.
 * The definitions for &lpass are here for completeness to simplify changing the
 * setup with minor changes to the DT (either manually or with DT overlays).
 */
&lpass {
	dai-link@3 {
		reg = <MI2S_QUATERNARY>;
		qcom,playback-sd-lines = <1>;
	};
};

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

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

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

&q6afedai {
	dai@22 {
		reg = <QUATERNARY_MI2S_RX>;
		qcom,sd-lines = <1>;
	};
};

&sdhc_1 {
	status = "okay";
};

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

	cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;

	status = "okay";
};

&sound {
	model = "samsung-a2015";
	audio-routing =
		"AMIC1", "MIC BIAS External1",
		"AMIC2", "MIC BIAS Internal2",
		"AMIC3", "MIC BIAS External1";

	pinctrl-0 = <&cdc_pdm_default &sec_mi2s_default>;
	pinctrl-1 = <&cdc_pdm_sleep &sec_mi2s_sleep>;
	pinctrl-names = "default", "sleep";

	sound_link_backend2: backend2-dai-link {
		link-name = "Quaternary MI2S";

		cpu {
			sound-dai = <&q6afedai QUATERNARY_MI2S_RX>;
		};
		platform {
			sound-dai = <&q6routing>;
		};
		codec {
			sound-dai = <&speaker_codec>;
		};
	};
};

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

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

&wcnss {
	status = "okay";
};

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

&wcnss_mem {
	status = "okay";
};

&tlmm {
	accel_int_default: accel-int-default-state {
		pins = "gpio115";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	fg_alert_default: fg-alert-default-state {
		pins = "gpio121";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	fg_i2c_default: fg-i2c-default-state {
		pins = "gpio105", "gpio106";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	gpio_hall_sensor_default: gpio-hall-sensor-default-state {
		pins = "gpio52";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	gpio_keys_default: gpio-keys-default-state {
		pins = "gpio107", "gpio109";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-up;
	};

	motor_en_default: motor-en-default-state {
		pins = "gpio86";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	motor_pwm_default: motor-pwm-default-state {
		pins = "gpio50";
		function = "gcc_gp2_clk_a";
	};

	muic_int_default: muic-int-default-state {
		pins = "gpio12";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	nfc_default: nfc-default-state {
		irq-pins {
			pins = "gpio21";
			function = "gpio";
			drive-strength = <2>;
			bias-pull-down;
		};

		nfc-pins {
			pins = "gpio49", "gpio116";
			function = "gpio";
			drive-strength = <2>;
			bias-disable;
		};
	};

	nfc_i2c_default: nfc-i2c-default-state {
		pins = "gpio0", "gpio1";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	pmic_int_default: pmic-int-default-state {
		pins = "gpio62";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	reg_tsp_en_default: reg-tsp-en-default-state {
		pins = "gpio73";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	reg_tsp_io_en_default: reg-tsp-io-en-default-state {
		pins = "gpio8";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

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

	sensor_i2c_default: sensor-i2c-default-state {
		pins = "gpio84", "gpio85";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	tkey_default: tkey-default-state {
		pins = "gpio20";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	tkey_en_default: tkey-en-default-state {
		pins = "gpio56";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	tkey_i2c_default: tkey-i2c-default-state {
		pins = "gpio16", "gpio17";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	tkey_led_en_default: tkey-led-en-default-state {
		pins = "gpio100";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};

	tsp_int_default: tsp-int-default-state {
		pins = "gpio13";
		function = "gpio";
		drive-strength = <2>;
		bias-disable;
	};
};
