/* 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>,
					<0x1fe 0x2>;
};

&sfpb_spinlock {
	status = "disable";
};

&ldrex_spinlock {
	status = "ok";
};

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

&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";
	};
};
