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

/include/ "msm8226.dtsi"
/include/ "msm8226-v2-pm.dtsi"

/ {
	qcom,msm-id = <145 0x20000>,
		      <158 0x20000>,
		      <159 0x20000>,
		      <198 0x20000>,
		      <205 0x20000>,
		      <220 0x20000>,
		      <221 0x20000>,
		      <222 0x20000>,
		      <223 0x20000>;
};

&apc_vreg_corner {
	regulator-min-microvolt = <1>;
	regulator-max-microvolt = <14>;
	qcom,cpr-up-threshold = <0>;
	qcom,cpr-down-threshold = <5>;
	qcom,cpr-corner-map = <1 1 2 2 3 3 3 3 3 3 3 3 3 3>;
	qcom,pvs-version-fuse-sel = <22 4 2 0>;
	qcom,cpr-corner-frequency-map =
			<1 300000000>,
			<2 384000000>,
			<3 600000000>,
			<4 787200000>,
			<5 998400000>,
			<6 1094400000>,
			<7 1190400000>,
			<8 1305600000>,
			<9 1344000000>,
			<10 1401600000>,
			<11 1497600000>,
			<12 1593600000>,
			<13 1689600000>,
			<14 1785600000>;
	qcom,cpr-speed-bin-max-corners =
			<0 2 2 4 7>,
			<1 2 2 4 12>,
			<2 2 2 4 10>,
			<5 2 2 4 14>;
	qcom,cpr-quot-adjust-scaling-factor-max = <650>;
};

&msm_gpu {
	/* Updated chip ID */
	qcom,chipid = <0x03000512>;
};

&soc {
	qcom,clock-a7@f9011050 {
		reg =	<0xf9011050 0x8>,
			<0xfc4b80b0 0x8>;
		reg-names = "rcg-base", "efuse";
		qcom,speed0-bin-v0 =
			<         0 0>,
			< 384000000 2>,
			< 787200000 4>,
			<1190400000 7>;
		qcom,speed0-bin-v2 =
			<         0 0>,
			< 384000000 2>,
			< 787200000 4>,
			<1190400000 7>;
		qcom,speed2-bin-v2 =
			<         0 0>,
			< 384000000 2>,
			< 787200000 4>,
			<1401600000 10>;
		qcom,speed1-bin-v2 =
			<         0 0>,
			< 384000000 2>,
			< 787200000 4>,
			< 998400000 5>,
			<1094400000 6>,
			<1190400000 7>,
			<1305600000 8>,
			<1344000000 9>,
			<1401600000 10>,
			<1497600000 11>,
			<1593600000 12>;
		qcom,speed5-bin-v2 =
			<         0 0>,
			< 384000000 2>,
			< 787200000 4>,
			< 998400000 5>,
			<1094400000 6>,
			<1190400000 7>,
			<1305600000 8>,
			<1344000000 9>,
			<1401600000 10>,
			<1497600000 11>,
			<1593600000 12>,
			<1689600000 13>,
			<1785600000 14>;
	};
};

&tsens {
	qcom,sensors = <6>;
	qcom,slope = <2901 2846 3038 2955 2901 2846>;
};
