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