/*
 * Copyright (c) 2019-2020, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

/dts-v1/;
/plugin/;

#include "sdm429-spyro-qrd-evt.dtsi"

/ {
	model = "Qualcomm Technologies, Inc. SDM429 QRD BG WTP Overlay";
	compatible = "qcom,sdm429w-qrd", "qcom,sdm429w", "qcom,qrd";
	qcom,msm-id = <416 0x0>;
	qcom,board-id = <0x00010b 8>;
	qcom,pmic-id = <0x0002001b 0x0 0x0 0x0>;
};

&soc {

	qcom,blackghost {
		compatible = "qcom,pil-blackghost";
		qcom,pil-force-shutdown;
		qcom,firmware-name = "bg-wear";
		/* GPIO inputs from blackghost */
		qcom,bg2ap-status-gpio = <&tlmm 44 0>;
		qcom,bg2ap-errfatal-gpio = <&tlmm 72 0>;
		/* GPIO output to blackghost */
		qcom,ap2bg-status-gpio = <&tlmm 61 0>;
		qcom,ap2bg-errfatal-gpio = <&tlmm 62 0>;
	};

	qcom,msm-ssc-sensors {
		compatible = "qcom,msm-ssc-sensors";
	};

	qcom,glink-bgcom-xprt-bg {
		compatible = "qcom,glink-bgcom-xprt";
		label = "bg";
		qcom,qos-config = <&glink_qos_bg>;
		qcom,ramp-time = <0x10>,
				     <0x20>,
				     <0x30>,
				     <0x40>;
	};

	glink_qos_bg: qcom,glink-qos-config-bg {
		compatible = "qcom,glink-qos-config";
		qcom,flow-info = <0x80 0x0>,
				 <0x70 0x1>,
				 <0x60 0x2>,
				 <0x50 0x3>;
		qcom,mtu-size = <0x800>;
		qcom,tput-stats-cycle = <0xa>;
	};

	qcom,glink_pkt {
		compatible = "qcom,glinkpkt";

		qcom,glinkpkt-bg-daemon {
			qcom,glinkpkt-transport = "bgcom";
			qcom,glinkpkt-edge = "bg";
			qcom,glinkpkt-ch-name = "bg-daemon";
			qcom,glinkpkt-dev-name = "glink_pkt_bg_daemon";
		};

		qcom,glinkpkt-bg-daemon-ctrl {
			qcom,glinkpkt-transport = "bgcom";
			qcom,glinkpkt-edge = "bg";
			qcom,glinkpkt-ch-name = "bg-daemon-ctl";
			qcom,glinkpkt-dev-name = "glink_pkt_bg_daemon_ctrl";
		};

		qcom,glinkpkt-bg-display-ctrl {
			qcom,glinkpkt-transport = "bgcom";
			qcom,glinkpkt-edge = "bg";
			qcom,glinkpkt-ch-name = "display-ctrl";
			qcom,glinkpkt-dev-name = "glink_pkt_bg_display_ctrl";
		};

		qcom,glinkpkt-bg-display-data {
			qcom,glinkpkt-transport = "bgcom";
			qcom,glinkpkt-edge = "bg";
			qcom,glinkpkt-ch-name = "display-data";
			qcom,glinkpkt-dev-name = "glink_pkt_bg_display_data";
		};

		qcom,glinkpkt-bg-rsb-ctrl {
			qcom,glinkpkt-transport = "bgcom";
			qcom,glinkpkt-edge = "bg";
			qcom,glinkpkt-ch-name = "RSB_CTRL";
			qcom,glinkpkt-dev-name = "glink_pkt_bg_rsb_ctrl";
		};

		qcom,glinkpkt-bg-sso-ctrl {
			qcom,glinkpkt-transport = "bgcom";
			qcom,glinkpkt-edge = "bg";
			qcom,glinkpkt-ch-name = "sso-ctrl";
			qcom,glinkpkt-dev-name = "glink_pkt_bg_sso_ctrl";
		};

		qcom,glinkpkt-bg-buzzer-ctrl {
			qcom,glinkpkt-transport = "bgcom";
			qcom,glinkpkt-edge = "bg";
			qcom,glinkpkt-ch-name = "buzzer-ctrl";
			qcom,glinkpkt-dev-name = "glink_pkt_bg_buzzer_ctrl";
		};
	};

	spi_3: spi@78b7000 {  /* BLSP1 QUP3*/
		status = "ok";
		qcom,bg-spi {
			compatible = "qcom,bg-spi";
			reg = <0>;
			spi-max-frequency = <16000000>;
			interrupt-parent = <&tlmm>;
			qcom,irq-gpio = <&tlmm 43 1>;
		};
	};

	i2c_3: i2c@78b7000 { /* BLSP1 QUP3 */
		status = "disabled";
	};

	qcom,bg-rsb {
		compatible = "qcom,bg-rsb";
		vdd-ldo1-supply = <&pm660_l11>;
		qcom,bg-rsb-gpio = <&tlmm 40 1>;
		qcom,rsb-use-msm-gpio;
	};

	qcom,bg-daemon {
		compatible = "qcom,bg-daemon";
		qcom,bg-reset-gpio = <&pm660_gpios 5 0>;
		ssr-reg1-supply = <&pm660_l3>;
		ssr-reg2-supply = <&pm660_l9>;
	};
};

&mdss_dsi0 {
	qcom,dsi-pref-prim-pan = <&dsi_auo_416p_amoled_cmd>;
	/delete-property/ vdd-supply;
	vddio-supply = <&L11A>;
	pinctrl-names = "mdss_default", "mdss_sleep";
	pinctrl-0 = <&mdss_te_active>;
	pinctrl-1 = <&mdss_te_suspend>;
	qcom,platform-enable-gpio = <&pm660_gpios 12 0>;
};

&dsi_pm660_panel_pwr_supply {
	/delete-node/ qcom,panel-supply-entry@0;
};

&i2c_4 {
	status = "ok";
	tsc@24 {
		status = "disabled";
	};

	raydium_ts@39 {
		compatible = "raydium,raydium-ts";
		reg = <0x39>;
		interrupt-parent = <&tlmm>;
		interrupts = <13 0x2008>;
		vdd_ana-supply = <&pm660_l11>;
		vcc_i2c-supply = <&pm660_l13>;
		pinctrl-names = "pmx_ts_active","pmx_ts_suspend",
					"pmx_ts_release";
		pinctrl-0 = <&ts_int_active &ts_reset_active>;
		pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;
		pinctrl-2 = <&ts_release>;
		raydium,reset-gpio = <&tlmm 64 0x00>;
		raydium,irq-gpio = <&tlmm 65 0x00>;
		raydium,num-max-touches = <2>;
		raydium,soft-reset-delay-ms = <50>;
		raydium,hard-reset-delay-ms = <100>;
		raydium,x_max = <416>;
		raydium,y_max = <416>;
		raydium,display-coords= <0  0 416 416>;
		raydium,fw_id = <0x2202>;
	};
};

&usb_otg {
	HSUSB_3p3-supply = <&L16A>;
};

&msm_dig_codec {
	cdc-vdd-digital-supply = <&pm660_l11>;
};

&ext_smart_pa {
	dvdd-supply = <&pm660_l11>;
};

&firmware {
	android {
		fstab {
			system {
				status = "disabled";
			};
		};
	};
};

&msm_gpu {
	qcom,initial-pwrlevel = <0>;
	qcom,gpu-pwrlevels {
		qcom,gpu-pwrlevel@0 {
			reg = <0>;
			qcom,gpu-freq = <320000000>;
			qcom,bus-freq = <2>;
			qcom,bus-min = <2>;
			qcom,bus-max = <2>;
		};
		qcom,gpu-pwrlevel@1{
			reg = <1>;
			qcom,gpu-freq = <19200000>;
			qcom,bus-freq = <0>;
			qcom,bus-min = <0>;
			qcom,bus-max = <0>;
		};
	};
};

&msm_cpufreq {
	qcom,cpufreq-table =
		<  960000 >,
		< 1305600 >,
		< 1497600 >,
		< 1708800 >;
};
&cpubw {
	qcom,bw-tbl =
		<  1611 /*  211.2 MHz */ >,     /*Low SVS*/
		<  2929 /*  384   MHz */ >,     /* SVS */
		<  5053 /*  662.4 MHz */ >,     /* SVS+  */
		<  5712 /*  748.8 MHz */ >;     /* NOM   */
};
