1 // SPDX-License-Identifier: GPL-2.0
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.
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.
12 #include <linux/module.h>
13 #include <linux/power_supply.h>
14 #include "samsung-sdi-battery.h"
16 struct samsung_sdi_battery
{
19 struct power_supply_battery_info info
;
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.
28 static const 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 },
56 static const 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 },
76 static const 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 },
108 static const 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 },
185 static const 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 },
217 static const 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 },
247 static const 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 },
274 static const 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 },
294 static const 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 },
314 static const 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 },
334 static const 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 },
404 static const 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 },
425 * Temperature to internal resistance scaling tables.
427 * "resistance" is the percentage of the resistance determined from the voltage
428 * so this represents the capacity ratio at different temperatures.
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.
434 static const 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 },
446 * Capacity tables for different Open Circuit Voltages (OCV).
447 * These must be sorted by falling OCV value.
450 static const 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},
501 /* Same capacity table is used by eb-l1m7flu, eb425161la, eb425161lu */
502 static const 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},
543 static const 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},
575 static const 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},
616 static const struct power_supply_maintenance_charge_table samsung_maint_charge_table
[] = {
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,
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,
631 static struct samsung_sdi_battery samsung_sdi_batteries
[] = {
634 * Used in Samsung GT-I8190 "Golden"
635 * Data from vendor boardfile board-golden-[bm|battery].c
637 .compatible
= "samsung,eb-l1m7flu",
638 .name
= "EB-L1M7FLU",
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,
660 .temp_alert_max
= 40,
662 .resist_table
= samsung_temp2res
,
663 .resist_table_size
= ARRAY_SIZE(samsung_temp2res
),
664 /* If you have tables for more temperatures, add them */
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,
678 * Used in Samsung SGH-T599 "Codina TMO" and SGH-I407 "Kyle"
679 * Data from vendor boardfile board-kyle-[bm|battery].c
681 .compatible
= "samsung,eb425161la",
682 .name
= "EB425161LA",
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,
704 .temp_alert_max
= 40,
706 .resist_table
= samsung_temp2res
,
707 .resist_table_size
= ARRAY_SIZE(samsung_temp2res
),
708 /* If you have tables for more temperatures, add them */
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,
722 * Used in Samsung GT-I8160 "Codina"
723 * Data from vendor boardfile board-codina-[bm|battery].c
725 .compatible
= "samsung,eb425161lu",
726 .name
= "EB425161LU",
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,
748 .temp_alert_max
= 43,
750 .resist_table
= samsung_temp2res
,
751 .resist_table_size
= ARRAY_SIZE(samsung_temp2res
),
752 /* If you have tables for more temperatures, add them */
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,
766 * Used in Samsung GT-S7710 "Skomer"
767 * Data from vendor boardfile board-skomer-[bm|battery].c
769 .compatible
= "samsung,eb485159lu",
770 .name
= "EB485159LU",
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,
791 .temp_alert_max
= 40,
793 .resist_table
= samsung_temp2res
,
794 .resist_table_size
= ARRAY_SIZE(samsung_temp2res
),
795 /* If you have tables for more temperatures, add them */
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,
810 * Used in Samsung GT-I9070 "Janice"
811 * Data from vendor boardfile board-janice-bm.c
813 .compatible
= "samsung,eb535151vu",
814 .name
= "EB535151VU",
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 .charge_restart_voltage_uv
= 4170000,
828 .maintenance_charge
= samsung_maint_charge_table
,
829 .maintenance_charge_size
= ARRAY_SIZE(samsung_maint_charge_table
),
830 .alert_low_temp_charge_current_ua
= 300000,
831 .alert_low_temp_charge_voltage_uv
= 4000000,
832 .alert_high_temp_charge_current_ua
= 300000,
833 .alert_high_temp_charge_voltage_uv
= 4000000,
836 .temp_alert_max
= 40,
838 .resist_table
= samsung_temp2res
,
839 .resist_table_size
= ARRAY_SIZE(samsung_temp2res
),
840 /* If you have tables for more temperatures, add them */
842 .ocv_table
[0] = samsung_ocv_cap_eb535151vu
,
843 .ocv_table_size
[0] = ARRAY_SIZE(samsung_ocv_cap_eb535151vu
),
844 .vbat2ri_discharging
= samsung_vbat2res_discharging_eb535151vu
,
845 .vbat2ri_discharging_size
= ARRAY_SIZE(samsung_vbat2res_discharging_eb535151vu
),
846 .vbat2ri_charging
= samsung_vbat2res_charging_eb535151vu
,
847 .vbat2ri_charging_size
= ARRAY_SIZE(samsung_vbat2res_charging_eb535151vu
),
848 .bti_resistance_ohm
= 1500,
849 .bti_resistance_tolerance
= 40,
854 * Used in Samsung GT-I8530 "Gavini"
855 * Data from vendor boardfile board-gavini-bm.c
857 .compatible
= "samsung,eb585157lu",
858 .name
= "EB585157LU",
860 .charge_full_design_uah
= 2000000,
861 .technology
= POWER_SUPPLY_TECHNOLOGY_LION
,
862 .factory_internal_resistance_uohm
= 105000,
863 .factory_internal_resistance_charging_uohm
= 160000,
864 /* If you have data on this fix the min_design_uv */
865 .voltage_min_design_uv
= 3300000,
866 .voltage_max_design_uv
= 4320000,
867 .overvoltage_limit_uv
= 4500000,
868 .constant_charge_current_max_ua
= 1500000,
869 .constant_charge_voltage_max_uv
= 4350000,
870 .charge_term_current_ua
= 120000,
871 .charge_restart_voltage_uv
= 4300000,
872 .maintenance_charge
= samsung_maint_charge_table
,
873 .maintenance_charge_size
= ARRAY_SIZE(samsung_maint_charge_table
),
874 .alert_low_temp_charge_current_ua
= 300000,
875 .alert_low_temp_charge_voltage_uv
= 4000000,
876 .alert_high_temp_charge_current_ua
= 300000,
877 .alert_high_temp_charge_voltage_uv
= 4000000,
880 .temp_alert_max
= 40,
882 .resist_table
= samsung_temp2res
,
883 .resist_table_size
= ARRAY_SIZE(samsung_temp2res
),
884 /* If you have tables for more temperatures, add them */
886 .ocv_table
[0] = samsung_ocv_cap_eb585157lu
,
887 .ocv_table_size
[0] = ARRAY_SIZE(samsung_ocv_cap_eb585157lu
),
888 .vbat2ri_discharging
= samsung_vbat2res_discharging_eb585157lu
,
889 .vbat2ri_discharging_size
= ARRAY_SIZE(samsung_vbat2res_discharging_eb585157lu
),
890 .vbat2ri_charging
= samsung_vbat2res_charging_eb585157lu
,
891 .vbat2ri_charging_size
= ARRAY_SIZE(samsung_vbat2res_charging_eb585157lu
),
892 .bti_resistance_ohm
= 2400,
893 .bti_resistance_tolerance
= 40,
898 int samsung_sdi_battery_get_info(struct device
*dev
,
899 const char *compatible
,
900 struct power_supply_battery_info
**info
)
902 struct samsung_sdi_battery
*batt
;
905 for (i
= 0; i
< ARRAY_SIZE(samsung_sdi_batteries
); i
++) {
906 batt
= &samsung_sdi_batteries
[i
];
907 if (!strcmp(compatible
, batt
->compatible
))
911 if (i
== ARRAY_SIZE(samsung_sdi_batteries
))
915 dev_info(dev
, "Samsung SDI %s battery %d mAh\n",
916 batt
->name
, batt
->info
.charge_full_design_uah
/ 1000);
920 EXPORT_SYMBOL_GPL(samsung_sdi_battery_get_info
);