/*
 * 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"
#include "sdm429-bg-soc.dtsi"

/ {
	model = "Qualcomm Technologies, Inc. SDA429 BG DVT2 WTP Overlay";
	compatible = "qcom,sdm429w-qrd", "qcom,sda429w", "qcom,qrd";
	qcom,msm-id = <437 0x0>;
	qcom,board-id = <0x00010b 0xA>;
	qcom,pmic-id = <0x0002001b 0x0 0x0 0x0>;
};

&modem_mem {
	reg = <0x0 0x86800000 0x0 0x1F00000>;
};

&adsp_fw_mem {
	reg = <0x0 0x88700000 0x0 0x1500000>;
};

&wcnss_fw_mem {
	reg = <0x0 0x89c00000 0x0 0x700000>;
};

&mdss_dsi0 {
	qcom,dsi-pref-prim-pan = <&dsi_auo_416p_amoled_cmd>;
	/delete-property/ vdd-supply;
	pinctrl-names = "mdss_default", "mdss_sleep";
	pinctrl-0 = <&mdss_te_active>;
	pinctrl-1 = <&mdss_te_suspend>;
	vddio-supply = <&L11A>;
	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   */
};
