1c8aee3f4SLinus Walleij // SPDX-License-Identifier: GPL-2.0
2c8aee3f4SLinus Walleij 
3c8aee3f4SLinus Walleij /*
4c8aee3f4SLinus Walleij  * Battery data and characteristics for Samsung SDI (Samsung Digital Interface)
5c8aee3f4SLinus Walleij  * batteries. The data is retrieved automatically into drivers using
6c8aee3f4SLinus Walleij  * the power_supply_get_battery_info() call.
7c8aee3f4SLinus Walleij  *
8c8aee3f4SLinus Walleij  * The BTI (battery type indicator) resistance in the code drops was very
9c8aee3f4SLinus Walleij  * unreliable. The resistance listed here was obtained by simply measuring
10c8aee3f4SLinus Walleij  * the BTI resistance with a multimeter on the battery.
11c8aee3f4SLinus Walleij  */
12c8aee3f4SLinus Walleij #include <linux/module.h>
13c8aee3f4SLinus Walleij #include <linux/power_supply.h>
14c8aee3f4SLinus Walleij #include "samsung-sdi-battery.h"
15c8aee3f4SLinus Walleij 
16c8aee3f4SLinus Walleij struct samsung_sdi_battery {
17c8aee3f4SLinus Walleij 	char *compatible;
18c8aee3f4SLinus Walleij 	char *name;
19c8aee3f4SLinus Walleij 	struct power_supply_battery_info info;
20c8aee3f4SLinus Walleij };
21c8aee3f4SLinus Walleij 
22c8aee3f4SLinus Walleij /*
23c8aee3f4SLinus Walleij  * Voltage to internal resistance tables. The internal resistance varies
24c8aee3f4SLinus Walleij  * depending on the VBAT voltage, so look this up from a table. Different
25c8aee3f4SLinus Walleij  * tables apply depending on whether we are charging or not.
26c8aee3f4SLinus Walleij  */
27c8aee3f4SLinus Walleij 
28c8aee3f4SLinus Walleij static struct power_supply_vbat_ri_table samsung_vbat2res_discharging_eb_l1m7flu[] = {
29c8aee3f4SLinus Walleij 	{ .vbat_uv = 4240000, .ri_uohm = 160000 },
30c8aee3f4SLinus Walleij 	{ .vbat_uv = 4210000, .ri_uohm = 179000 },
31c8aee3f4SLinus Walleij 	{ .vbat_uv = 4180000, .ri_uohm = 183000 },
32c8aee3f4SLinus Walleij 	{ .vbat_uv = 4160000, .ri_uohm = 184000 },
33c8aee3f4SLinus Walleij 	{ .vbat_uv = 4140000, .ri_uohm = 191000 },
34c8aee3f4SLinus Walleij 	{ .vbat_uv = 4120000, .ri_uohm = 204000 },
35c8aee3f4SLinus Walleij 	{ .vbat_uv = 4076000, .ri_uohm = 220000 },
36c8aee3f4SLinus Walleij 	{ .vbat_uv = 4030000, .ri_uohm = 227000 },
37c8aee3f4SLinus Walleij 	{ .vbat_uv = 3986000, .ri_uohm = 215000 },
38c8aee3f4SLinus Walleij 	{ .vbat_uv = 3916000, .ri_uohm = 221000 },
39c8aee3f4SLinus Walleij 	{ .vbat_uv = 3842000, .ri_uohm = 259000 },
40c8aee3f4SLinus Walleij 	{ .vbat_uv = 3773000, .ri_uohm = 287000 },
41c8aee3f4SLinus Walleij 	{ .vbat_uv = 3742000, .ri_uohm = 283000 },
42c8aee3f4SLinus Walleij 	{ .vbat_uv = 3709000, .ri_uohm = 277000 },
43c8aee3f4SLinus Walleij 	{ .vbat_uv = 3685000, .ri_uohm = 297000 },
44c8aee3f4SLinus Walleij 	{ .vbat_uv = 3646000, .ri_uohm = 310000 },
45c8aee3f4SLinus Walleij 	{ .vbat_uv = 3616000, .ri_uohm = 331000 },
46c8aee3f4SLinus Walleij 	{ .vbat_uv = 3602000, .ri_uohm = 370000 },
47c8aee3f4SLinus Walleij 	{ .vbat_uv = 3578000, .ri_uohm = 350000 },
48c8aee3f4SLinus Walleij 	{ .vbat_uv = 3553000, .ri_uohm = 321000 },
49c8aee3f4SLinus Walleij 	{ .vbat_uv = 3503000, .ri_uohm = 322000 },
50c8aee3f4SLinus Walleij 	{ .vbat_uv = 3400000, .ri_uohm = 269000 },
51c8aee3f4SLinus Walleij 	{ .vbat_uv = 3360000, .ri_uohm = 328000 },
52c8aee3f4SLinus Walleij 	{ .vbat_uv = 3330000, .ri_uohm = 305000 },
53c8aee3f4SLinus Walleij 	{ .vbat_uv = 3300000, .ri_uohm = 339000 },
54c8aee3f4SLinus Walleij };
55c8aee3f4SLinus Walleij 
56c8aee3f4SLinus Walleij static struct power_supply_vbat_ri_table samsung_vbat2res_charging_eb_l1m7flu[] = {
57c8aee3f4SLinus Walleij 	{ .vbat_uv = 4302000, .ri_uohm = 230000 },
58c8aee3f4SLinus Walleij 	{ .vbat_uv = 4276000, .ri_uohm = 345000 },
59c8aee3f4SLinus Walleij 	{ .vbat_uv = 4227000, .ri_uohm = 345000 },
60c8aee3f4SLinus Walleij 	{ .vbat_uv = 4171000, .ri_uohm = 346000 },
61c8aee3f4SLinus Walleij 	{ .vbat_uv = 4134000, .ri_uohm = 311000 },
62c8aee3f4SLinus Walleij 	{ .vbat_uv = 4084000, .ri_uohm = 299000 },
63c8aee3f4SLinus Walleij 	{ .vbat_uv = 4052000, .ri_uohm = 316000 },
64c8aee3f4SLinus Walleij 	{ .vbat_uv = 4012000, .ri_uohm = 309000 },
65c8aee3f4SLinus Walleij 	{ .vbat_uv = 3961000, .ri_uohm = 303000 },
66c8aee3f4SLinus Walleij 	{ .vbat_uv = 3939000, .ri_uohm = 280000 },
67c8aee3f4SLinus Walleij 	{ .vbat_uv = 3904000, .ri_uohm = 261000 },
68c8aee3f4SLinus Walleij 	{ .vbat_uv = 3850000, .ri_uohm = 212000 },
69c8aee3f4SLinus Walleij 	{ .vbat_uv = 3800000, .ri_uohm = 232000 },
70c8aee3f4SLinus Walleij 	{ .vbat_uv = 3750000, .ri_uohm = 177000 },
71c8aee3f4SLinus Walleij 	{ .vbat_uv = 3712000, .ri_uohm = 164000 },
72c8aee3f4SLinus Walleij 	{ .vbat_uv = 3674000, .ri_uohm = 161000 },
73c8aee3f4SLinus Walleij 	{ .vbat_uv = 3590000, .ri_uohm = 164000 },
74c8aee3f4SLinus Walleij };
75c8aee3f4SLinus Walleij 
76c8aee3f4SLinus Walleij static struct power_supply_vbat_ri_table samsung_vbat2res_discharging_eb425161la[] = {
77c8aee3f4SLinus Walleij 	{ .vbat_uv = 4240000, .ri_uohm = 160000 },
78c8aee3f4SLinus Walleij 	{ .vbat_uv = 4210000, .ri_uohm = 179000 },
79c8aee3f4SLinus Walleij 	{ .vbat_uv = 4180000, .ri_uohm = 183000 },
80c8aee3f4SLinus Walleij 	{ .vbat_uv = 4160000, .ri_uohm = 184000 },
81c8aee3f4SLinus Walleij 	{ .vbat_uv = 4140000, .ri_uohm = 191000 },
82c8aee3f4SLinus Walleij 	{ .vbat_uv = 4120000, .ri_uohm = 204000 },
83c8aee3f4SLinus Walleij 	{ .vbat_uv = 4080000, .ri_uohm = 200000 },
84c8aee3f4SLinus Walleij 	{ .vbat_uv = 4027000, .ri_uohm = 202000 },
85c8aee3f4SLinus Walleij 	{ .vbat_uv = 3916000, .ri_uohm = 221000 },
86c8aee3f4SLinus Walleij 	{ .vbat_uv = 3842000, .ri_uohm = 259000 },
87c8aee3f4SLinus Walleij 	{ .vbat_uv = 3800000, .ri_uohm = 262000 },
88c8aee3f4SLinus Walleij 	{ .vbat_uv = 3742000, .ri_uohm = 263000 },
89c8aee3f4SLinus Walleij 	{ .vbat_uv = 3709000, .ri_uohm = 277000 },
90c8aee3f4SLinus Walleij 	{ .vbat_uv = 3685000, .ri_uohm = 312000 },
91c8aee3f4SLinus Walleij 	{ .vbat_uv = 3668000, .ri_uohm = 258000 },
92c8aee3f4SLinus Walleij 	{ .vbat_uv = 3660000, .ri_uohm = 247000 },
93c8aee3f4SLinus Walleij 	{ .vbat_uv = 3636000, .ri_uohm = 293000 },
94c8aee3f4SLinus Walleij 	{ .vbat_uv = 3616000, .ri_uohm = 331000 },
95c8aee3f4SLinus Walleij 	{ .vbat_uv = 3600000, .ri_uohm = 349000 },
96c8aee3f4SLinus Walleij 	{ .vbat_uv = 3593000, .ri_uohm = 345000 },
97c8aee3f4SLinus Walleij 	{ .vbat_uv = 3585000, .ri_uohm = 344000 },
98c8aee3f4SLinus Walleij 	{ .vbat_uv = 3572000, .ri_uohm = 336000 },
99c8aee3f4SLinus Walleij 	{ .vbat_uv = 3553000, .ri_uohm = 321000 },
100c8aee3f4SLinus Walleij 	{ .vbat_uv = 3517000, .ri_uohm = 336000 },
101c8aee3f4SLinus Walleij 	{ .vbat_uv = 3503000, .ri_uohm = 322000 },
102c8aee3f4SLinus Walleij 	{ .vbat_uv = 3400000, .ri_uohm = 269000 },
103c8aee3f4SLinus Walleij 	{ .vbat_uv = 3360000, .ri_uohm = 328000 },
104c8aee3f4SLinus Walleij 	{ .vbat_uv = 3330000, .ri_uohm = 305000 },
105c8aee3f4SLinus Walleij 	{ .vbat_uv = 3300000, .ri_uohm = 339000 },
106c8aee3f4SLinus Walleij };
107c8aee3f4SLinus Walleij 
108c8aee3f4SLinus Walleij static struct power_supply_vbat_ri_table samsung_vbat2res_charging_eb425161la[] = {
109c8aee3f4SLinus Walleij 	{ .vbat_uv = 4345000, .ri_uohm = 230000 },
110c8aee3f4SLinus Walleij 	{ .vbat_uv = 4329000, .ri_uohm = 238000 },
111c8aee3f4SLinus Walleij 	{ .vbat_uv = 4314000, .ri_uohm = 225000 },
112c8aee3f4SLinus Walleij 	{ .vbat_uv = 4311000, .ri_uohm = 239000 },
113c8aee3f4SLinus Walleij 	{ .vbat_uv = 4294000, .ri_uohm = 235000 },
114c8aee3f4SLinus Walleij 	{ .vbat_uv = 4264000, .ri_uohm = 229000 },
115c8aee3f4SLinus Walleij 	{ .vbat_uv = 4262000, .ri_uohm = 228000 },
116c8aee3f4SLinus Walleij 	{ .vbat_uv = 4252000, .ri_uohm = 236000 },
117c8aee3f4SLinus Walleij 	{ .vbat_uv = 4244000, .ri_uohm = 234000 },
118c8aee3f4SLinus Walleij 	{ .vbat_uv = 4235000, .ri_uohm = 234000 },
119c8aee3f4SLinus Walleij 	{ .vbat_uv = 4227000, .ri_uohm = 238000 },
120c8aee3f4SLinus Walleij 	{ .vbat_uv = 4219000, .ri_uohm = 242000 },
121c8aee3f4SLinus Walleij 	{ .vbat_uv = 4212000, .ri_uohm = 239000 },
122c8aee3f4SLinus Walleij 	{ .vbat_uv = 4206000, .ri_uohm = 231000 },
123c8aee3f4SLinus Walleij 	{ .vbat_uv = 4201000, .ri_uohm = 231000 },
124c8aee3f4SLinus Walleij 	{ .vbat_uv = 4192000, .ri_uohm = 224000 },
125c8aee3f4SLinus Walleij 	{ .vbat_uv = 4184000, .ri_uohm = 238000 },
126c8aee3f4SLinus Walleij 	{ .vbat_uv = 4173000, .ri_uohm = 245000 },
127c8aee3f4SLinus Walleij 	{ .vbat_uv = 4161000, .ri_uohm = 244000 },
128c8aee3f4SLinus Walleij 	{ .vbat_uv = 4146000, .ri_uohm = 244000 },
129c8aee3f4SLinus Walleij 	{ .vbat_uv = 4127000, .ri_uohm = 228000 },
130c8aee3f4SLinus Walleij 	{ .vbat_uv = 4119000, .ri_uohm = 218000 },
131c8aee3f4SLinus Walleij 	{ .vbat_uv = 4112000, .ri_uohm = 215000 },
132c8aee3f4SLinus Walleij 	{ .vbat_uv = 4108000, .ri_uohm = 209000 },
133c8aee3f4SLinus Walleij 	{ .vbat_uv = 4102000, .ri_uohm = 214000 },
134c8aee3f4SLinus Walleij 	{ .vbat_uv = 4096000, .ri_uohm = 215000 },
135c8aee3f4SLinus Walleij 	{ .vbat_uv = 4090000, .ri_uohm = 215000 },
136c8aee3f4SLinus Walleij 	{ .vbat_uv = 4083000, .ri_uohm = 219000 },
137c8aee3f4SLinus Walleij 	{ .vbat_uv = 4078000, .ri_uohm = 208000 },
138c8aee3f4SLinus Walleij 	{ .vbat_uv = 4071000, .ri_uohm = 205000 },
139c8aee3f4SLinus Walleij 	{ .vbat_uv = 4066000, .ri_uohm = 208000 },
140c8aee3f4SLinus Walleij 	{ .vbat_uv = 4061000, .ri_uohm = 210000 },
141c8aee3f4SLinus Walleij 	{ .vbat_uv = 4055000, .ri_uohm = 212000 },
142c8aee3f4SLinus Walleij 	{ .vbat_uv = 4049000, .ri_uohm = 215000 },
143c8aee3f4SLinus Walleij 	{ .vbat_uv = 4042000, .ri_uohm = 212000 },
144c8aee3f4SLinus Walleij 	{ .vbat_uv = 4032000, .ri_uohm = 217000 },
145c8aee3f4SLinus Walleij 	{ .vbat_uv = 4027000, .ri_uohm = 220000 },
146c8aee3f4SLinus Walleij 	{ .vbat_uv = 4020000, .ri_uohm = 210000 },
147c8aee3f4SLinus Walleij 	{ .vbat_uv = 4013000, .ri_uohm = 214000 },
148c8aee3f4SLinus Walleij 	{ .vbat_uv = 4007000, .ri_uohm = 219000 },
149c8aee3f4SLinus Walleij 	{ .vbat_uv = 4003000, .ri_uohm = 229000 },
150c8aee3f4SLinus Walleij 	{ .vbat_uv = 3996000, .ri_uohm = 246000 },
151c8aee3f4SLinus Walleij 	{ .vbat_uv = 3990000, .ri_uohm = 245000 },
152c8aee3f4SLinus Walleij 	{ .vbat_uv = 3984000, .ri_uohm = 242000 },
153c8aee3f4SLinus Walleij 	{ .vbat_uv = 3977000, .ri_uohm = 236000 },
154c8aee3f4SLinus Walleij 	{ .vbat_uv = 3971000, .ri_uohm = 231000 },
155c8aee3f4SLinus Walleij 	{ .vbat_uv = 3966000, .ri_uohm = 229000 },
156c8aee3f4SLinus Walleij 	{ .vbat_uv = 3952000, .ri_uohm = 226000 },
157c8aee3f4SLinus Walleij 	{ .vbat_uv = 3946000, .ri_uohm = 222000 },
158c8aee3f4SLinus Walleij 	{ .vbat_uv = 3941000, .ri_uohm = 222000 },
159c8aee3f4SLinus Walleij 	{ .vbat_uv = 3936000, .ri_uohm = 217000 },
160c8aee3f4SLinus Walleij 	{ .vbat_uv = 3932000, .ri_uohm = 217000 },
161c8aee3f4SLinus Walleij 	{ .vbat_uv = 3928000, .ri_uohm = 212000 },
162c8aee3f4SLinus Walleij 	{ .vbat_uv = 3926000, .ri_uohm = 214000 },
163c8aee3f4SLinus Walleij 	{ .vbat_uv = 3922000, .ri_uohm = 209000 },
164c8aee3f4SLinus Walleij 	{ .vbat_uv = 3917000, .ri_uohm = 215000 },
165c8aee3f4SLinus Walleij 	{ .vbat_uv = 3914000, .ri_uohm = 212000 },
166c8aee3f4SLinus Walleij 	{ .vbat_uv = 3912000, .ri_uohm = 220000 },
167c8aee3f4SLinus Walleij 	{ .vbat_uv = 3910000, .ri_uohm = 226000 },
168c8aee3f4SLinus Walleij 	{ .vbat_uv = 3903000, .ri_uohm = 226000 },
169c8aee3f4SLinus Walleij 	{ .vbat_uv = 3891000, .ri_uohm = 222000 },
170c8aee3f4SLinus Walleij 	{ .vbat_uv = 3871000, .ri_uohm = 221000 },
171c8aee3f4SLinus Walleij 	{ .vbat_uv = 3857000, .ri_uohm = 219000 },
172c8aee3f4SLinus Walleij 	{ .vbat_uv = 3850000, .ri_uohm = 216000 },
173c8aee3f4SLinus Walleij 	{ .vbat_uv = 3843000, .ri_uohm = 212000 },
174c8aee3f4SLinus Walleij 	{ .vbat_uv = 3835000, .ri_uohm = 206000 },
175c8aee3f4SLinus Walleij 	{ .vbat_uv = 3825000, .ri_uohm = 217000 },
176c8aee3f4SLinus Walleij 	{ .vbat_uv = 3824000, .ri_uohm = 220000 },
177c8aee3f4SLinus Walleij 	{ .vbat_uv = 3820000, .ri_uohm = 237000 },
178c8aee3f4SLinus Walleij 	{ .vbat_uv = 3800000, .ri_uohm = 232000 },
179c8aee3f4SLinus Walleij 	{ .vbat_uv = 3750000, .ri_uohm = 177000 },
180c8aee3f4SLinus Walleij 	{ .vbat_uv = 3712000, .ri_uohm = 164000 },
181c8aee3f4SLinus Walleij 	{ .vbat_uv = 3674000, .ri_uohm = 161000 },
182c8aee3f4SLinus Walleij 	{ .vbat_uv = 3590000, .ri_uohm = 164000 },
183c8aee3f4SLinus Walleij };
184c8aee3f4SLinus Walleij 
185c8aee3f4SLinus Walleij static struct power_supply_vbat_ri_table samsung_vbat2res_discharging_eb425161lu[] = {
186c8aee3f4SLinus Walleij 	{ .vbat_uv = 4240000, .ri_uohm = 160000 },
187c8aee3f4SLinus Walleij 	{ .vbat_uv = 4210000, .ri_uohm = 179000 },
188c8aee3f4SLinus Walleij 	{ .vbat_uv = 4180000, .ri_uohm = 183000 },
189c8aee3f4SLinus Walleij 	{ .vbat_uv = 4160000, .ri_uohm = 184000 },
190c8aee3f4SLinus Walleij 	{ .vbat_uv = 4140000, .ri_uohm = 191000 },
191c8aee3f4SLinus Walleij 	{ .vbat_uv = 4120000, .ri_uohm = 204000 },
192c8aee3f4SLinus Walleij 	{ .vbat_uv = 4080000, .ri_uohm = 200000 },
193c8aee3f4SLinus Walleij 	{ .vbat_uv = 4027000, .ri_uohm = 202000 },
194c8aee3f4SLinus Walleij 	{ .vbat_uv = 3916000, .ri_uohm = 221000 },
195c8aee3f4SLinus Walleij 	{ .vbat_uv = 3842000, .ri_uohm = 259000 },
196c8aee3f4SLinus Walleij 	{ .vbat_uv = 3800000, .ri_uohm = 262000 },
197c8aee3f4SLinus Walleij 	{ .vbat_uv = 3742000, .ri_uohm = 263000 },
198c8aee3f4SLinus Walleij 	{ .vbat_uv = 3708000, .ri_uohm = 277000 },
199c8aee3f4SLinus Walleij 	{ .vbat_uv = 3684000, .ri_uohm = 272000 },
200c8aee3f4SLinus Walleij 	{ .vbat_uv = 3664000, .ri_uohm = 278000 },
201c8aee3f4SLinus Walleij 	{ .vbat_uv = 3655000, .ri_uohm = 285000 },
202c8aee3f4SLinus Walleij 	{ .vbat_uv = 3638000, .ri_uohm = 261000 },
203c8aee3f4SLinus Walleij 	{ .vbat_uv = 3624000, .ri_uohm = 259000 },
204c8aee3f4SLinus Walleij 	{ .vbat_uv = 3616000, .ri_uohm = 266000 },
205c8aee3f4SLinus Walleij 	{ .vbat_uv = 3597000, .ri_uohm = 278000 },
206c8aee3f4SLinus Walleij 	{ .vbat_uv = 3581000, .ri_uohm = 281000 },
207c8aee3f4SLinus Walleij 	{ .vbat_uv = 3560000, .ri_uohm = 287000 },
208c8aee3f4SLinus Walleij 	{ .vbat_uv = 3527000, .ri_uohm = 289000 },
209c8aee3f4SLinus Walleij 	{ .vbat_uv = 3512000, .ri_uohm = 286000 },
210c8aee3f4SLinus Walleij 	{ .vbat_uv = 3494000, .ri_uohm = 282000 },
211c8aee3f4SLinus Walleij 	{ .vbat_uv = 3400000, .ri_uohm = 269000 },
212c8aee3f4SLinus Walleij 	{ .vbat_uv = 3360000, .ri_uohm = 328000 },
213c8aee3f4SLinus Walleij 	{ .vbat_uv = 3330000, .ri_uohm = 305000 },
214c8aee3f4SLinus Walleij 	{ .vbat_uv = 3300000, .ri_uohm = 339000 },
215c8aee3f4SLinus Walleij };
216c8aee3f4SLinus Walleij 
217c8aee3f4SLinus Walleij static struct power_supply_vbat_ri_table samsung_vbat2res_charging_eb425161lu[] = {
218c8aee3f4SLinus Walleij 	{ .vbat_uv = 4346000, .ri_uohm = 293000 },
219c8aee3f4SLinus Walleij 	{ .vbat_uv = 4336000, .ri_uohm = 290000 },
220c8aee3f4SLinus Walleij 	{ .vbat_uv = 4315000, .ri_uohm = 274000 },
221c8aee3f4SLinus Walleij 	{ .vbat_uv = 4310000, .ri_uohm = 264000 },
222c8aee3f4SLinus Walleij 	{ .vbat_uv = 4275000, .ri_uohm = 275000 },
223c8aee3f4SLinus Walleij 	{ .vbat_uv = 4267000, .ri_uohm = 274000 },
224c8aee3f4SLinus Walleij 	{ .vbat_uv = 4227000, .ri_uohm = 262000 },
225c8aee3f4SLinus Walleij 	{ .vbat_uv = 4186000, .ri_uohm = 282000 },
226c8aee3f4SLinus Walleij 	{ .vbat_uv = 4136000, .ri_uohm = 246000 },
227c8aee3f4SLinus Walleij 	{ .vbat_uv = 4110000, .ri_uohm = 242000 },
228c8aee3f4SLinus Walleij 	{ .vbat_uv = 4077000, .ri_uohm = 249000 },
229c8aee3f4SLinus Walleij 	{ .vbat_uv = 4049000, .ri_uohm = 238000 },
230c8aee3f4SLinus Walleij 	{ .vbat_uv = 4017000, .ri_uohm = 268000 },
231c8aee3f4SLinus Walleij 	{ .vbat_uv = 3986000, .ri_uohm = 261000 },
232c8aee3f4SLinus Walleij 	{ .vbat_uv = 3962000, .ri_uohm = 252000 },
233c8aee3f4SLinus Walleij 	{ .vbat_uv = 3940000, .ri_uohm = 235000 },
234c8aee3f4SLinus Walleij 	{ .vbat_uv = 3930000, .ri_uohm = 237000 },
235c8aee3f4SLinus Walleij 	{ .vbat_uv = 3924000, .ri_uohm = 255000 },
236c8aee3f4SLinus Walleij 	{ .vbat_uv = 3910000, .ri_uohm = 244000 },
237c8aee3f4SLinus Walleij 	{ .vbat_uv = 3889000, .ri_uohm = 231000 },
238c8aee3f4SLinus Walleij 	{ .vbat_uv = 3875000, .ri_uohm = 249000 },
239c8aee3f4SLinus Walleij 	{ .vbat_uv = 3850000, .ri_uohm = 212000 },
240c8aee3f4SLinus Walleij 	{ .vbat_uv = 3800000, .ri_uohm = 232000 },
241c8aee3f4SLinus Walleij 	{ .vbat_uv = 3750000, .ri_uohm = 177000 },
242c8aee3f4SLinus Walleij 	{ .vbat_uv = 3712000, .ri_uohm = 164000 },
243c8aee3f4SLinus Walleij 	{ .vbat_uv = 3674000, .ri_uohm = 161000 },
244c8aee3f4SLinus Walleij 	{ .vbat_uv = 3590000, .ri_uohm = 164000 },
245c8aee3f4SLinus Walleij };
246c8aee3f4SLinus Walleij 
247c8aee3f4SLinus Walleij static struct power_supply_vbat_ri_table samsung_vbat2res_discharging_eb485159lu[] = {
248c8aee3f4SLinus Walleij 	{ .vbat_uv = 4240000, .ri_uohm = 160000 },
249c8aee3f4SLinus Walleij 	{ .vbat_uv = 4210000, .ri_uohm = 179000 },
250c8aee3f4SLinus Walleij 	{ .vbat_uv = 4180000, .ri_uohm = 183000 },
251c8aee3f4SLinus Walleij 	{ .vbat_uv = 4160000, .ri_uohm = 184000 },
252c8aee3f4SLinus Walleij 	{ .vbat_uv = 4140000, .ri_uohm = 191000 },
253c8aee3f4SLinus Walleij 	{ .vbat_uv = 4120000, .ri_uohm = 204000 },
254c8aee3f4SLinus Walleij 	{ .vbat_uv = 4080000, .ri_uohm = 200000 },
255c8aee3f4SLinus Walleij 	{ .vbat_uv = 4027000, .ri_uohm = 202000 },
256c8aee3f4SLinus Walleij 	{ .vbat_uv = 3916000, .ri_uohm = 221000 },
257c8aee3f4SLinus Walleij 	{ .vbat_uv = 3842000, .ri_uohm = 259000 },
258c8aee3f4SLinus Walleij 	{ .vbat_uv = 3800000, .ri_uohm = 262000 },
259c8aee3f4SLinus Walleij 	{ .vbat_uv = 3715000, .ri_uohm = 340000 },
260c8aee3f4SLinus Walleij 	{ .vbat_uv = 3700000, .ri_uohm = 300000 },
261c8aee3f4SLinus Walleij 	{ .vbat_uv = 3682000, .ri_uohm = 233000 },
262c8aee3f4SLinus Walleij 	{ .vbat_uv = 3655000, .ri_uohm = 246000 },
263c8aee3f4SLinus Walleij 	{ .vbat_uv = 3639000, .ri_uohm = 260000 },
264c8aee3f4SLinus Walleij 	{ .vbat_uv = 3621000, .ri_uohm = 254000 },
265c8aee3f4SLinus Walleij 	{ .vbat_uv = 3583000, .ri_uohm = 266000 },
266c8aee3f4SLinus Walleij 	{ .vbat_uv = 3536000, .ri_uohm = 274000 },
267c8aee3f4SLinus Walleij 	{ .vbat_uv = 3502000, .ri_uohm = 300000 },
268c8aee3f4SLinus Walleij 	{ .vbat_uv = 3465000, .ri_uohm = 245000 },
269c8aee3f4SLinus Walleij 	{ .vbat_uv = 3438000, .ri_uohm = 225000 },
270c8aee3f4SLinus Walleij 	{ .vbat_uv = 3330000, .ri_uohm = 305000 },
271c8aee3f4SLinus Walleij 	{ .vbat_uv = 3300000, .ri_uohm = 339000 },
272c8aee3f4SLinus Walleij };
273c8aee3f4SLinus Walleij 
274c8aee3f4SLinus Walleij static struct power_supply_vbat_ri_table samsung_vbat2res_charging_eb485159lu[] = {
275c8aee3f4SLinus Walleij 	{ .vbat_uv = 4302000, .ri_uohm = 200000 },
276c8aee3f4SLinus Walleij 	{ .vbat_uv = 4258000, .ri_uohm = 206000 },
277c8aee3f4SLinus Walleij 	{ .vbat_uv = 4200000, .ri_uohm = 231000 },
278c8aee3f4SLinus Walleij 	{ .vbat_uv = 4150000, .ri_uohm = 198000 },
279c8aee3f4SLinus Walleij 	{ .vbat_uv = 4134000, .ri_uohm = 268000 },
280c8aee3f4SLinus Walleij 	{ .vbat_uv = 4058000, .ri_uohm = 172000 },
281c8aee3f4SLinus Walleij 	{ .vbat_uv = 4003000, .ri_uohm = 227000 },
282c8aee3f4SLinus Walleij 	{ .vbat_uv = 3972000, .ri_uohm = 241000 },
283c8aee3f4SLinus Walleij 	{ .vbat_uv = 3953000, .ri_uohm = 244000 },
284c8aee3f4SLinus Walleij 	{ .vbat_uv = 3950000, .ri_uohm = 213000 },
285c8aee3f4SLinus Walleij 	{ .vbat_uv = 3900000, .ri_uohm = 225000 },
286c8aee3f4SLinus Walleij 	{ .vbat_uv = 3850000, .ri_uohm = 212000 },
287c8aee3f4SLinus Walleij 	{ .vbat_uv = 3800000, .ri_uohm = 232000 },
288c8aee3f4SLinus Walleij 	{ .vbat_uv = 3750000, .ri_uohm = 177000 },
289c8aee3f4SLinus Walleij 	{ .vbat_uv = 3712000, .ri_uohm = 164000 },
290c8aee3f4SLinus Walleij 	{ .vbat_uv = 3674000, .ri_uohm = 161000 },
291c8aee3f4SLinus Walleij 	{ .vbat_uv = 3590000, .ri_uohm = 164000 },
292c8aee3f4SLinus Walleij };
293c8aee3f4SLinus Walleij 
294c8aee3f4SLinus Walleij static struct power_supply_vbat_ri_table samsung_vbat2res_discharging_eb535151vu[] = {
295c8aee3f4SLinus Walleij 	{ .vbat_uv = 4071000, .ri_uohm = 158000 },
296c8aee3f4SLinus Walleij 	{ .vbat_uv = 4019000, .ri_uohm = 187000 },
297c8aee3f4SLinus Walleij 	{ .vbat_uv = 3951000, .ri_uohm = 191000 },
298c8aee3f4SLinus Walleij 	{ .vbat_uv = 3901000, .ri_uohm = 193000 },
299c8aee3f4SLinus Walleij 	{ .vbat_uv = 3850000, .ri_uohm = 273000 },
300c8aee3f4SLinus Walleij 	{ .vbat_uv = 3800000, .ri_uohm = 305000 },
301c8aee3f4SLinus Walleij 	{ .vbat_uv = 3750000, .ri_uohm = 205000 },
302c8aee3f4SLinus Walleij 	{ .vbat_uv = 3700000, .ri_uohm = 290000 },
303c8aee3f4SLinus Walleij 	{ .vbat_uv = 3650000, .ri_uohm = 262000 },
304c8aee3f4SLinus Walleij 	{ .vbat_uv = 3618000, .ri_uohm = 290000 },
305c8aee3f4SLinus Walleij 	{ .vbat_uv = 3505000, .ri_uohm = 235000 },
306c8aee3f4SLinus Walleij 	{ .vbat_uv = 3484000, .ri_uohm = 253000 },
307c8aee3f4SLinus Walleij 	{ .vbat_uv = 3413000, .ri_uohm = 243000 },
308c8aee3f4SLinus Walleij 	{ .vbat_uv = 3393000, .ri_uohm = 285000 },
309c8aee3f4SLinus Walleij 	{ .vbat_uv = 3361000, .ri_uohm = 281000 },
310c8aee3f4SLinus Walleij 	{ .vbat_uv = 3302000, .ri_uohm = 286000 },
311c8aee3f4SLinus Walleij 	{ .vbat_uv = 3280000, .ri_uohm = 250000 },
312c8aee3f4SLinus Walleij };
313c8aee3f4SLinus Walleij 
314c8aee3f4SLinus Walleij static struct power_supply_vbat_ri_table samsung_vbat2res_charging_eb535151vu[] = {
315c8aee3f4SLinus Walleij 	{ .vbat_uv = 4190000, .ri_uohm = 214000 },
316c8aee3f4SLinus Walleij 	{ .vbat_uv = 4159000, .ri_uohm = 252000 },
317c8aee3f4SLinus Walleij 	{ .vbat_uv = 4121000, .ri_uohm = 245000 },
318c8aee3f4SLinus Walleij 	{ .vbat_uv = 4069000, .ri_uohm = 228000 },
319c8aee3f4SLinus Walleij 	{ .vbat_uv = 4046000, .ri_uohm = 229000 },
320c8aee3f4SLinus Walleij 	{ .vbat_uv = 4026000, .ri_uohm = 233000 },
321c8aee3f4SLinus Walleij 	{ .vbat_uv = 4007000, .ri_uohm = 240000 },
322c8aee3f4SLinus Walleij 	{ .vbat_uv = 3982000, .ri_uohm = 291000 },
323c8aee3f4SLinus Walleij 	{ .vbat_uv = 3945000, .ri_uohm = 276000 },
324c8aee3f4SLinus Walleij 	{ .vbat_uv = 3924000, .ri_uohm = 266000 },
325c8aee3f4SLinus Walleij 	{ .vbat_uv = 3910000, .ri_uohm = 258000 },
326c8aee3f4SLinus Walleij 	{ .vbat_uv = 3900000, .ri_uohm = 271000 },
327c8aee3f4SLinus Walleij 	{ .vbat_uv = 3844000, .ri_uohm = 279000 },
328c8aee3f4SLinus Walleij 	{ .vbat_uv = 3772000, .ri_uohm = 217000 },
329c8aee3f4SLinus Walleij 	{ .vbat_uv = 3673000, .ri_uohm = 208000 },
330c8aee3f4SLinus Walleij 	{ .vbat_uv = 3571000, .ri_uohm = 208000 },
331c8aee3f4SLinus Walleij 	{ .vbat_uv = 3510000, .ri_uohm = 228000 },
332c8aee3f4SLinus Walleij };
333c8aee3f4SLinus Walleij 
334c8aee3f4SLinus Walleij static struct power_supply_vbat_ri_table samsung_vbat2res_discharging_eb585157lu[] = {
335c8aee3f4SLinus Walleij 	{ .vbat_uv = 4194000, .ri_uohm = 121000 },
336c8aee3f4SLinus Walleij 	{ .vbat_uv = 4169000, .ri_uohm = 188000 },
337c8aee3f4SLinus Walleij 	{ .vbat_uv = 4136000, .ri_uohm = 173000 },
338c8aee3f4SLinus Walleij 	{ .vbat_uv = 4108000, .ri_uohm = 158000 },
339c8aee3f4SLinus Walleij 	{ .vbat_uv = 4064000, .ri_uohm = 143000 },
340c8aee3f4SLinus Walleij 	{ .vbat_uv = 3956000, .ri_uohm = 160000 },
341c8aee3f4SLinus Walleij 	{ .vbat_uv = 3847000, .ri_uohm = 262000 },
342c8aee3f4SLinus Walleij 	{ .vbat_uv = 3806000, .ri_uohm = 280000 },
343c8aee3f4SLinus Walleij 	{ .vbat_uv = 3801000, .ri_uohm = 266000 },
344c8aee3f4SLinus Walleij 	{ .vbat_uv = 3794000, .ri_uohm = 259000 },
345c8aee3f4SLinus Walleij 	{ .vbat_uv = 3785000, .ri_uohm = 234000 },
346c8aee3f4SLinus Walleij 	{ .vbat_uv = 3779000, .ri_uohm = 227000 },
347c8aee3f4SLinus Walleij 	{ .vbat_uv = 3772000, .ri_uohm = 222000 },
348c8aee3f4SLinus Walleij 	{ .vbat_uv = 3765000, .ri_uohm = 221000 },
349c8aee3f4SLinus Walleij 	{ .vbat_uv = 3759000, .ri_uohm = 216000 },
350c8aee3f4SLinus Walleij 	{ .vbat_uv = 3754000, .ri_uohm = 206000 },
351c8aee3f4SLinus Walleij 	{ .vbat_uv = 3747000, .ri_uohm = 212000 },
352c8aee3f4SLinus Walleij 	{ .vbat_uv = 3743000, .ri_uohm = 208000 },
353c8aee3f4SLinus Walleij 	{ .vbat_uv = 3737000, .ri_uohm = 212000 },
354c8aee3f4SLinus Walleij 	{ .vbat_uv = 3733000, .ri_uohm = 200000 },
355c8aee3f4SLinus Walleij 	{ .vbat_uv = 3728000, .ri_uohm = 203000 },
356c8aee3f4SLinus Walleij 	{ .vbat_uv = 3722000, .ri_uohm = 207000 },
357c8aee3f4SLinus Walleij 	{ .vbat_uv = 3719000, .ri_uohm = 208000 },
358c8aee3f4SLinus Walleij 	{ .vbat_uv = 3715000, .ri_uohm = 209000 },
359c8aee3f4SLinus Walleij 	{ .vbat_uv = 3712000, .ri_uohm = 211000 },
360c8aee3f4SLinus Walleij 	{ .vbat_uv = 3709000, .ri_uohm = 210000 },
361c8aee3f4SLinus Walleij 	{ .vbat_uv = 3704000, .ri_uohm = 216000 },
362c8aee3f4SLinus Walleij 	{ .vbat_uv = 3701000, .ri_uohm = 218000 },
363c8aee3f4SLinus Walleij 	{ .vbat_uv = 3698000, .ri_uohm = 222000 },
364c8aee3f4SLinus Walleij 	{ .vbat_uv = 3694000, .ri_uohm = 218000 },
365c8aee3f4SLinus Walleij 	{ .vbat_uv = 3692000, .ri_uohm = 215000 },
366c8aee3f4SLinus Walleij 	{ .vbat_uv = 3688000, .ri_uohm = 224000 },
367c8aee3f4SLinus Walleij 	{ .vbat_uv = 3686000, .ri_uohm = 224000 },
368c8aee3f4SLinus Walleij 	{ .vbat_uv = 3683000, .ri_uohm = 228000 },
369c8aee3f4SLinus Walleij 	{ .vbat_uv = 3681000, .ri_uohm = 228000 },
370c8aee3f4SLinus Walleij 	{ .vbat_uv = 3679000, .ri_uohm = 229000 },
371c8aee3f4SLinus Walleij 	{ .vbat_uv = 3676000, .ri_uohm = 232000 },
372c8aee3f4SLinus Walleij 	{ .vbat_uv = 3675000, .ri_uohm = 229000 },
373c8aee3f4SLinus Walleij 	{ .vbat_uv = 3673000, .ri_uohm = 229000 },
374c8aee3f4SLinus Walleij 	{ .vbat_uv = 3672000, .ri_uohm = 223000 },
375c8aee3f4SLinus Walleij 	{ .vbat_uv = 3669000, .ri_uohm = 224000 },
376c8aee3f4SLinus Walleij 	{ .vbat_uv = 3666000, .ri_uohm = 224000 },
377c8aee3f4SLinus Walleij 	{ .vbat_uv = 3663000, .ri_uohm = 221000 },
378c8aee3f4SLinus Walleij 	{ .vbat_uv = 3660000, .ri_uohm = 218000 },
379c8aee3f4SLinus Walleij 	{ .vbat_uv = 3657000, .ri_uohm = 215000 },
380c8aee3f4SLinus Walleij 	{ .vbat_uv = 3654000, .ri_uohm = 212000 },
381c8aee3f4SLinus Walleij 	{ .vbat_uv = 3649000, .ri_uohm = 215000 },
382c8aee3f4SLinus Walleij 	{ .vbat_uv = 3644000, .ri_uohm = 215000 },
383c8aee3f4SLinus Walleij 	{ .vbat_uv = 3636000, .ri_uohm = 215000 },
384c8aee3f4SLinus Walleij 	{ .vbat_uv = 3631000, .ri_uohm = 206000 },
385c8aee3f4SLinus Walleij 	{ .vbat_uv = 3623000, .ri_uohm = 205000 },
386c8aee3f4SLinus Walleij 	{ .vbat_uv = 3616000, .ri_uohm = 193000 },
387c8aee3f4SLinus Walleij 	{ .vbat_uv = 3605000, .ri_uohm = 193000 },
388c8aee3f4SLinus Walleij 	{ .vbat_uv = 3600000, .ri_uohm = 198000 },
389c8aee3f4SLinus Walleij 	{ .vbat_uv = 3597000, .ri_uohm = 198000 },
390c8aee3f4SLinus Walleij 	{ .vbat_uv = 3592000, .ri_uohm = 203000 },
391c8aee3f4SLinus Walleij 	{ .vbat_uv = 3591000, .ri_uohm = 188000 },
392c8aee3f4SLinus Walleij 	{ .vbat_uv = 3587000, .ri_uohm = 188000 },
393c8aee3f4SLinus Walleij 	{ .vbat_uv = 3583000, .ri_uohm = 177000 },
394c8aee3f4SLinus Walleij 	{ .vbat_uv = 3577000, .ri_uohm = 170000 },
395c8aee3f4SLinus Walleij 	{ .vbat_uv = 3568000, .ri_uohm = 135000 },
396c8aee3f4SLinus Walleij 	{ .vbat_uv = 3552000, .ri_uohm = 54000 },
397c8aee3f4SLinus Walleij 	{ .vbat_uv = 3526000, .ri_uohm = 130000 },
398c8aee3f4SLinus Walleij 	{ .vbat_uv = 3501000, .ri_uohm = 48000 },
399c8aee3f4SLinus Walleij 	{ .vbat_uv = 3442000, .ri_uohm = 183000 },
400c8aee3f4SLinus Walleij 	{ .vbat_uv = 3326000, .ri_uohm = 372000 },
401c8aee3f4SLinus Walleij 	{ .vbat_uv = 3161000, .ri_uohm = 452000 },
402c8aee3f4SLinus Walleij };
403c8aee3f4SLinus Walleij 
404c8aee3f4SLinus Walleij static struct power_supply_vbat_ri_table samsung_vbat2res_charging_eb585157lu[] = {
405c8aee3f4SLinus Walleij 	{ .vbat_uv = 4360000, .ri_uohm = 128000 },
406c8aee3f4SLinus Walleij 	{ .vbat_uv = 4325000, .ri_uohm = 130000 },
407c8aee3f4SLinus Walleij 	{ .vbat_uv = 4316000, .ri_uohm = 148000 },
408c8aee3f4SLinus Walleij 	{ .vbat_uv = 4308000, .ri_uohm = 162000 },
409c8aee3f4SLinus Walleij 	{ .vbat_uv = 4301000, .ri_uohm = 162000 },
410c8aee3f4SLinus Walleij 	{ .vbat_uv = 4250000, .ri_uohm = 162000 },
411c8aee3f4SLinus Walleij 	{ .vbat_uv = 4230000, .ri_uohm = 164000 },
412c8aee3f4SLinus Walleij 	{ .vbat_uv = 4030000, .ri_uohm = 164000 },
413c8aee3f4SLinus Walleij 	{ .vbat_uv = 4000000, .ri_uohm = 193000 },
414c8aee3f4SLinus Walleij 	{ .vbat_uv = 3950000, .ri_uohm = 204000 },
415c8aee3f4SLinus Walleij 	{ .vbat_uv = 3850000, .ri_uohm = 210000 },
416c8aee3f4SLinus Walleij 	{ .vbat_uv = 3800000, .ri_uohm = 230000 },
417c8aee3f4SLinus Walleij 	{ .vbat_uv = 3790000, .ri_uohm = 240000 },
418c8aee3f4SLinus Walleij 	{ .vbat_uv = 3780000, .ri_uohm = 311000 },
419c8aee3f4SLinus Walleij 	{ .vbat_uv = 3760000, .ri_uohm = 420000 },
420c8aee3f4SLinus Walleij 	{ .vbat_uv = 3700000, .ri_uohm = 504000 },
421c8aee3f4SLinus Walleij 	{ .vbat_uv = 3600000, .ri_uohm = 565000 },
422c8aee3f4SLinus Walleij };
423c8aee3f4SLinus Walleij 
424c8aee3f4SLinus Walleij /*
425c8aee3f4SLinus Walleij  * Temperature to internal resistance scaling tables.
426c8aee3f4SLinus Walleij  *
427c8aee3f4SLinus Walleij  * "resistance" is the percentage of the resistance determined from the voltage
428c8aee3f4SLinus Walleij  * so this represents the capacity ratio at different temperatures.
429c8aee3f4SLinus Walleij  *
430c8aee3f4SLinus Walleij  * FIXME: the proper table is missing: Samsung does not provide the necessary
431c8aee3f4SLinus Walleij  * temperature compensation tables so we just state 100% for every temperature.
432c8aee3f4SLinus Walleij  * If you have the datasheets, please provide these tables.
433c8aee3f4SLinus Walleij  */
434c8aee3f4SLinus Walleij static struct power_supply_resistance_temp_table samsung_temp2res[] = {
435c8aee3f4SLinus Walleij 	{ .temp = 50, .resistance = 100 },
436c8aee3f4SLinus Walleij 	{ .temp = 40, .resistance = 100 },
437c8aee3f4SLinus Walleij 	{ .temp = 30, .resistance = 100 },
438c8aee3f4SLinus Walleij 	{ .temp = 20, .resistance = 100 },
439c8aee3f4SLinus Walleij 	{ .temp = 10, .resistance = 100 },
440c8aee3f4SLinus Walleij 	{ .temp = 00, .resistance = 100 },
441c8aee3f4SLinus Walleij 	{ .temp = -10, .resistance = 100 },
442c8aee3f4SLinus Walleij 	{ .temp = -20, .resistance = 100 },
443c8aee3f4SLinus Walleij };
444c8aee3f4SLinus Walleij 
445c8aee3f4SLinus Walleij /*
446c8aee3f4SLinus Walleij  * Capacity tables for different Open Circuit Voltages (OCV).
447c8aee3f4SLinus Walleij  * These must be sorted by falling OCV value.
448c8aee3f4SLinus Walleij  */
449c8aee3f4SLinus Walleij 
450c8aee3f4SLinus Walleij static struct power_supply_battery_ocv_table samsung_ocv_cap_eb485159lu[] = {
451c8aee3f4SLinus Walleij 	{ .ocv = 4330000, .capacity = 100},
452c8aee3f4SLinus Walleij 	{ .ocv = 4320000, .capacity = 99},
453c8aee3f4SLinus Walleij 	{ .ocv = 4283000, .capacity = 95},
454c8aee3f4SLinus Walleij 	{ .ocv = 4246000, .capacity = 92},
455c8aee3f4SLinus Walleij 	{ .ocv = 4211000, .capacity = 89},
456c8aee3f4SLinus Walleij 	{ .ocv = 4167000, .capacity = 85},
457c8aee3f4SLinus Walleij 	{ .ocv = 4146000, .capacity = 83},
458c8aee3f4SLinus Walleij 	{ .ocv = 4124000, .capacity = 81},
459c8aee3f4SLinus Walleij 	{ .ocv = 4062000, .capacity = 75},
460c8aee3f4SLinus Walleij 	{ .ocv = 4013000, .capacity = 70},
461c8aee3f4SLinus Walleij 	{ .ocv = 3977000, .capacity = 66},
462c8aee3f4SLinus Walleij 	{ .ocv = 3931000, .capacity = 60},
463c8aee3f4SLinus Walleij 	{ .ocv = 3914000, .capacity = 58},
464c8aee3f4SLinus Walleij 	{ .ocv = 3901000, .capacity = 57},
465c8aee3f4SLinus Walleij 	{ .ocv = 3884000, .capacity = 56},
466c8aee3f4SLinus Walleij 	{ .ocv = 3870000, .capacity = 55},
467c8aee3f4SLinus Walleij 	{ .ocv = 3862000, .capacity = 54},
468c8aee3f4SLinus Walleij 	{ .ocv = 3854000, .capacity = 53},
469c8aee3f4SLinus Walleij 	{ .ocv = 3838000, .capacity = 50},
470c8aee3f4SLinus Walleij 	{ .ocv = 3823000, .capacity = 47},
471c8aee3f4SLinus Walleij 	{ .ocv = 3813000, .capacity = 45},
472c8aee3f4SLinus Walleij 	{ .ocv = 3807000, .capacity = 43},
473c8aee3f4SLinus Walleij 	{ .ocv = 3800000, .capacity = 41},
474c8aee3f4SLinus Walleij 	{ .ocv = 3795000, .capacity = 40},
475c8aee3f4SLinus Walleij 	{ .ocv = 3786000, .capacity = 37},
476c8aee3f4SLinus Walleij 	{ .ocv = 3783000, .capacity = 35},
477c8aee3f4SLinus Walleij 	{ .ocv = 3773000, .capacity = 30},
478c8aee3f4SLinus Walleij 	{ .ocv = 3758000, .capacity = 25},
479c8aee3f4SLinus Walleij 	{ .ocv = 3745000, .capacity = 22},
480c8aee3f4SLinus Walleij 	{ .ocv = 3738000, .capacity = 20},
481c8aee3f4SLinus Walleij 	{ .ocv = 3733000, .capacity = 19},
482c8aee3f4SLinus Walleij 	{ .ocv = 3716000, .capacity = 17},
483c8aee3f4SLinus Walleij 	{ .ocv = 3709000, .capacity = 16},
484c8aee3f4SLinus Walleij 	{ .ocv = 3698000, .capacity = 15},
485c8aee3f4SLinus Walleij 	{ .ocv = 3687000, .capacity = 14},
486c8aee3f4SLinus Walleij 	{ .ocv = 3684000, .capacity = 13},
487c8aee3f4SLinus Walleij 	{ .ocv = 3684000, .capacity = 12},
488c8aee3f4SLinus Walleij 	{ .ocv = 3678000, .capacity = 10},
489c8aee3f4SLinus Walleij 	{ .ocv = 3671000, .capacity = 9},
490c8aee3f4SLinus Walleij 	{ .ocv = 3665000, .capacity = 8},
491c8aee3f4SLinus Walleij 	{ .ocv = 3651000, .capacity = 7},
492c8aee3f4SLinus Walleij 	{ .ocv = 3634000, .capacity = 6},
493c8aee3f4SLinus Walleij 	{ .ocv = 3601000, .capacity = 5},
494c8aee3f4SLinus Walleij 	{ .ocv = 3564000, .capacity = 4},
495c8aee3f4SLinus Walleij 	{ .ocv = 3516000, .capacity = 3},
496c8aee3f4SLinus Walleij 	{ .ocv = 3456000, .capacity = 2},
497c8aee3f4SLinus Walleij 	{ .ocv = 3381000, .capacity = 1},
498c8aee3f4SLinus Walleij 	{ .ocv = 3300000, .capacity = 0},
499c8aee3f4SLinus Walleij };
500c8aee3f4SLinus Walleij 
501c8aee3f4SLinus Walleij /* Same capacity table is used by eb-l1m7flu, eb425161la, eb425161lu */
502c8aee3f4SLinus Walleij static struct power_supply_battery_ocv_table samsung_ocv_cap_1500mah[] = {
503c8aee3f4SLinus Walleij 	{ .ocv = 4328000, .capacity = 100},
504c8aee3f4SLinus Walleij 	{ .ocv = 4299000, .capacity = 99},
505c8aee3f4SLinus Walleij 	{ .ocv = 4281000, .capacity = 98},
506c8aee3f4SLinus Walleij 	{ .ocv = 4241000, .capacity = 95},
507c8aee3f4SLinus Walleij 	{ .ocv = 4183000, .capacity = 90},
508c8aee3f4SLinus Walleij 	{ .ocv = 4150000, .capacity = 87},
509c8aee3f4SLinus Walleij 	{ .ocv = 4116000, .capacity = 84},
510c8aee3f4SLinus Walleij 	{ .ocv = 4077000, .capacity = 80},
511c8aee3f4SLinus Walleij 	{ .ocv = 4068000, .capacity = 79},
512c8aee3f4SLinus Walleij 	{ .ocv = 4058000, .capacity = 77},
513c8aee3f4SLinus Walleij 	{ .ocv = 4026000, .capacity = 75},
514c8aee3f4SLinus Walleij 	{ .ocv = 3987000, .capacity = 72},
515c8aee3f4SLinus Walleij 	{ .ocv = 3974000, .capacity = 69},
516c8aee3f4SLinus Walleij 	{ .ocv = 3953000, .capacity = 66},
517c8aee3f4SLinus Walleij 	{ .ocv = 3933000, .capacity = 63},
518c8aee3f4SLinus Walleij 	{ .ocv = 3911000, .capacity = 60},
519c8aee3f4SLinus Walleij 	{ .ocv = 3900000, .capacity = 58},
520c8aee3f4SLinus Walleij 	{ .ocv = 3873000, .capacity = 55},
521c8aee3f4SLinus Walleij 	{ .ocv = 3842000, .capacity = 52},
522c8aee3f4SLinus Walleij 	{ .ocv = 3829000, .capacity = 50},
523c8aee3f4SLinus Walleij 	{ .ocv = 3810000, .capacity = 45},
524c8aee3f4SLinus Walleij 	{ .ocv = 3793000, .capacity = 40},
525c8aee3f4SLinus Walleij 	{ .ocv = 3783000, .capacity = 35},
526c8aee3f4SLinus Walleij 	{ .ocv = 3776000, .capacity = 30},
527c8aee3f4SLinus Walleij 	{ .ocv = 3762000, .capacity = 25},
528c8aee3f4SLinus Walleij 	{ .ocv = 3746000, .capacity = 20},
529c8aee3f4SLinus Walleij 	{ .ocv = 3739000, .capacity = 18},
530c8aee3f4SLinus Walleij 	{ .ocv = 3715000, .capacity = 15},
531c8aee3f4SLinus Walleij 	{ .ocv = 3700000, .capacity = 12},
532c8aee3f4SLinus Walleij 	{ .ocv = 3690000, .capacity = 10},
533c8aee3f4SLinus Walleij 	{ .ocv = 3680000, .capacity = 9},
534c8aee3f4SLinus Walleij 	{ .ocv = 3670000, .capacity = 7},
535c8aee3f4SLinus Walleij 	{ .ocv = 3656000, .capacity = 5},
536c8aee3f4SLinus Walleij 	{ .ocv = 3634000, .capacity = 4},
537c8aee3f4SLinus Walleij 	{ .ocv = 3614000, .capacity = 3},
538c8aee3f4SLinus Walleij 	{ .ocv = 3551000, .capacity = 2},
539c8aee3f4SLinus Walleij 	{ .ocv = 3458000, .capacity = 1},
540c8aee3f4SLinus Walleij 	{ .ocv = 3300000, .capacity = 0},
541c8aee3f4SLinus Walleij };
542c8aee3f4SLinus Walleij 
543c8aee3f4SLinus Walleij static struct power_supply_battery_ocv_table samsung_ocv_cap_eb535151vu[] = {
544c8aee3f4SLinus Walleij 	{ .ocv = 4178000, .capacity = 100},
545c8aee3f4SLinus Walleij 	{ .ocv = 4148000, .capacity = 99},
546c8aee3f4SLinus Walleij 	{ .ocv = 4105000, .capacity = 95},
547c8aee3f4SLinus Walleij 	{ .ocv = 4078000, .capacity = 92},
548c8aee3f4SLinus Walleij 	{ .ocv = 4057000, .capacity = 89},
549c8aee3f4SLinus Walleij 	{ .ocv = 4013000, .capacity = 85},
550c8aee3f4SLinus Walleij 	{ .ocv = 3988000, .capacity = 82},
551c8aee3f4SLinus Walleij 	{ .ocv = 3962000, .capacity = 77},
552c8aee3f4SLinus Walleij 	{ .ocv = 3920000, .capacity = 70},
553c8aee3f4SLinus Walleij 	{ .ocv = 3891000, .capacity = 65},
554c8aee3f4SLinus Walleij 	{ .ocv = 3874000, .capacity = 62},
555c8aee3f4SLinus Walleij 	{ .ocv = 3839000, .capacity = 59},
556c8aee3f4SLinus Walleij 	{ .ocv = 3816000, .capacity = 55},
557c8aee3f4SLinus Walleij 	{ .ocv = 3798000, .capacity = 50},
558c8aee3f4SLinus Walleij 	{ .ocv = 3778000, .capacity = 40},
559c8aee3f4SLinus Walleij 	{ .ocv = 3764000, .capacity = 30},
560c8aee3f4SLinus Walleij 	{ .ocv = 3743000, .capacity = 25},
561c8aee3f4SLinus Walleij 	{ .ocv = 3711000, .capacity = 20},
562c8aee3f4SLinus Walleij 	{ .ocv = 3691000, .capacity = 18},
563c8aee3f4SLinus Walleij 	{ .ocv = 3685000, .capacity = 15},
564c8aee3f4SLinus Walleij 	{ .ocv = 3680000, .capacity = 12},
565c8aee3f4SLinus Walleij 	{ .ocv = 3662000, .capacity = 10},
566c8aee3f4SLinus Walleij 	{ .ocv = 3638000, .capacity = 9},
567c8aee3f4SLinus Walleij 	{ .ocv = 3593000, .capacity = 7},
568c8aee3f4SLinus Walleij 	{ .ocv = 3566000, .capacity = 6},
569c8aee3f4SLinus Walleij 	{ .ocv = 3497000, .capacity = 4},
570c8aee3f4SLinus Walleij 	{ .ocv = 3405000, .capacity = 2},
571c8aee3f4SLinus Walleij 	{ .ocv = 3352000, .capacity = 1},
572c8aee3f4SLinus Walleij 	{ .ocv = 3300000, .capacity = 0},
573c8aee3f4SLinus Walleij };
574c8aee3f4SLinus Walleij 
575c8aee3f4SLinus Walleij static struct power_supply_battery_ocv_table samsung_ocv_cap_eb585157lu[] = {
576c8aee3f4SLinus Walleij 	{ .ocv = 4320000, .capacity = 100},
577c8aee3f4SLinus Walleij 	{ .ocv = 4296000, .capacity = 99},
578c8aee3f4SLinus Walleij 	{ .ocv = 4283000, .capacity = 98},
579c8aee3f4SLinus Walleij 	{ .ocv = 4245000, .capacity = 95},
580c8aee3f4SLinus Walleij 	{ .ocv = 4185000, .capacity = 90},
581c8aee3f4SLinus Walleij 	{ .ocv = 4152000, .capacity = 87},
582c8aee3f4SLinus Walleij 	{ .ocv = 4119000, .capacity = 84},
583c8aee3f4SLinus Walleij 	{ .ocv = 4077000, .capacity = 80},
584c8aee3f4SLinus Walleij 	{ .ocv = 4057000, .capacity = 78},
585c8aee3f4SLinus Walleij 	{ .ocv = 4048000, .capacity = 77},
586c8aee3f4SLinus Walleij 	{ .ocv = 4020000, .capacity = 74},
587c8aee3f4SLinus Walleij 	{ .ocv = 4003000, .capacity = 72},
588c8aee3f4SLinus Walleij 	{ .ocv = 3978000, .capacity = 69},
589c8aee3f4SLinus Walleij 	{ .ocv = 3955000, .capacity = 66},
590c8aee3f4SLinus Walleij 	{ .ocv = 3934000, .capacity = 63},
591c8aee3f4SLinus Walleij 	{ .ocv = 3912000, .capacity = 60},
592c8aee3f4SLinus Walleij 	{ .ocv = 3894000, .capacity = 58},
593c8aee3f4SLinus Walleij 	{ .ocv = 3860000, .capacity = 55},
594c8aee3f4SLinus Walleij 	{ .ocv = 3837000, .capacity = 52},
595c8aee3f4SLinus Walleij 	{ .ocv = 3827000, .capacity = 50},
596c8aee3f4SLinus Walleij 	{ .ocv = 3806000, .capacity = 45},
597c8aee3f4SLinus Walleij 	{ .ocv = 3791000, .capacity = 40},
598c8aee3f4SLinus Walleij 	{ .ocv = 3779000, .capacity = 35},
599c8aee3f4SLinus Walleij 	{ .ocv = 3770000, .capacity = 30},
600c8aee3f4SLinus Walleij 	{ .ocv = 3758000, .capacity = 25},
601c8aee3f4SLinus Walleij 	{ .ocv = 3739000, .capacity = 20},
602c8aee3f4SLinus Walleij 	{ .ocv = 3730000, .capacity = 18},
603c8aee3f4SLinus Walleij 	{ .ocv = 3706000, .capacity = 15},
604c8aee3f4SLinus Walleij 	{ .ocv = 3684000, .capacity = 13},
605c8aee3f4SLinus Walleij 	{ .ocv = 3675000, .capacity = 10},
606c8aee3f4SLinus Walleij 	{ .ocv = 3673000, .capacity = 9},
607c8aee3f4SLinus Walleij 	{ .ocv = 3665000, .capacity = 7},
608c8aee3f4SLinus Walleij 	{ .ocv = 3649000, .capacity = 5},
609c8aee3f4SLinus Walleij 	{ .ocv = 3628000, .capacity = 4},
610c8aee3f4SLinus Walleij 	{ .ocv = 3585000, .capacity = 3},
611c8aee3f4SLinus Walleij 	{ .ocv = 3525000, .capacity = 2},
612c8aee3f4SLinus Walleij 	{ .ocv = 3441000, .capacity = 1},
613c8aee3f4SLinus Walleij 	{ .ocv = 3300000, .capacity = 0},
614c8aee3f4SLinus Walleij };
615c8aee3f4SLinus Walleij 
616c8aee3f4SLinus Walleij static struct power_supply_maintenance_charge_table samsung_maint_charge_table[] = {
617c8aee3f4SLinus Walleij 	{
618c8aee3f4SLinus Walleij 		/* Maintenance charging phase A, 60 hours */
619c8aee3f4SLinus Walleij 		.charge_current_max_ua = 600000,
620c8aee3f4SLinus Walleij 		.charge_voltage_max_uv = 4150000,
621c8aee3f4SLinus Walleij 		.charge_safety_timer_minutes = 60*60,
622c8aee3f4SLinus Walleij 	},
623c8aee3f4SLinus Walleij 	{
624c8aee3f4SLinus Walleij 		/* Maintenance charging phase B, 200 hours */
625c8aee3f4SLinus Walleij 		.charge_current_max_ua = 600000,
626c8aee3f4SLinus Walleij 		.charge_voltage_max_uv = 4100000,
627c8aee3f4SLinus Walleij 		.charge_safety_timer_minutes = 200*60,
628c8aee3f4SLinus Walleij 	}
629c8aee3f4SLinus Walleij };
630c8aee3f4SLinus Walleij 
631c8aee3f4SLinus Walleij static struct samsung_sdi_battery samsung_sdi_batteries[] = {
632c8aee3f4SLinus Walleij 	{
633c8aee3f4SLinus Walleij 		/*
634c8aee3f4SLinus Walleij 		 * Used in Samsung GT-I8190 "Golden"
635c8aee3f4SLinus Walleij 		 * Data from vendor boardfile board-golden-[bm|battery].c
636c8aee3f4SLinus Walleij 		 */
637c8aee3f4SLinus Walleij 		.compatible = "samsung,eb-l1m7flu",
638c8aee3f4SLinus Walleij 		.name = "EB-L1M7FLU",
639c8aee3f4SLinus Walleij 		.info = {
640c8aee3f4SLinus Walleij 			.charge_full_design_uah = 1500000,
641c8aee3f4SLinus Walleij 			.technology = POWER_SUPPLY_TECHNOLOGY_LION,
642c8aee3f4SLinus Walleij 			.factory_internal_resistance_uohm = 100000,
643c8aee3f4SLinus Walleij 			.factory_internal_resistance_charging_uohm = 200000,
644c8aee3f4SLinus Walleij 			/* If you have data on this fix the min_design_uv */
645c8aee3f4SLinus Walleij 			.voltage_min_design_uv = 3320000,
646c8aee3f4SLinus Walleij 			.voltage_max_design_uv = 4340000,
647c8aee3f4SLinus Walleij 			.overvoltage_limit_uv = 4500000,
648c8aee3f4SLinus Walleij 			.constant_charge_current_max_ua = 900000,
649c8aee3f4SLinus Walleij 			.constant_charge_voltage_max_uv = 4320000,
650c8aee3f4SLinus Walleij 			.charge_term_current_ua = 200000,
651c8aee3f4SLinus Walleij 			.charge_restart_voltage_uv = 4300000,
652c8aee3f4SLinus Walleij 			.maintenance_charge = samsung_maint_charge_table,
653c8aee3f4SLinus Walleij 			.maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
654c8aee3f4SLinus Walleij 			.alert_low_temp_charge_current_ua = 300000,
655c8aee3f4SLinus Walleij 			.alert_low_temp_charge_voltage_uv = 4000000,
656c8aee3f4SLinus Walleij 			.alert_high_temp_charge_current_ua = 300000,
657c8aee3f4SLinus Walleij 			.alert_high_temp_charge_voltage_uv = 4000000,
658c8aee3f4SLinus Walleij 			.temp_min = -50,
659c8aee3f4SLinus Walleij 			.temp_alert_min = 0,
660c8aee3f4SLinus Walleij 			.temp_alert_max = 40,
661c8aee3f4SLinus Walleij 			.temp_max = 60,
662c8aee3f4SLinus Walleij 			.resist_table = samsung_temp2res,
663c8aee3f4SLinus Walleij 			.resist_table_size = ARRAY_SIZE(samsung_temp2res),
664c8aee3f4SLinus Walleij 			/* If you have tables for more temperatures, add them */
665c8aee3f4SLinus Walleij 			.ocv_temp[0] = 25,
666c8aee3f4SLinus Walleij 			.ocv_table[0] = samsung_ocv_cap_1500mah,
667c8aee3f4SLinus Walleij 			.ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_1500mah),
668c8aee3f4SLinus Walleij 			.vbat2ri_discharging = samsung_vbat2res_discharging_eb_l1m7flu,
669c8aee3f4SLinus Walleij 			.vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb_l1m7flu),
670c8aee3f4SLinus Walleij 			.vbat2ri_charging = samsung_vbat2res_charging_eb_l1m7flu,
671c8aee3f4SLinus Walleij 			.vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb_l1m7flu),
672c8aee3f4SLinus Walleij 			.bti_resistance_ohm = 2400,
673c8aee3f4SLinus Walleij 			.bti_resistance_tolerance = 40,
674c8aee3f4SLinus Walleij 		},
675c8aee3f4SLinus Walleij 	},
676c8aee3f4SLinus Walleij 	{
677c8aee3f4SLinus Walleij 		/*
678c8aee3f4SLinus Walleij 		 * Used in Samsung SGH-T599 "Codina TMO" and SGH-I407 "Kyle"
679c8aee3f4SLinus Walleij 		 * Data from vendor boardfile board-kyle-[bm|battery].c
680c8aee3f4SLinus Walleij 		 */
681c8aee3f4SLinus Walleij 		.compatible = "samsung,eb425161la",
682c8aee3f4SLinus Walleij 		.name = "EB425161LA",
683c8aee3f4SLinus Walleij 		.info = {
684c8aee3f4SLinus Walleij 			.charge_full_design_uah = 1500000,
685c8aee3f4SLinus Walleij 			.technology = POWER_SUPPLY_TECHNOLOGY_LION,
686c8aee3f4SLinus Walleij 			.factory_internal_resistance_uohm = 136000,
687c8aee3f4SLinus Walleij 			.factory_internal_resistance_charging_uohm = 200000,
688c8aee3f4SLinus Walleij 			/* If you have data on this fix the min_design_uv */
689c8aee3f4SLinus Walleij 			.voltage_min_design_uv = 3320000,
690c8aee3f4SLinus Walleij 			.voltage_max_design_uv = 4340000,
691c8aee3f4SLinus Walleij 			.overvoltage_limit_uv = 4500000,
692c8aee3f4SLinus Walleij 			.constant_charge_current_max_ua = 900000,
693c8aee3f4SLinus Walleij 			.constant_charge_voltage_max_uv = 4320000,
694c8aee3f4SLinus Walleij 			.charge_term_current_ua = 200000,
695c8aee3f4SLinus Walleij 			.charge_restart_voltage_uv = 4270000,
696c8aee3f4SLinus Walleij 			.maintenance_charge = samsung_maint_charge_table,
697c8aee3f4SLinus Walleij 			.maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
698c8aee3f4SLinus Walleij 			.alert_low_temp_charge_current_ua = 300000,
699c8aee3f4SLinus Walleij 			.alert_low_temp_charge_voltage_uv = 4000000,
700c8aee3f4SLinus Walleij 			.alert_high_temp_charge_current_ua = 300000,
701c8aee3f4SLinus Walleij 			.alert_high_temp_charge_voltage_uv = 4000000,
702c8aee3f4SLinus Walleij 			.temp_min = -30,
703c8aee3f4SLinus Walleij 			.temp_alert_min = 0,
704c8aee3f4SLinus Walleij 			.temp_alert_max = 40,
705c8aee3f4SLinus Walleij 			.temp_max = 47,
706c8aee3f4SLinus Walleij 			.resist_table = samsung_temp2res,
707c8aee3f4SLinus Walleij 			.resist_table_size = ARRAY_SIZE(samsung_temp2res),
708c8aee3f4SLinus Walleij 			/* If you have tables for more temperatures, add them */
709c8aee3f4SLinus Walleij 			.ocv_temp[0] = 25,
710c8aee3f4SLinus Walleij 			.ocv_table[0] = samsung_ocv_cap_1500mah,
711c8aee3f4SLinus Walleij 			.ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_1500mah),
712c8aee3f4SLinus Walleij 			.vbat2ri_discharging = samsung_vbat2res_discharging_eb425161la,
713c8aee3f4SLinus Walleij 			.vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb425161la),
714c8aee3f4SLinus Walleij 			.vbat2ri_charging = samsung_vbat2res_charging_eb425161la,
715c8aee3f4SLinus Walleij 			.vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb425161la),
716c8aee3f4SLinus Walleij 			.bti_resistance_ohm = 2400,
717c8aee3f4SLinus Walleij 			.bti_resistance_tolerance = 40,
718c8aee3f4SLinus Walleij 		},
719c8aee3f4SLinus Walleij 	},
720c8aee3f4SLinus Walleij 	{
721c8aee3f4SLinus Walleij 		/*
722c8aee3f4SLinus Walleij 		 * Used in Samsung GT-I8160 "Codina"
723c8aee3f4SLinus Walleij 		 * Data from vendor boardfile board-codina-[bm|battery].c
724c8aee3f4SLinus Walleij 		 */
725c8aee3f4SLinus Walleij 		.compatible = "samsung,eb425161lu",
726c8aee3f4SLinus Walleij 		.name = "EB425161LU",
727c8aee3f4SLinus Walleij 		.info = {
728c8aee3f4SLinus Walleij 			.charge_full_design_uah = 1500000,
729c8aee3f4SLinus Walleij 			.technology = POWER_SUPPLY_TECHNOLOGY_LION,
730c8aee3f4SLinus Walleij 			.factory_internal_resistance_uohm = 100000,
731c8aee3f4SLinus Walleij 			.factory_internal_resistance_charging_uohm = 200000,
732c8aee3f4SLinus Walleij 			/* If you have data on this fix the min_design_uv */
733c8aee3f4SLinus Walleij 			.voltage_min_design_uv = 3320000,
734c8aee3f4SLinus Walleij 			.voltage_max_design_uv = 4350000,
735c8aee3f4SLinus Walleij 			.overvoltage_limit_uv = 4500000,
736c8aee3f4SLinus Walleij 			.constant_charge_current_max_ua = 900000,
737c8aee3f4SLinus Walleij 			.constant_charge_voltage_max_uv = 4340000,
738c8aee3f4SLinus Walleij 			.charge_term_current_ua = 200000,
739c8aee3f4SLinus Walleij 			.charge_restart_voltage_uv = 4280000,
740c8aee3f4SLinus Walleij 			.maintenance_charge = samsung_maint_charge_table,
741c8aee3f4SLinus Walleij 			.maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
742c8aee3f4SLinus Walleij 			.alert_low_temp_charge_current_ua = 300000,
743c8aee3f4SLinus Walleij 			.alert_low_temp_charge_voltage_uv = 4000000,
744c8aee3f4SLinus Walleij 			.alert_high_temp_charge_current_ua = 300000,
745c8aee3f4SLinus Walleij 			.alert_high_temp_charge_voltage_uv = 4000000,
746c8aee3f4SLinus Walleij 			.temp_min = -50,
747c8aee3f4SLinus Walleij 			.temp_alert_min = 0,
748c8aee3f4SLinus Walleij 			.temp_alert_max = 43,
749c8aee3f4SLinus Walleij 			.temp_max = 49,
750c8aee3f4SLinus Walleij 			.resist_table = samsung_temp2res,
751c8aee3f4SLinus Walleij 			.resist_table_size = ARRAY_SIZE(samsung_temp2res),
752c8aee3f4SLinus Walleij 			/* If you have tables for more temperatures, add them */
753c8aee3f4SLinus Walleij 			.ocv_temp[0] = 25,
754c8aee3f4SLinus Walleij 			.ocv_table[0] = samsung_ocv_cap_1500mah,
755c8aee3f4SLinus Walleij 			.ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_1500mah),
756c8aee3f4SLinus Walleij 			.vbat2ri_discharging = samsung_vbat2res_discharging_eb425161lu,
757c8aee3f4SLinus Walleij 			.vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb425161lu),
758c8aee3f4SLinus Walleij 			.vbat2ri_charging = samsung_vbat2res_charging_eb425161lu,
759c8aee3f4SLinus Walleij 			.vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb425161lu),
760c8aee3f4SLinus Walleij 			.bti_resistance_ohm = 2400,
761c8aee3f4SLinus Walleij 			.bti_resistance_tolerance = 40,
762c8aee3f4SLinus Walleij 		},
763c8aee3f4SLinus Walleij 	},
764c8aee3f4SLinus Walleij 	{
765c8aee3f4SLinus Walleij 		/*
766c8aee3f4SLinus Walleij 		 * Used in Samsung GT-S7710 "Skomer"
767c8aee3f4SLinus Walleij 		 * Data from vendor boardfile board-skomer-[bm|battery].c
768c8aee3f4SLinus Walleij 		 */
769c8aee3f4SLinus Walleij 		.compatible = "samsung,eb485159lu",
770c8aee3f4SLinus Walleij 		.name = "EB485159LU",
771c8aee3f4SLinus Walleij 		.info = {
772c8aee3f4SLinus Walleij 			.charge_full_design_uah = 1700000,
773c8aee3f4SLinus Walleij 			.technology = POWER_SUPPLY_TECHNOLOGY_LION,
774c8aee3f4SLinus Walleij 			.factory_internal_resistance_uohm = 100000,
775c8aee3f4SLinus Walleij 			.factory_internal_resistance_charging_uohm = 200000,
776c8aee3f4SLinus Walleij 			.voltage_min_design_uv = 3320000,
777c8aee3f4SLinus Walleij 			.voltage_max_design_uv = 4350000,
778c8aee3f4SLinus Walleij 			.overvoltage_limit_uv = 4500000,
779c8aee3f4SLinus Walleij 			.constant_charge_current_max_ua = 900000,
780c8aee3f4SLinus Walleij 			.constant_charge_voltage_max_uv = 4340000,
781c8aee3f4SLinus Walleij 			.charge_term_current_ua = 200000,
782c8aee3f4SLinus Walleij 			.charge_restart_voltage_uv = 4300000,
783c8aee3f4SLinus Walleij 			.maintenance_charge = samsung_maint_charge_table,
784c8aee3f4SLinus Walleij 			.maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
785c8aee3f4SLinus Walleij 			.alert_low_temp_charge_current_ua = 300000,
786c8aee3f4SLinus Walleij 			.alert_low_temp_charge_voltage_uv = 4000000,
787c8aee3f4SLinus Walleij 			.alert_high_temp_charge_current_ua = 300000,
788c8aee3f4SLinus Walleij 			.alert_high_temp_charge_voltage_uv = 4000000,
789c8aee3f4SLinus Walleij 			.temp_min = -50,
790c8aee3f4SLinus Walleij 			.temp_alert_min = 0,
791c8aee3f4SLinus Walleij 			.temp_alert_max = 40,
792c8aee3f4SLinus Walleij 			.temp_max = 60,
793c8aee3f4SLinus Walleij 			.resist_table = samsung_temp2res,
794c8aee3f4SLinus Walleij 			.resist_table_size = ARRAY_SIZE(samsung_temp2res),
795c8aee3f4SLinus Walleij 			/* If you have tables for more temperatures, add them */
796c8aee3f4SLinus Walleij 			.ocv_temp[0] = 25,
797c8aee3f4SLinus Walleij 			.ocv_table[0] = samsung_ocv_cap_eb485159lu,
798c8aee3f4SLinus Walleij 			.ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_eb485159lu),
799c8aee3f4SLinus Walleij 			/* CHECKME: vendor uses the 1500 mAh table, check against datasheet */
800c8aee3f4SLinus Walleij 			.vbat2ri_discharging = samsung_vbat2res_discharging_eb485159lu,
801c8aee3f4SLinus Walleij 			.vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb485159lu),
802c8aee3f4SLinus Walleij 			.vbat2ri_charging = samsung_vbat2res_charging_eb485159lu,
803c8aee3f4SLinus Walleij 			.vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb485159lu),
804c8aee3f4SLinus Walleij 			.bti_resistance_ohm = 2400,
805c8aee3f4SLinus Walleij 			.bti_resistance_tolerance = 40,
806c8aee3f4SLinus Walleij 		},
807c8aee3f4SLinus Walleij 	},
808c8aee3f4SLinus Walleij 	{
809c8aee3f4SLinus Walleij 		/*
810c8aee3f4SLinus Walleij 		 * Used in Samsung GT-I9070 "Janice"
811c8aee3f4SLinus Walleij 		 * Data from vendor boardfile board-janice-bm.c
812c8aee3f4SLinus Walleij 		 */
813c8aee3f4SLinus Walleij 		.compatible = "samsung,eb535151vu",
814c8aee3f4SLinus Walleij 		.name = "EB535151VU",
815c8aee3f4SLinus Walleij 		.info = {
816c8aee3f4SLinus Walleij 			.charge_full_design_uah = 1500000,
817c8aee3f4SLinus Walleij 			.technology = POWER_SUPPLY_TECHNOLOGY_LION,
818c8aee3f4SLinus Walleij 			.factory_internal_resistance_uohm = 100000,
819c8aee3f4SLinus Walleij 			.factory_internal_resistance_charging_uohm = 200000,
820c8aee3f4SLinus Walleij 			/* If you have data on this fix the min_design_uv */
821c8aee3f4SLinus Walleij 			.voltage_min_design_uv = 3300000,
822c8aee3f4SLinus Walleij 			.voltage_max_design_uv = 4180000,
823c8aee3f4SLinus Walleij 			.overvoltage_limit_uv = 4500000,
824c8aee3f4SLinus Walleij 			.constant_charge_current_max_ua = 900000,
825c8aee3f4SLinus Walleij 			.constant_charge_voltage_max_uv = 4200000,
826c8aee3f4SLinus Walleij 			.charge_term_current_ua = 200000,
827*5c7d28c6SLinus Walleij 			.charge_restart_voltage_uv = 4170000,
828c8aee3f4SLinus Walleij 			.maintenance_charge = samsung_maint_charge_table,
829c8aee3f4SLinus Walleij 			.maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
830c8aee3f4SLinus Walleij 			.alert_low_temp_charge_current_ua = 300000,
831c8aee3f4SLinus Walleij 			.alert_low_temp_charge_voltage_uv = 4000000,
832c8aee3f4SLinus Walleij 			.alert_high_temp_charge_current_ua = 300000,
833c8aee3f4SLinus Walleij 			.alert_high_temp_charge_voltage_uv = 4000000,
834c8aee3f4SLinus Walleij 			.temp_min = -5,
835c8aee3f4SLinus Walleij 			.temp_alert_min = 0,
836c8aee3f4SLinus Walleij 			.temp_alert_max = 40,
837c8aee3f4SLinus Walleij 			.temp_max = 60,
838c8aee3f4SLinus Walleij 			.resist_table = samsung_temp2res,
839c8aee3f4SLinus Walleij 			.resist_table_size = ARRAY_SIZE(samsung_temp2res),
840c8aee3f4SLinus Walleij 			/* If you have tables for more temperatures, add them */
841c8aee3f4SLinus Walleij 			.ocv_temp[0] = 25,
842c8aee3f4SLinus Walleij 			.ocv_table[0] = samsung_ocv_cap_eb535151vu,
843c8aee3f4SLinus Walleij 			.ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_eb535151vu),
844c8aee3f4SLinus Walleij 			.vbat2ri_discharging = samsung_vbat2res_discharging_eb535151vu,
845c8aee3f4SLinus Walleij 			.vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb535151vu),
846c8aee3f4SLinus Walleij 			.vbat2ri_charging = samsung_vbat2res_charging_eb535151vu,
847c8aee3f4SLinus Walleij 			.vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb535151vu),
848c8aee3f4SLinus Walleij 			.bti_resistance_ohm = 1500,
849c8aee3f4SLinus Walleij 			.bti_resistance_tolerance = 40,
850c8aee3f4SLinus Walleij 		},
851c8aee3f4SLinus Walleij 	},
852c8aee3f4SLinus Walleij 	{
853c8aee3f4SLinus Walleij 		/*
854c8aee3f4SLinus Walleij 		 * Used in Samsung GT-I8530 "Gavini"
855c8aee3f4SLinus Walleij 		 * Data from vendor boardfile board-gavini-bm.c
856c8aee3f4SLinus Walleij 		 */
857c8aee3f4SLinus Walleij 		.compatible = "samsung,eb585157lu",
858c8aee3f4SLinus Walleij 		.name = "EB585157LU",
859c8aee3f4SLinus Walleij 		.info = {
860c8aee3f4SLinus Walleij 			.charge_full_design_uah = 2000000,
861c8aee3f4SLinus Walleij 			.technology = POWER_SUPPLY_TECHNOLOGY_LION,
862c8aee3f4SLinus Walleij 			.factory_internal_resistance_uohm = 105000,
863c8aee3f4SLinus Walleij 			.factory_internal_resistance_charging_uohm = 160000,
864c8aee3f4SLinus Walleij 			/* If you have data on this fix the min_design_uv */
865c8aee3f4SLinus Walleij 			.voltage_min_design_uv = 3300000,
866c8aee3f4SLinus Walleij 			.voltage_max_design_uv = 4320000,
867c8aee3f4SLinus Walleij 			.overvoltage_limit_uv = 4500000,
868c8aee3f4SLinus Walleij 			.constant_charge_current_max_ua = 1500000,
869c8aee3f4SLinus Walleij 			.constant_charge_voltage_max_uv = 4350000,
870c8aee3f4SLinus Walleij 			.charge_term_current_ua = 120000,
871*5c7d28c6SLinus Walleij 			.charge_restart_voltage_uv = 4300000,
872c8aee3f4SLinus Walleij 			.maintenance_charge = samsung_maint_charge_table,
873c8aee3f4SLinus Walleij 			.maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
874c8aee3f4SLinus Walleij 			.alert_low_temp_charge_current_ua = 300000,
875c8aee3f4SLinus Walleij 			.alert_low_temp_charge_voltage_uv = 4000000,
876c8aee3f4SLinus Walleij 			.alert_high_temp_charge_current_ua = 300000,
877c8aee3f4SLinus Walleij 			.alert_high_temp_charge_voltage_uv = 4000000,
878c8aee3f4SLinus Walleij 			.temp_min = -5,
879c8aee3f4SLinus Walleij 			.temp_alert_min = 0,
880c8aee3f4SLinus Walleij 			.temp_alert_max = 40,
881c8aee3f4SLinus Walleij 			.temp_max = 60,
882c8aee3f4SLinus Walleij 			.resist_table = samsung_temp2res,
883c8aee3f4SLinus Walleij 			.resist_table_size = ARRAY_SIZE(samsung_temp2res),
884c8aee3f4SLinus Walleij 			/* If you have tables for more temperatures, add them */
885c8aee3f4SLinus Walleij 			.ocv_temp[0] = 25,
886c8aee3f4SLinus Walleij 			.ocv_table[0] = samsung_ocv_cap_eb585157lu,
887c8aee3f4SLinus Walleij 			.ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_eb585157lu),
888c8aee3f4SLinus Walleij 			.vbat2ri_discharging = samsung_vbat2res_discharging_eb585157lu,
889c8aee3f4SLinus Walleij 			.vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb585157lu),
890c8aee3f4SLinus Walleij 			.vbat2ri_charging = samsung_vbat2res_charging_eb585157lu,
891c8aee3f4SLinus Walleij 			.vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb585157lu),
892c8aee3f4SLinus Walleij 			.bti_resistance_ohm = 2400,
893c8aee3f4SLinus Walleij 			.bti_resistance_tolerance = 40,
894c8aee3f4SLinus Walleij 		},
895c8aee3f4SLinus Walleij 	},
896c8aee3f4SLinus Walleij };
897c8aee3f4SLinus Walleij 
samsung_sdi_battery_get_info(struct device * dev,const char * compatible,struct power_supply_battery_info ** info)898c8aee3f4SLinus Walleij int samsung_sdi_battery_get_info(struct device *dev,
899c8aee3f4SLinus Walleij 				 const char *compatible,
900c8aee3f4SLinus Walleij 				 struct power_supply_battery_info **info)
901c8aee3f4SLinus Walleij {
902c8aee3f4SLinus Walleij 	struct samsung_sdi_battery *batt;
903c8aee3f4SLinus Walleij 	int i;
904c8aee3f4SLinus Walleij 
905c8aee3f4SLinus Walleij 	for (i = 0; i < ARRAY_SIZE(samsung_sdi_batteries); i++) {
906c8aee3f4SLinus Walleij 		batt = &samsung_sdi_batteries[i];
907c8aee3f4SLinus Walleij 		if (!strcmp(compatible, batt->compatible))
908c8aee3f4SLinus Walleij 			break;
909c8aee3f4SLinus Walleij 	}
910c8aee3f4SLinus Walleij 
911c8aee3f4SLinus Walleij 	if (i == ARRAY_SIZE(samsung_sdi_batteries))
912c8aee3f4SLinus Walleij 		return -ENODEV;
913c8aee3f4SLinus Walleij 
914c8aee3f4SLinus Walleij 	*info = &batt->info;
915c8aee3f4SLinus Walleij 	dev_info(dev, "Samsung SDI %s battery %d mAh\n",
916c8aee3f4SLinus Walleij 		 batt->name, batt->info.charge_full_design_uah / 1000);
917c8aee3f4SLinus Walleij 
918c8aee3f4SLinus Walleij 	return 0;
919c8aee3f4SLinus Walleij }
920c8aee3f4SLinus Walleij EXPORT_SYMBOL_GPL(samsung_sdi_battery_get_info);
921