// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright (c) 2015, The Linux Foundation. All rights reserved.
 * Copyright (c) 2020-2023, Linaro Ltd.
 *
 */

/dts-v1/;

#include "msm8939.dtsi"
#include "msm8939-pm8916.dtsi"
#include <dt-bindings/arm/qcom,ids.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
#include <dt-bindings/sound/apq8016-lpass.h>

/ {
	model = "Square, Inc. T2 Devkit";
	compatible = "square,apq8039-t2", "qcom,msm8939";

	qcom,board-id = <0x53 0x54>;
	qcom,msm-id = <QCOM_ID_APQ8039 0x30000>;

	aliases {
		mmc0 = &sdhc_1;
		mmc1 = &sdhc_2;
		serial0 = &blsp_uart1;
		serial1 = &blsp_uart2;
	};

	bl: backlight {
		compatible = "gpio-backlight";
		pinctrl-0 = <&pinctrl_backlight>;
		pinctrl-names = "default";
		gpios = <&tlmm 98 GPIO_ACTIVE_HIGH>;
	};

	chosen {
		stdout-path = "serial1:115200n8";
	};

	vreg_lcd_avdd_reg: lcd-avdd-regulator {
		compatible = "regulator-fixed";
		regulator-name = "lcd_avdd";
		regulator-min-microvolt = <5600000>;
		regulator-max-microvolt = <5600000>;
		pinctrl-0 = <&pinctrl_lcd_avdd_reg>;
		pinctrl-names = "default";
		gpio = <&tlmm 86 GPIO_ACTIVE_HIGH>;
		startup-delay-us = <300>;
		enable-active-high;
	};

	vreg_lcd_avee_reg: lcd-avee-regulator {
		compatible = "regulator-fixed";
		regulator-name = "lcd_avee";
		regulator-min-microvolt = <5600000>;
		regulator-max-microvolt = <5600000>;
		pinctrl-0 = <&pinctrl_lcd_avee_reg>;
		pinctrl-names = "default";
		gpio = <&tlmm 87 GPIO_ACTIVE_HIGH>;
		startup-delay-us = <300>;
		enable-active-high;
	};

	vreg_lcd_iovcc_reg: lcd-iovcc-regulator {
		compatible = "regulator-fixed";
		regulator-name = "lcd_iovcc";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <1800000>;
		pinctrl-0 = <&pinctrl_lcd_iovcc_reg>;
		pinctrl-names = "default";
		gpio = <&tlmm 9 GPIO_ACTIVE_HIGH>;
		startup-delay-us = <300>;
		enable-active-high;
	};
};

&blsp_i2c1 {
	status = "okay";
};

&blsp_i2c2 {
	status = "okay";
};

&blsp_i2c3 {
	status = "okay";

	typec_pd: usb-pd@38 {
		compatible = "ti,tps6598x";
		reg = <0x38>;

		interrupt-parent = <&tlmm>;
		interrupts = <107 IRQ_TYPE_LEVEL_LOW>;
		interrupt-names = "irq";

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

		typec_con: connector {
			compatible = "usb-c-connector";
			label = "USB-C";

			port {
				typec_ep: endpoint {
					remote-endpoint = <&otg_ep>;
				};
			};
		};
	};
};

&blsp_i2c5 {
	status = "okay";
};

&blsp_uart1 {
	pinctrl-0 = <&blsp_uart1_default>;
	pinctrl-1 = <&blsp_uart1_sleep>;
	pinctrl-names = "default", "sleep";
	status = "okay";
};

&blsp_uart2 {
	pinctrl-0 = <&blsp_uart2_console_default>;
	pinctrl-1 = <&blsp_uart2_console_sleep>;
	pinctrl-names = "default", "sleep";
	status = "okay";
};

&gpu {
	status = "okay";
};

&lpass {
	status = "okay";
};

&lpass_codec {
	status = "okay";
};

&mdss {
	status = "okay";
};

&pm8916_codec {
	qcom,hphl-jack-type-normally-open;
	qcom,mbhc-vthreshold-low = <75 150 237 450 500>;
	qcom,mbhc-vthreshold-high = <75 150 237 450 500>;
	status = "okay";
};

&pm8916_gpios {
	gpio-line-names =
		"PM_GPIO1",     /* WIFI_GPIO1_PRE */
		"PM_GPIO2",     /* WIFI_GPIO2_PRE */
		"PM_GPIO3",
		"PM_GPIO4";
};

&sdhc_1 {
	status = "okay";
};

&sound {
	model = "apq8039-square-sndcard";
	audio-routing = "AMIC2", "MIC BIAS Internal2";
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&cdc_pdm_default>;
	pinctrl-1 = <&cdc_pdm_sleep>;

	internal-codec-playback-dai-link {
		link-name = "WCD";
		cpu {
			sound-dai = <&lpass MI2S_PRIMARY>;
		};
		codec {
			sound-dai = <&lpass_codec 0>, <&pm8916_codec 0>;
		};
	};

	internal-codec-capture-dai-link {
		link-name = "WCD-Capture";
		cpu {
			sound-dai = <&lpass MI2S_TERTIARY>;
		};
		codec {
			sound-dai = <&lpass_codec 1>, <&pm8916_codec 1>;
		};
	};
};

/*
 * Line names are taken from the schematic of T2, Ver X03.
 * July 14, 2018. Page 4 in particular.
 */
&tlmm {
	gpio-line-names =
		"APQ_UART1_TX",		/* GPIO_0 */
		"APQ_UART1_RX",
		"APQ_I2C1_SDA",
		"APQ_I2C1_SCL",
		"APQ_UART2_TX_1V8",
		"APQ_UART2_RX_1V8",
		"APQ_I2C2_SDA",
		"APQ_I2C2_SCL",
		"NC",
		"APQ_LCD_IOVCC_EN",
		"APQ_I2C3_SDA",		/* GPIO_10 */
		"APQ_I2C3_SCL",
		"TOUCH_RST_1V8_L",
		"NC",
		"APQ_I2C4_SDA",
		"APQ_I2C4_SCL",
		"APQ_ID5",
		"USB_DISCONNECT",
		"APQ_I2C5_SDA",
		"APQ_I2C5_SCL",
		"APQ_USBC_SPI_MOSI",	/* GPIO_20 */
		"APQ_USBC_SPI_MISO",
		"APQ_USBC_SPI_SS_L",
		"APQ_USBC_SPI_CLK",
		"APQ_LCD_TE0",
		"APQ_LCD_RST_L",
		"NC",
		"NC",
		"ACCELEROMETER_INT1",
		"APQ_CAM_I2C0_SDA",
		"APQ_CAM_I2C0_SCL",	/* GPIO_30 */
		"ACCELEROMETER_INT2",
		"NC",
		"NC",
		"NC",
		"APQ_K21_RST_1V8_L",
		"NC",
		"APQ_EDL_1V8",
		"TP145",
		"BT_SSBI",
		"NC",			/* GPIO_40 */
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",
		"BT_CTRL",
		"BT_DAT",
		"PWR_GPIO_IN",
		"PWR_GPIO_OUT",		/* GPIO_50 */
		"CARD_DET_MLB_L",
		"HALL_SENSOR",
		"TP63",
		"TP64",
		"TP65",
		"NC",
		"NC",
		"NC",
		"NC",
		"NC",			/* GPIO_60 */
		"NC",
		"APQ_K21_GPIO0_1V8",
		"CDC_PDM_CLK",
		"CDC_PDM_SYNC",
		"CDC_PDM_TX",
		"CDC_PDM_RX0",
		"CDC_PDM_RX1",
		"CDC_PDM_RX2",
		"APQ_K21_GPIO1_1V8",
		"NC",			/* GPIO_70 */
		"APQ_HUB_SEL_1V8",
		"APQ_K21_GPIO2_1V8",
		"APQ_K21_GPIO3_1V8",
		"APQ_ID0",
		"APQ_ID1",
		"APQ_ID2",
		"APQ_ID3",
		"APQ_ID4",
		"APQ_HUB_SUSP_IND",
		"BOOT_CONFIG_0",	/* GPIO_80 */
		"BOOT_CONFIG_1",
		"BOOT_CONFIG_2",
		"BOOT_CONFIG_3",
		"NC",
		"NC",
		"APQ_LCD_AVDD_EN",
		"APQ_LCD_AVEE_EN",
		"TP70",
		"NC",
		"APQ_DEBUG0",		/* GPIO_90 */
		"APQ_DEBUG1",
		"APQ_DEBUG2",
		"APQ_DEBUG3",
		"TP165",
		"NC",
		"APQ_LNA_PWR_EN",
		"NC",
		"APQ_LCD_BL_EN",
		"NC",
		"APQ_LCD_ID0",		/* GPIO_100 */
		"APQ_LCD_ID1",
		"USBC_GPIO5_1V8",
		"NC",
		"NC",
		"NC",
		"APQ_HUB_RST_1V8_L",
		"USBC_I2C_IRQ_1V8_L",
		"SPE_PWR_EN",
		"NC",
		"APQ_USB_ID",		/* GPIO_110 */
		"APQ_EXT_BUCK_VSEL",
		"APQ_USB_ID_OUT",
		"NC",
		"PRNT_RST_L",
		"APQ_CRQ_I2C_RDY_1V8",
		"TYPEC_RST_1V8_H",
		"CHG_BACKPWR_EN",
		"CHG_PROCHOT_L",
		"NC",
		"USBC_GPIO7_1V8",	/* GPIO_120 */
		"NC";

	blsp_uart1_default: blsp-uart1-default-state {
		pins = "gpio0", "gpio1";
		function = "blsp_uart1";
		drive-strength = <16>;
		bias-disable;
	};

	blsp_uart1_sleep: blsp-uart1-sleep-state {
		pins = "gpio0", "gpio1";
		function = "gpio";
		drive-strength = <2>;
		bias-pull-down;
	};

	pinctrl_backlight: backlight-state {
		pins = "gpio98";
		function = "gpio";
	};

	pinctrl_lcd_avdd_reg: lcd-avdd-reg-state {
		pins = "gpio86";
		function = "gpio";
	};

	pinctrl_lcd_avee_reg: lcd-avee-reg-state {
		pins = "gpio87";
		function = "gpio";
	};

	pinctrl_lcd_iovcc_reg: lcd-iovcc-reg-state {
		pins = "gpio9";
		function = "gpio";
	};

	pinctrl_lcd_rst: lcd-rst-state {
		pins = "gpio25";
		function = "gpio";
	};

	pinctrl_otg_default: otg-default-state {
		function = "gpio";
		pins = "gpio17";
		output-high;
	};

	pinctrl_otg_device: otg-device-state {
		function = "gpio";
		pins = "gpio17";
		output-low;
	};

	pinctrl_otg_host: otg-host-state {
		function = "gpio";
		pins = "gpio17";
		output-low;
	};

	typec_irq: typec-irq-state {
		function = "gpio";
		pins = "gpio107";
		bias-pull-up;
	};
};

&usb {
	pinctrl-names = "default", "host", "device";
	pinctrl-0 = <&pinctrl_otg_default>;
	pinctrl-1 = <&pinctrl_otg_host>;
	pinctrl-2 = <&pinctrl_otg_device>;
	usb-role-switch;
	status = "okay";

	port {
		otg_ep: endpoint {
			remote-endpoint = <&typec_ep>;
		};
	};
};

&wcnss {
	status = "okay";
};

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

&wcnss_mem {
	status = "okay";
};
