// SPDX-License-Identifier: BSD-3-Clause
/*
 * Copyright (c) 2021, AngeloGioacchino Del Regno
 *                     <angelogioacchino.delregno@somainline.org>
 */

/dts-v1/;

#include "msm8998-mtp.dtsi"

#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>

/ {
	model = "F(x)tec Pro1 (QX1000)";
	compatible = "fxtec,pro1", "qcom,msm8998";
	chassis-type = "handset";
	qcom,board-id = <0x02000b 0x10>;

	/*
	 * Until we hook up type-c detection, we
	 * have to stick with this. But it works.
	 */
	extcon_usb: extcon-usb {
		compatible = "linux,extcon-usb-gpio";
		id-gpio = <&tlmm 38 GPIO_ACTIVE_HIGH>;
	};

	gpio-hall-sensors {
		compatible = "gpio-keys";
		label = "Hall sensors";
		pinctrl-names = "default";
		pinctrl-0 = <&hall_sensor1_default>;

		hall-sensor1 {
			label = "Keyboard Hall Sensor";
			gpios = <&tlmm 124 GPIO_ACTIVE_HIGH>;
			debounce-interval = <15>;
			gpio-key,wakeup;
			linux,input-type = <EV_SW>;
			linux,code = <SW_KEYPAD_SLIDE>;
		};
	};

	gpio-kb-extra-keys {
		compatible = "gpio-keys";
		label = "Keyboard extra keys";
		pinctrl-names = "default";
		pinctrl-0 = <&gpio_kb_pins_extra>;

		home {
			label = "Home";
			gpios = <&tlmm 21 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_HOMEPAGE>;
			debounce-interval = <15>;
			linux,can-disable;
		};

		super-l {
			label = "Super Left";
			gpios = <&tlmm 32 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_FN>;
			debounce-interval = <15>;
			linux,can-disable;
		};

		super-r {
			label = "Super Right";
			gpios = <&tlmm 33 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_FN>;
			debounce-interval = <15>;
			linux,can-disable;
		};

		shift {
			label = "Shift";
			gpios = <&tlmm 114 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_RIGHTSHIFT>;
			debounce-interval = <15>;
			linux,can-disable;
		};

		ctrl {
			label = "Ctrl";
			gpios = <&tlmm 128 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_LEFTCTRL>;
			debounce-interval = <15>;
			linux,can-disable;
		};

		alt {
			label = "Alt";
			gpios = <&tlmm 129 GPIO_ACTIVE_LOW>;
			linux,code = <KEY_LEFTALT>;
			debounce-interval = <15>;
			linux,can-disable;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";
		label = "Side buttons";
		#address-cells = <1>;
		#size-cells = <0>;
		pinctrl-names = "default";
		pinctrl-0 = <&vol_up_pin_a>, <&cam_focus_pin_a>,
			    <&cam_snapshot_pin_a>;
		vol-up {
			label = "Volume Up";
			gpios = <&pm8998_gpio 6 GPIO_ACTIVE_LOW>;
			linux,input-type = <EV_KEY>;
			linux,code = <KEY_VOLUMEUP>;
			gpio-key,wakeup;
			debounce-interval = <15>;
		};

		camera-snapshot {
			label = "Camera Snapshot";
			gpios = <&pm8998_gpio 7 GPIO_ACTIVE_LOW>;
			linux,input-type = <EV_KEY>;
			linux,code = <KEY_CAMERA>;
			debounce-interval = <15>;
		};

		camera-focus {
			label = "Camera Focus";
			gpios = <&pm8998_gpio 8 GPIO_ACTIVE_LOW>;
			linux,input-type = <EV_KEY>;
			linux,code = <KEY_CAMERA_FOCUS>;
			debounce-interval = <15>;
		};
	};

	keyboard-leds {
		compatible = "gpio-leds";

		backlight {
			color = <LED_COLOR_ID_WHITE>;
			default-state = "off";
			function = LED_FUNCTION_KBD_BACKLIGHT;
			gpios = <&tlmm 16 GPIO_ACTIVE_HIGH>;
			label = "white:kbd_backlight";
			retain-state-suspended;
		};

		caps-lock {
			color = <LED_COLOR_ID_YELLOW>;
			default-state = "off";
			function = LED_FUNCTION_CAPSLOCK;
			gpios = <&tlmm 26 GPIO_ACTIVE_HIGH>;
			label = "yellow:capslock";
			linux,default-trigger = "kbd-capslock";
		};
	};

	reserved-memory {
		cont_splash_mem: memory@9d400000 {
			reg = <0x0 0x9d400000 0x0 0x2000000>;
			no-map;
		};

		zap_shader_region: memory@f6400000 {
			compatible = "shared-dma-pool";
			reg = <0x0 0xf6400000 0x0 0x2000>;
			no-map;
		};

		ramoops@ffc00000 {
			compatible = "ramoops";
			reg = <0x0 0xffc00000 0x0 0x100000>;
			console-size = <0x60000>;
			ecc-size = <16>;
			ftrace-size = <0x10000>;
			pmsg-size = <0x20000>;
			record-size = <0x10000>;
		};
	};

	ts_vio_vreg: ts-vio-vreg {
		compatible = "regulator-fixed";
		regulator-name = "ts_vio_reg";
		startup-delay-us = <2>;
		enable-active-high;
		gpio = <&tlmm 81 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&ts_vio_default>;
		regulator-always-on;
	};
};

&blsp2_i2c1 {
	status = "ok";

	touchscreen@14 {
		compatible = "goodix,gt9286";
		reg = <0x14>;
		interrupt-parent = <&tlmm>;
		interrupts = <125 IRQ_TYPE_LEVEL_LOW>;
		reset-gpios = <&tlmm 89 GPIO_ACTIVE_HIGH>;
		AVDD28-supply = <&vreg_l28_3p0>;
		VDDIO-supply = <&ts_vio_vreg>;
		pinctrl-names = "active";
		pinctrl-0 = <&ts_rst_n>, <&ts_int_n>;
	};
};

&mmcc {
	status = "ok";
};

&mmss_smmu {
	status = "ok";
};

&pm8998_gpio {
	vol_up_pin_a: vol-up-active {
		pins = "gpio6";
		function = "normal";
		bias-pull-up;
		input-enable;
		qcom,drive-strength = <PMIC_GPIO_STRENGTH_NO>;
	};

	cam_focus_pin_a: cam-focus-btn-active {
		pins = "gpio7";
		function = "normal";
		bias-pull-up;
		input-enable;
		qcom,drive-strength = <PMIC_GPIO_STRENGTH_NO>;
	};

	cam_snapshot_pin_a: cam-snapshot-btn-active {
		pins = "gpio8";
		function = "normal";
		bias-pull-up;
		input-enable;
		qcom,drive-strength = <PMIC_GPIO_STRENGTH_NO>;
	};
};

&pm8998_pon {
	resin {
		compatible = "qcom,pm8941-resin";
		interrupts = <GIC_SPI 0x8 1 IRQ_TYPE_EDGE_BOTH>;
		bias-pull-up;
		debounce = <15625>;
		linux,code = <KEY_VOLUMEDOWN>;
	};
};

&tlmm {
	gpio-reserved-ranges = <0 4>;

	mdp_vsync_n: mdp-vsync-n {
		pins = "gpio10";
		function = "mdp_vsync_a";
		bias-pull-down;
		drive-strength = <2>;
	};

	gpio_kb_pins_extra: gpio-kb-pins-extra {
		pins = "gpio21", "gpio32", "gpio33", "gpio114",
		       "gpio128", "gpio129";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-up;
	};

	ts_vio_default: ts-vio-def {
		pins = "gpio81";
		function = "gpio";
		bias-disable;
		drive-strength = <2>;
	};

	ts_rst_n: ts-rst-n {
		pins = "gpio89";
		function = "gpio";
		bias-pull-up;
		drive-strength = <8>;
	};

	hall_sensor1_default: hall-sensor1-def {
		pins = "gpio124";
		function = "gpio";
		bias-disable;
		drive-strength = <2>;
		input-enable;
	};

	ts_int_n: ts-int-n {
		pins = "gpio125";
		function = "gpio";
		bias-disable;
		drive-strength = <8>;
	};
};

&ufshc {
	status = "ok";
};

&ufsphy {
	status = "ok";
};

&usb3_dwc3 {
	dr_mode = "peripheral";
	extcon = <&extcon_usb>;
};

/* GT9286 analog supply */
&vreg_l28_3p0 {
	regulator-min-microvolt = <2800000>;
	regulator-max-microvolt = <2800000>;
};
