brintos

brintos / linux-shallow public Read only

0
0
Text · 35.4 KiB · b63fd27 Raw
921 lines · c
1// SPDX-License-Identifier: GPL-2.02 3/*4 * Battery data and characteristics for Samsung SDI (Samsung Digital Interface)5 * batteries. The data is retrieved automatically into drivers using6 * the power_supply_get_battery_info() call.7 *8 * The BTI (battery type indicator) resistance in the code drops was very9 * unreliable. The resistance listed here was obtained by simply measuring10 * 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 16struct 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 varies24 * depending on the VBAT voltage, so look this up from a table. Different25 * tables apply depending on whether we are charging or not.26 */27 28static 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 },54};55 56static 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 },74};75 76static 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 },106};107 108static 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 },183};184 185static 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 },215};216 217static 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 },245};246 247static 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 },272};273 274static 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 },292};293 294static 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 },312};313 314static 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 },332};333 334static 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 },402};403 404static 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 },422};423 424/*425 * Temperature to internal resistance scaling tables.426 *427 * "resistance" is the percentage of the resistance determined from the voltage428 * so this represents the capacity ratio at different temperatures.429 *430 * FIXME: the proper table is missing: Samsung does not provide the necessary431 * temperature compensation tables so we just state 100% for every temperature.432 * If you have the datasheets, please provide these tables.433 */434static 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 450static 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 */502static 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 543static 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 575static 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 616static const 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 631static 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].c636		 */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].c680		 */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].c724		 */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].c768		 */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.c812		 */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			.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,834			.temp_min = -5,835			.temp_alert_min = 0,836			.temp_alert_max = 40,837			.temp_max = 60,838			.resist_table = samsung_temp2res,839			.resist_table_size = ARRAY_SIZE(samsung_temp2res),840			/* If you have tables for more temperatures, add them */841			.ocv_temp[0] = 25,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,850		},851	},852	{853		/*854		 * Used in Samsung GT-I8530 "Gavini"855		 * Data from vendor boardfile board-gavini-bm.c856		 */857		.compatible = "samsung,eb585157lu",858		.name = "EB585157LU",859		.info = {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,878			.temp_min = -5,879			.temp_alert_min = 0,880			.temp_alert_max = 40,881			.temp_max = 60,882			.resist_table = samsung_temp2res,883			.resist_table_size = ARRAY_SIZE(samsung_temp2res),884			/* If you have tables for more temperatures, add them */885			.ocv_temp[0] = 25,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,894		},895	},896};897 898int samsung_sdi_battery_get_info(struct device *dev,899				 const char *compatible,900				 struct power_supply_battery_info **info)901{902	struct samsung_sdi_battery *batt;903	int i;904 905	for (i = 0; i < ARRAY_SIZE(samsung_sdi_batteries); i++) {906		batt = &samsung_sdi_batteries[i];907		if (!strcmp(compatible, batt->compatible))908			break;909	}910 911	if (i == ARRAY_SIZE(samsung_sdi_batteries))912		return -ENODEV;913 914	*info = &batt->info;915	dev_info(dev, "Samsung SDI %s battery %d mAh\n",916		 batt->name, batt->info.charge_full_design_uah / 1000);917 918	return 0;919}920EXPORT_SYMBOL_GPL(samsung_sdi_battery_get_info);921