/* 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/ "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;
};

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