/* 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.
 */

/*
 * Only 8926-specific property overrides should be placed inside this
 * file. Device definitions should be placed inside the msm8226.dtsi
 * file.
 */

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

/ {
	model = "Qualcomm MSM 8926";
	compatible = "qcom,msm8926";
};

&soc {
	qcom,mss@fc880000 {
		reg = <0xfc880000 0x100>,
		      <0xfd485000 0x400>,
		      <0xfc820000 0x20>,
		      <0xfc401680 0x4>;
		reg-names = "qdsp6_base", "halt_base", "rmb_base",
			    "restart_reg";
		vdd_mss-supply = <&pm8226_s5>;
	};

	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-v1 =
			<         0 0>,
			< 384000000 2>,
			< 787200000 4>,
			<1190400000 7>;
		qcom,speed2-bin-v1 =
			<         0 0>,
			< 384000000 2>,
			< 787200000 4>,
			<1401600000 10>;
		qcom,speed1-bin-v1 =
			<         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-v1 =
			<         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>;
	};

	qcom,msm-thermal {
		qcom,cpu-sensors = "tsens_tz_sensor5", "tsens_tz_sensor5",
				"tsens_tz_sensor1", "tsens_tz_sensor1";
	};

	qcom,mpm@fc4281d0 {
		qcom,gpio-map = <3  1>,
			<4  4 >,
			<5  5 >,
			<6  9 >,
			<7  13>,
			<8  17>,
			<9  21>,
			<10  27>,
			<11  29>,
			<12  31>,
			<13  33>,
			<14  35>,
			<15  37>,
			<16  38>,
			<17  39>,
			<18  41>,
			<19  46>,
			<20  48>,
			<21  49>,
			<22  50>,
			<23  51>,
			<24  52>,
			<25  54>,
			<26  62>,
			<27  63>,
			<28  64>,
			<29  65>,
			<30  66>,
			<31  67>,
			<32  68>,
			<33  69>,
			<34  71>,
			<35  72>,
			<36  106>,
			<37  107>,
			<38  108>,
			<39  109>,
			<40  110>,
			<41  119>,
			<54  111>,
			<55  113>;
	};
};

&apc_vreg_corner {
	qcom,cpr-up-threshold = <0>;
	qcom,cpr-down-threshold = <2>;
	regulator-min-microvolt = <1>;
	regulator-max-microvolt = <14>;
	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>;
	qcom,cpr-quotient-adjustment = <0 72 72>;
};

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

&msmgpio {
	ngpio = <121>;
};

&memory_hole {
	qcom,memblock-remove = <0x08000000 0x7500000
				0x0fa00000 0x500000>; /* Address and size of the hole */
};

&hsic_host {
	interrupt-map = <0 &intc 0 136 0
		1 &intc 0 148 0
		2 &msmgpio 119 0x8>;
	hsic,strobe-gpio = <&msmgpio 119 0x00>;
	hsic,data-gpio = <&msmgpio 120 0x00>;
};
