/* Copyright (c) 2013, 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.
 */

/*
 * As a general rule, only version-specific property overrides should be placed
 * inside this file. However, device definitions should be placed inside the
 * msm8974.dtsi file.
 */

/include/ "msm8974.dtsi"

/include/ "msm-pm8x41-rpm-regulator.dtsi"
/include/ "msm-pm8841.dtsi"
&spmi_bus {
	pm8941_lsid0: qcom,pm8941@0 {
		reg = <0x0>;
	};
	pm8941_lsid1: qcom,pm8941@1 {
		reg = <0x1>;
	};
};
/include/ "msm-pm8941.dtsi"
/include/ "msm8974-regulator.dtsi"
/include/ "msm8974-clock.dtsi"

/include/ "msm8974-v1-iommu.dtsi"
/include/ "msm8974-v1-iommu-domains.dtsi"
/include/ "msm8974-v1-pm.dtsi"

&soc {
	android_usb@fc42b0c8 {
		compatible = "qcom,android-usb";
		reg = <0xfc42b0c8 0xc8>;
		qcom,android-usb-swfi-latency = <1>;
	};

	qcom,msm-imem@fc42b000 {
		compatible = "qcom,msm-imem";
		reg = <0xfc42b000 0x1000>; /* Address and size of IMEM */
	};
};

&tsens {
	qcom,calibration-less-mode;
};

/* I2C clock frequency overrides */
&i2c_0 {
	qcom,i2c-src-freq = <19200000>;
};

&i2c_2 {
	qcom,i2c-src-freq = <19200000>;
};

/* CoreSight */
&tmc_etr {
	qcom,reset-flush-race;
	qcom,byte-cntr-absent;
};

&stm {
	qcom,write-64bit;
};

&mdss_mdp {
	qcom,mdss-pingpong-off = <0x00021B00 0x00021C00 0x00021D00>;
};

&msm_vidc {
	qcom,vidc-cp-map = <0x1000000 0x3f000000>;
	qcom,vidc-ns-map = <0x40000000 0x40000000>;
	qcom,load-freq-tbl = <979200 410000000>,
		<783360 410000000>,
		<489600 266670000>,
		<244800 133330000>;
	qcom,reg-presets = <0x80004 0x1>,
		<0x80178 0x00001FFF>,
		<0x8017c 0x1FFF1FFF>,
		<0x800b0 0x10101001>,
		<0x800b4 0x10101010>,
		<0x800b8 0x10101010>,
		<0x800bc 0x00000010>,
		<0x800c0 0x1010100f>,
		<0x800c4 0x10101010>,
		<0x800c8 0x10101010>,
		<0x800cc 0x00000010>,
		<0x800d0 0x00001010>,
		<0x800d4 0x00001010>,
		<0x800f0 0x00000030>,
		<0x800d8 0x00000707>,
		<0x800dc 0x00000707>,
		<0x80124 0x00000001>,
		<0xE0020 0x5555556>,
		<0xE0024 0x0>;
	qcom,bus-ports = <1>;
	qcom,enc-ocmem-ab-ib = <0 0>,
		<138200 1222000>,
		<414700 1222000>,
		<940000 2444000>,
		<1880000 2444000>,
		<3008000 3910400>,
		<3760000 4888000>;
	qcom,dec-ocmem-ab-ib = <0 0>,
		<176900 1556640>,
		<456200 1556640>,
		<864800 1556640>,
		<1729600 3113280>,
		<2767360 4981248>,
		<3459200 6226560>;
	qcom,enc-ddr-ab-ib = <0 0>,
		<60000 664950>,
		<181000 664950>,
		<403000 664950>,
		<806000 1329900>,
		<1289600 2127840>,
		<161200 6400000>;
	qcom,dec-ddr-ab-ib = <0 0>,
		<110000 909000>,
		<268000 909000>,
		<505000 909000>,
		<1010000 1818000>,
		<1616000 2908800>,
		<2020000 6400000>;
	qcom,iommu-groups = <&venus_domain_ns &venus_domain_cp>;
	qcom,iommu-group-buffer-types = <0xfff 0x1ff>;
	qcom,buffer-type-tz-usage-table = <0x1 0x1>,
					<0x7fe 0x2>;
};

&sfpb_spinlock {
	status = "disable";
};

&ldrex_spinlock {
	status = "ok";
};

&usb_otg {
	qcom,hsusb-otg-pnoc-errata-fix;
};

&usb3 {
	qcom,usbin-vadc = <&pm8941_vadc>;
};

&gdsc_venus {
	qcom,skip-logic-collapse;
	qcom,retain-periph;
	qcom,retain-mem;
};

&gdsc_mdss {
	qcom,skip-logic-collapse;
	qcom,retain-periph;
	qcom,retain-mem;
};

&gdsc_oxili_gx {
	qcom,retain-mem;
	qcom,retain-periph;
};

&krait_regulator_pmic {
	status = "ok";

	qcom,ctl@2000 {
		status = "ok";
	};

	qcom,ps@2100 {
		status = "ok";
	};

	qcom,freq@2200 {
		status = "ok";
	};
};
