/* 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,cpr-quot-adjust-table =
				<1 5 450>,
				<1 6 375>,
				<1 7 300>,
				<1 8 225>,
				<1 9 187>,
				<1 10 150>,
				<1 11 75>;
};

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