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

qcom,mtp-3000mah {
	qcom,fcc-mah = <3000>;
	qcom,default-rbatt-mohm = <113>;
	qcom,max-voltage-uv = <4200000>;
	qcom,rbatt-capacitive-mohm = <50>;
	qcom,v-cutoff-uv = <3400000>;
	qcom,chg-term-ua = <200000>;
	qcom,batt-id-kohm = <300>;

	qcom,fcc-temp-lut {
		qcom,lut-col-legend = <(-20) 0 25 40 60>;
		qcom,lut-data = <3030 3033 3037 3035 3031>;
	};

	qcom,pc-temp-ocv-lut {
		qcom,lut-col-legend = <(-20) 0 25 40 60>;
		qcom,lut-row-legend = <100 95 90 85 80>,
				<75 70 65 60 55>,
				<50 45 40 35 30>,
				<25 20 16 13 11>,
				<10 9 8 7 6>,
				<5 4 3 2 1>,
				<0>;
		qcom,lut-data = <4191 4188 4183 4179 4174>,
				<4106 4125 4127 4125 4121>,
				<4046 4082 4082 4080 4077>,
				<3966 4038 4044 4040 4035>,
				<3922 3983 3994 3998 3997>,
				<3886 3949 3966 3966 3962>,
				<3856 3908 3937 3935 3931>,
				<3832 3875 3908 3907 3903>,
				<3814 3847 3874 3878 3875>,
				<3799 3826 3831 3832 3830>,
				<3787 3807 3811 3811 3809>,
				<3775 3793 3795 3795 3793>,
				<3764 3782 3783 3783 3781>,
				<3752 3775 3773 3772 3769>,
				<3739 3768 3766 3762 3755>,
				<3725 3756 3756 3747 3733>,
				<3710 3732 3734 3725 3711>,
				<3696 3707 3705 3697 3684>,
				<3681 3695 3686 3678 3667>,
				<3667 3690 3684 3676 3665>,
				<3658 3688 3683 3675 3664>,
				<3646 3685 3681 3674 3663>,
				<3631 3682 3679 3673 3660>,
				<3612 3677 3676 3669 3655>,
				<3589 3667 3666 3660 3639>,
				<3560 3643 3636 3630 3599>,
				<3523 3600 3586 3581 3546>,
				<3474 3537 3518 3516 3477>,
				<3394 3446 3425 3427 3379>,
				<3257 3306 3273 3283 3213>,
				<3000 3000 3000 3000 3000>;
	};

	qcom,rbatt-sf-lut {
		qcom,lut-col-legend = <(-20) 0 25 40 60>;
		qcom,lut-row-legend = <100 95 90 85 80>,
				<75 70 65 60 55>,
				<50 45 40 35 30>,
				<25 20 16 13 11>,
				<10 9 8 7 6>,
				<5 4 3 2 1>;
		qcom,lut-data = <1025 208 100 85 80>,
				<1025 208 100 85 80>,
				<1032 225 103 87 81>,
				<959 249 107 91 82>,
				<954 249 109 92 84>,
				<953 255 117 94 84>,
				<957 230 123 98 87>,
				<968 216 134 102 91>,
				<983 212 138 112 95>,
				<1002 213 103 89 82>,
				<1030 215 100 86 81>,
				<1066 219 101 89 83>,
				<1115 224 104 92 85>,
				<1182 234 106 94 86>,
				<1263 246 108 92 84>,
				<1357 257 107 87 81>,
				<1464 261 102 85 80>,
				<1564 256 101 84 80>,
				<1637 268 100 84 80>,
				<1580 276 102 87 81>,
				<1617 285 104 87 82>,
				<1670 298 107 91 82>,
				<1725 315 108 92 83>,
				<1785 338 112 92 83>,
				<1850 361 111 91 82>,
				<1921 378 108 89 84>,
				<2000 394 112 92 87>,
				<2119 430 121 99 94>,
				<2795 497 144 114 104>,
				<8769 1035 672 322 234>;
	};
};
