Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 
0003 /*
0004  * Battery data and characteristics for Samsung SDI (Samsung Digital Interface)
0005  * batteries. The data is retrieved automatically into drivers using
0006  * the power_supply_get_battery_info() call.
0007  *
0008  * The BTI (battery type indicator) resistance in the code drops was very
0009  * unreliable. The resistance listed here was obtained by simply measuring
0010  * the BTI resistance with a multimeter on the battery.
0011  */
0012 #include <linux/module.h>
0013 #include <linux/power_supply.h>
0014 #include "samsung-sdi-battery.h"
0015 
0016 struct samsung_sdi_battery {
0017     char *compatible;
0018     char *name;
0019     struct power_supply_battery_info info;
0020 };
0021 
0022 /*
0023  * Voltage to internal resistance tables. The internal resistance varies
0024  * depending on the VBAT voltage, so look this up from a table. Different
0025  * tables apply depending on whether we are charging or not.
0026  */
0027 
0028 static struct power_supply_vbat_ri_table samsung_vbat2res_discharging_eb_l1m7flu[] = {
0029     { .vbat_uv = 4240000, .ri_uohm = 160000 },
0030     { .vbat_uv = 4210000, .ri_uohm = 179000 },
0031     { .vbat_uv = 4180000, .ri_uohm = 183000 },
0032     { .vbat_uv = 4160000, .ri_uohm = 184000 },
0033     { .vbat_uv = 4140000, .ri_uohm = 191000 },
0034     { .vbat_uv = 4120000, .ri_uohm = 204000 },
0035     { .vbat_uv = 4076000, .ri_uohm = 220000 },
0036     { .vbat_uv = 4030000, .ri_uohm = 227000 },
0037     { .vbat_uv = 3986000, .ri_uohm = 215000 },
0038     { .vbat_uv = 3916000, .ri_uohm = 221000 },
0039     { .vbat_uv = 3842000, .ri_uohm = 259000 },
0040     { .vbat_uv = 3773000, .ri_uohm = 287000 },
0041     { .vbat_uv = 3742000, .ri_uohm = 283000 },
0042     { .vbat_uv = 3709000, .ri_uohm = 277000 },
0043     { .vbat_uv = 3685000, .ri_uohm = 297000 },
0044     { .vbat_uv = 3646000, .ri_uohm = 310000 },
0045     { .vbat_uv = 3616000, .ri_uohm = 331000 },
0046     { .vbat_uv = 3602000, .ri_uohm = 370000 },
0047     { .vbat_uv = 3578000, .ri_uohm = 350000 },
0048     { .vbat_uv = 3553000, .ri_uohm = 321000 },
0049     { .vbat_uv = 3503000, .ri_uohm = 322000 },
0050     { .vbat_uv = 3400000, .ri_uohm = 269000 },
0051     { .vbat_uv = 3360000, .ri_uohm = 328000 },
0052     { .vbat_uv = 3330000, .ri_uohm = 305000 },
0053     { .vbat_uv = 3300000, .ri_uohm = 339000 },
0054 };
0055 
0056 static struct power_supply_vbat_ri_table samsung_vbat2res_charging_eb_l1m7flu[] = {
0057     { .vbat_uv = 4302000, .ri_uohm = 230000 },
0058     { .vbat_uv = 4276000, .ri_uohm = 345000 },
0059     { .vbat_uv = 4227000, .ri_uohm = 345000 },
0060     { .vbat_uv = 4171000, .ri_uohm = 346000 },
0061     { .vbat_uv = 4134000, .ri_uohm = 311000 },
0062     { .vbat_uv = 4084000, .ri_uohm = 299000 },
0063     { .vbat_uv = 4052000, .ri_uohm = 316000 },
0064     { .vbat_uv = 4012000, .ri_uohm = 309000 },
0065     { .vbat_uv = 3961000, .ri_uohm = 303000 },
0066     { .vbat_uv = 3939000, .ri_uohm = 280000 },
0067     { .vbat_uv = 3904000, .ri_uohm = 261000 },
0068     { .vbat_uv = 3850000, .ri_uohm = 212000 },
0069     { .vbat_uv = 3800000, .ri_uohm = 232000 },
0070     { .vbat_uv = 3750000, .ri_uohm = 177000 },
0071     { .vbat_uv = 3712000, .ri_uohm = 164000 },
0072     { .vbat_uv = 3674000, .ri_uohm = 161000 },
0073     { .vbat_uv = 3590000, .ri_uohm = 164000 },
0074 };
0075 
0076 static struct power_supply_vbat_ri_table samsung_vbat2res_discharging_eb425161la[] = {
0077     { .vbat_uv = 4240000, .ri_uohm = 160000 },
0078     { .vbat_uv = 4210000, .ri_uohm = 179000 },
0079     { .vbat_uv = 4180000, .ri_uohm = 183000 },
0080     { .vbat_uv = 4160000, .ri_uohm = 184000 },
0081     { .vbat_uv = 4140000, .ri_uohm = 191000 },
0082     { .vbat_uv = 4120000, .ri_uohm = 204000 },
0083     { .vbat_uv = 4080000, .ri_uohm = 200000 },
0084     { .vbat_uv = 4027000, .ri_uohm = 202000 },
0085     { .vbat_uv = 3916000, .ri_uohm = 221000 },
0086     { .vbat_uv = 3842000, .ri_uohm = 259000 },
0087     { .vbat_uv = 3800000, .ri_uohm = 262000 },
0088     { .vbat_uv = 3742000, .ri_uohm = 263000 },
0089     { .vbat_uv = 3709000, .ri_uohm = 277000 },
0090     { .vbat_uv = 3685000, .ri_uohm = 312000 },
0091     { .vbat_uv = 3668000, .ri_uohm = 258000 },
0092     { .vbat_uv = 3660000, .ri_uohm = 247000 },
0093     { .vbat_uv = 3636000, .ri_uohm = 293000 },
0094     { .vbat_uv = 3616000, .ri_uohm = 331000 },
0095     { .vbat_uv = 3600000, .ri_uohm = 349000 },
0096     { .vbat_uv = 3593000, .ri_uohm = 345000 },
0097     { .vbat_uv = 3585000, .ri_uohm = 344000 },
0098     { .vbat_uv = 3572000, .ri_uohm = 336000 },
0099     { .vbat_uv = 3553000, .ri_uohm = 321000 },
0100     { .vbat_uv = 3517000, .ri_uohm = 336000 },
0101     { .vbat_uv = 3503000, .ri_uohm = 322000 },
0102     { .vbat_uv = 3400000, .ri_uohm = 269000 },
0103     { .vbat_uv = 3360000, .ri_uohm = 328000 },
0104     { .vbat_uv = 3330000, .ri_uohm = 305000 },
0105     { .vbat_uv = 3300000, .ri_uohm = 339000 },
0106 };
0107 
0108 static struct power_supply_vbat_ri_table samsung_vbat2res_charging_eb425161la[] = {
0109     { .vbat_uv = 4345000, .ri_uohm = 230000 },
0110     { .vbat_uv = 4329000, .ri_uohm = 238000 },
0111     { .vbat_uv = 4314000, .ri_uohm = 225000 },
0112     { .vbat_uv = 4311000, .ri_uohm = 239000 },
0113     { .vbat_uv = 4294000, .ri_uohm = 235000 },
0114     { .vbat_uv = 4264000, .ri_uohm = 229000 },
0115     { .vbat_uv = 4262000, .ri_uohm = 228000 },
0116     { .vbat_uv = 4252000, .ri_uohm = 236000 },
0117     { .vbat_uv = 4244000, .ri_uohm = 234000 },
0118     { .vbat_uv = 4235000, .ri_uohm = 234000 },
0119     { .vbat_uv = 4227000, .ri_uohm = 238000 },
0120     { .vbat_uv = 4219000, .ri_uohm = 242000 },
0121     { .vbat_uv = 4212000, .ri_uohm = 239000 },
0122     { .vbat_uv = 4206000, .ri_uohm = 231000 },
0123     { .vbat_uv = 4201000, .ri_uohm = 231000 },
0124     { .vbat_uv = 4192000, .ri_uohm = 224000 },
0125     { .vbat_uv = 4184000, .ri_uohm = 238000 },
0126     { .vbat_uv = 4173000, .ri_uohm = 245000 },
0127     { .vbat_uv = 4161000, .ri_uohm = 244000 },
0128     { .vbat_uv = 4146000, .ri_uohm = 244000 },
0129     { .vbat_uv = 4127000, .ri_uohm = 228000 },
0130     { .vbat_uv = 4119000, .ri_uohm = 218000 },
0131     { .vbat_uv = 4112000, .ri_uohm = 215000 },
0132     { .vbat_uv = 4108000, .ri_uohm = 209000 },
0133     { .vbat_uv = 4102000, .ri_uohm = 214000 },
0134     { .vbat_uv = 4096000, .ri_uohm = 215000 },
0135     { .vbat_uv = 4090000, .ri_uohm = 215000 },
0136     { .vbat_uv = 4083000, .ri_uohm = 219000 },
0137     { .vbat_uv = 4078000, .ri_uohm = 208000 },
0138     { .vbat_uv = 4071000, .ri_uohm = 205000 },
0139     { .vbat_uv = 4066000, .ri_uohm = 208000 },
0140     { .vbat_uv = 4061000, .ri_uohm = 210000 },
0141     { .vbat_uv = 4055000, .ri_uohm = 212000 },
0142     { .vbat_uv = 4049000, .ri_uohm = 215000 },
0143     { .vbat_uv = 4042000, .ri_uohm = 212000 },
0144     { .vbat_uv = 4032000, .ri_uohm = 217000 },
0145     { .vbat_uv = 4027000, .ri_uohm = 220000 },
0146     { .vbat_uv = 4020000, .ri_uohm = 210000 },
0147     { .vbat_uv = 4013000, .ri_uohm = 214000 },
0148     { .vbat_uv = 4007000, .ri_uohm = 219000 },
0149     { .vbat_uv = 4003000, .ri_uohm = 229000 },
0150     { .vbat_uv = 3996000, .ri_uohm = 246000 },
0151     { .vbat_uv = 3990000, .ri_uohm = 245000 },
0152     { .vbat_uv = 3984000, .ri_uohm = 242000 },
0153     { .vbat_uv = 3977000, .ri_uohm = 236000 },
0154     { .vbat_uv = 3971000, .ri_uohm = 231000 },
0155     { .vbat_uv = 3966000, .ri_uohm = 229000 },
0156     { .vbat_uv = 3952000, .ri_uohm = 226000 },
0157     { .vbat_uv = 3946000, .ri_uohm = 222000 },
0158     { .vbat_uv = 3941000, .ri_uohm = 222000 },
0159     { .vbat_uv = 3936000, .ri_uohm = 217000 },
0160     { .vbat_uv = 3932000, .ri_uohm = 217000 },
0161     { .vbat_uv = 3928000, .ri_uohm = 212000 },
0162     { .vbat_uv = 3926000, .ri_uohm = 214000 },
0163     { .vbat_uv = 3922000, .ri_uohm = 209000 },
0164     { .vbat_uv = 3917000, .ri_uohm = 215000 },
0165     { .vbat_uv = 3914000, .ri_uohm = 212000 },
0166     { .vbat_uv = 3912000, .ri_uohm = 220000 },
0167     { .vbat_uv = 3910000, .ri_uohm = 226000 },
0168     { .vbat_uv = 3903000, .ri_uohm = 226000 },
0169     { .vbat_uv = 3891000, .ri_uohm = 222000 },
0170     { .vbat_uv = 3871000, .ri_uohm = 221000 },
0171     { .vbat_uv = 3857000, .ri_uohm = 219000 },
0172     { .vbat_uv = 3850000, .ri_uohm = 216000 },
0173     { .vbat_uv = 3843000, .ri_uohm = 212000 },
0174     { .vbat_uv = 3835000, .ri_uohm = 206000 },
0175     { .vbat_uv = 3825000, .ri_uohm = 217000 },
0176     { .vbat_uv = 3824000, .ri_uohm = 220000 },
0177     { .vbat_uv = 3820000, .ri_uohm = 237000 },
0178     { .vbat_uv = 3800000, .ri_uohm = 232000 },
0179     { .vbat_uv = 3750000, .ri_uohm = 177000 },
0180     { .vbat_uv = 3712000, .ri_uohm = 164000 },
0181     { .vbat_uv = 3674000, .ri_uohm = 161000 },
0182     { .vbat_uv = 3590000, .ri_uohm = 164000 },
0183 };
0184 
0185 static struct power_supply_vbat_ri_table samsung_vbat2res_discharging_eb425161lu[] = {
0186     { .vbat_uv = 4240000, .ri_uohm = 160000 },
0187     { .vbat_uv = 4210000, .ri_uohm = 179000 },
0188     { .vbat_uv = 4180000, .ri_uohm = 183000 },
0189     { .vbat_uv = 4160000, .ri_uohm = 184000 },
0190     { .vbat_uv = 4140000, .ri_uohm = 191000 },
0191     { .vbat_uv = 4120000, .ri_uohm = 204000 },
0192     { .vbat_uv = 4080000, .ri_uohm = 200000 },
0193     { .vbat_uv = 4027000, .ri_uohm = 202000 },
0194     { .vbat_uv = 3916000, .ri_uohm = 221000 },
0195     { .vbat_uv = 3842000, .ri_uohm = 259000 },
0196     { .vbat_uv = 3800000, .ri_uohm = 262000 },
0197     { .vbat_uv = 3742000, .ri_uohm = 263000 },
0198     { .vbat_uv = 3708000, .ri_uohm = 277000 },
0199     { .vbat_uv = 3684000, .ri_uohm = 272000 },
0200     { .vbat_uv = 3664000, .ri_uohm = 278000 },
0201     { .vbat_uv = 3655000, .ri_uohm = 285000 },
0202     { .vbat_uv = 3638000, .ri_uohm = 261000 },
0203     { .vbat_uv = 3624000, .ri_uohm = 259000 },
0204     { .vbat_uv = 3616000, .ri_uohm = 266000 },
0205     { .vbat_uv = 3597000, .ri_uohm = 278000 },
0206     { .vbat_uv = 3581000, .ri_uohm = 281000 },
0207     { .vbat_uv = 3560000, .ri_uohm = 287000 },
0208     { .vbat_uv = 3527000, .ri_uohm = 289000 },
0209     { .vbat_uv = 3512000, .ri_uohm = 286000 },
0210     { .vbat_uv = 3494000, .ri_uohm = 282000 },
0211     { .vbat_uv = 3400000, .ri_uohm = 269000 },
0212     { .vbat_uv = 3360000, .ri_uohm = 328000 },
0213     { .vbat_uv = 3330000, .ri_uohm = 305000 },
0214     { .vbat_uv = 3300000, .ri_uohm = 339000 },
0215 };
0216 
0217 static struct power_supply_vbat_ri_table samsung_vbat2res_charging_eb425161lu[] = {
0218     { .vbat_uv = 4346000, .ri_uohm = 293000 },
0219     { .vbat_uv = 4336000, .ri_uohm = 290000 },
0220     { .vbat_uv = 4315000, .ri_uohm = 274000 },
0221     { .vbat_uv = 4310000, .ri_uohm = 264000 },
0222     { .vbat_uv = 4275000, .ri_uohm = 275000 },
0223     { .vbat_uv = 4267000, .ri_uohm = 274000 },
0224     { .vbat_uv = 4227000, .ri_uohm = 262000 },
0225     { .vbat_uv = 4186000, .ri_uohm = 282000 },
0226     { .vbat_uv = 4136000, .ri_uohm = 246000 },
0227     { .vbat_uv = 4110000, .ri_uohm = 242000 },
0228     { .vbat_uv = 4077000, .ri_uohm = 249000 },
0229     { .vbat_uv = 4049000, .ri_uohm = 238000 },
0230     { .vbat_uv = 4017000, .ri_uohm = 268000 },
0231     { .vbat_uv = 3986000, .ri_uohm = 261000 },
0232     { .vbat_uv = 3962000, .ri_uohm = 252000 },
0233     { .vbat_uv = 3940000, .ri_uohm = 235000 },
0234     { .vbat_uv = 3930000, .ri_uohm = 237000 },
0235     { .vbat_uv = 3924000, .ri_uohm = 255000 },
0236     { .vbat_uv = 3910000, .ri_uohm = 244000 },
0237     { .vbat_uv = 3889000, .ri_uohm = 231000 },
0238     { .vbat_uv = 3875000, .ri_uohm = 249000 },
0239     { .vbat_uv = 3850000, .ri_uohm = 212000 },
0240     { .vbat_uv = 3800000, .ri_uohm = 232000 },
0241     { .vbat_uv = 3750000, .ri_uohm = 177000 },
0242     { .vbat_uv = 3712000, .ri_uohm = 164000 },
0243     { .vbat_uv = 3674000, .ri_uohm = 161000 },
0244     { .vbat_uv = 3590000, .ri_uohm = 164000 },
0245 };
0246 
0247 static struct power_supply_vbat_ri_table samsung_vbat2res_discharging_eb485159lu[] = {
0248     { .vbat_uv = 4240000, .ri_uohm = 160000 },
0249     { .vbat_uv = 4210000, .ri_uohm = 179000 },
0250     { .vbat_uv = 4180000, .ri_uohm = 183000 },
0251     { .vbat_uv = 4160000, .ri_uohm = 184000 },
0252     { .vbat_uv = 4140000, .ri_uohm = 191000 },
0253     { .vbat_uv = 4120000, .ri_uohm = 204000 },
0254     { .vbat_uv = 4080000, .ri_uohm = 200000 },
0255     { .vbat_uv = 4027000, .ri_uohm = 202000 },
0256     { .vbat_uv = 3916000, .ri_uohm = 221000 },
0257     { .vbat_uv = 3842000, .ri_uohm = 259000 },
0258     { .vbat_uv = 3800000, .ri_uohm = 262000 },
0259     { .vbat_uv = 3715000, .ri_uohm = 340000 },
0260     { .vbat_uv = 3700000, .ri_uohm = 300000 },
0261     { .vbat_uv = 3682000, .ri_uohm = 233000 },
0262     { .vbat_uv = 3655000, .ri_uohm = 246000 },
0263     { .vbat_uv = 3639000, .ri_uohm = 260000 },
0264     { .vbat_uv = 3621000, .ri_uohm = 254000 },
0265     { .vbat_uv = 3583000, .ri_uohm = 266000 },
0266     { .vbat_uv = 3536000, .ri_uohm = 274000 },
0267     { .vbat_uv = 3502000, .ri_uohm = 300000 },
0268     { .vbat_uv = 3465000, .ri_uohm = 245000 },
0269     { .vbat_uv = 3438000, .ri_uohm = 225000 },
0270     { .vbat_uv = 3330000, .ri_uohm = 305000 },
0271     { .vbat_uv = 3300000, .ri_uohm = 339000 },
0272 };
0273 
0274 static struct power_supply_vbat_ri_table samsung_vbat2res_charging_eb485159lu[] = {
0275     { .vbat_uv = 4302000, .ri_uohm = 200000 },
0276     { .vbat_uv = 4258000, .ri_uohm = 206000 },
0277     { .vbat_uv = 4200000, .ri_uohm = 231000 },
0278     { .vbat_uv = 4150000, .ri_uohm = 198000 },
0279     { .vbat_uv = 4134000, .ri_uohm = 268000 },
0280     { .vbat_uv = 4058000, .ri_uohm = 172000 },
0281     { .vbat_uv = 4003000, .ri_uohm = 227000 },
0282     { .vbat_uv = 3972000, .ri_uohm = 241000 },
0283     { .vbat_uv = 3953000, .ri_uohm = 244000 },
0284     { .vbat_uv = 3950000, .ri_uohm = 213000 },
0285     { .vbat_uv = 3900000, .ri_uohm = 225000 },
0286     { .vbat_uv = 3850000, .ri_uohm = 212000 },
0287     { .vbat_uv = 3800000, .ri_uohm = 232000 },
0288     { .vbat_uv = 3750000, .ri_uohm = 177000 },
0289     { .vbat_uv = 3712000, .ri_uohm = 164000 },
0290     { .vbat_uv = 3674000, .ri_uohm = 161000 },
0291     { .vbat_uv = 3590000, .ri_uohm = 164000 },
0292 };
0293 
0294 static struct power_supply_vbat_ri_table samsung_vbat2res_discharging_eb535151vu[] = {
0295     { .vbat_uv = 4071000, .ri_uohm = 158000 },
0296     { .vbat_uv = 4019000, .ri_uohm = 187000 },
0297     { .vbat_uv = 3951000, .ri_uohm = 191000 },
0298     { .vbat_uv = 3901000, .ri_uohm = 193000 },
0299     { .vbat_uv = 3850000, .ri_uohm = 273000 },
0300     { .vbat_uv = 3800000, .ri_uohm = 305000 },
0301     { .vbat_uv = 3750000, .ri_uohm = 205000 },
0302     { .vbat_uv = 3700000, .ri_uohm = 290000 },
0303     { .vbat_uv = 3650000, .ri_uohm = 262000 },
0304     { .vbat_uv = 3618000, .ri_uohm = 290000 },
0305     { .vbat_uv = 3505000, .ri_uohm = 235000 },
0306     { .vbat_uv = 3484000, .ri_uohm = 253000 },
0307     { .vbat_uv = 3413000, .ri_uohm = 243000 },
0308     { .vbat_uv = 3393000, .ri_uohm = 285000 },
0309     { .vbat_uv = 3361000, .ri_uohm = 281000 },
0310     { .vbat_uv = 3302000, .ri_uohm = 286000 },
0311     { .vbat_uv = 3280000, .ri_uohm = 250000 },
0312 };
0313 
0314 static struct power_supply_vbat_ri_table samsung_vbat2res_charging_eb535151vu[] = {
0315     { .vbat_uv = 4190000, .ri_uohm = 214000 },
0316     { .vbat_uv = 4159000, .ri_uohm = 252000 },
0317     { .vbat_uv = 4121000, .ri_uohm = 245000 },
0318     { .vbat_uv = 4069000, .ri_uohm = 228000 },
0319     { .vbat_uv = 4046000, .ri_uohm = 229000 },
0320     { .vbat_uv = 4026000, .ri_uohm = 233000 },
0321     { .vbat_uv = 4007000, .ri_uohm = 240000 },
0322     { .vbat_uv = 3982000, .ri_uohm = 291000 },
0323     { .vbat_uv = 3945000, .ri_uohm = 276000 },
0324     { .vbat_uv = 3924000, .ri_uohm = 266000 },
0325     { .vbat_uv = 3910000, .ri_uohm = 258000 },
0326     { .vbat_uv = 3900000, .ri_uohm = 271000 },
0327     { .vbat_uv = 3844000, .ri_uohm = 279000 },
0328     { .vbat_uv = 3772000, .ri_uohm = 217000 },
0329     { .vbat_uv = 3673000, .ri_uohm = 208000 },
0330     { .vbat_uv = 3571000, .ri_uohm = 208000 },
0331     { .vbat_uv = 3510000, .ri_uohm = 228000 },
0332 };
0333 
0334 static struct power_supply_vbat_ri_table samsung_vbat2res_discharging_eb585157lu[] = {
0335     { .vbat_uv = 4194000, .ri_uohm = 121000 },
0336     { .vbat_uv = 4169000, .ri_uohm = 188000 },
0337     { .vbat_uv = 4136000, .ri_uohm = 173000 },
0338     { .vbat_uv = 4108000, .ri_uohm = 158000 },
0339     { .vbat_uv = 4064000, .ri_uohm = 143000 },
0340     { .vbat_uv = 3956000, .ri_uohm = 160000 },
0341     { .vbat_uv = 3847000, .ri_uohm = 262000 },
0342     { .vbat_uv = 3806000, .ri_uohm = 280000 },
0343     { .vbat_uv = 3801000, .ri_uohm = 266000 },
0344     { .vbat_uv = 3794000, .ri_uohm = 259000 },
0345     { .vbat_uv = 3785000, .ri_uohm = 234000 },
0346     { .vbat_uv = 3779000, .ri_uohm = 227000 },
0347     { .vbat_uv = 3772000, .ri_uohm = 222000 },
0348     { .vbat_uv = 3765000, .ri_uohm = 221000 },
0349     { .vbat_uv = 3759000, .ri_uohm = 216000 },
0350     { .vbat_uv = 3754000, .ri_uohm = 206000 },
0351     { .vbat_uv = 3747000, .ri_uohm = 212000 },
0352     { .vbat_uv = 3743000, .ri_uohm = 208000 },
0353     { .vbat_uv = 3737000, .ri_uohm = 212000 },
0354     { .vbat_uv = 3733000, .ri_uohm = 200000 },
0355     { .vbat_uv = 3728000, .ri_uohm = 203000 },
0356     { .vbat_uv = 3722000, .ri_uohm = 207000 },
0357     { .vbat_uv = 3719000, .ri_uohm = 208000 },
0358     { .vbat_uv = 3715000, .ri_uohm = 209000 },
0359     { .vbat_uv = 3712000, .ri_uohm = 211000 },
0360     { .vbat_uv = 3709000, .ri_uohm = 210000 },
0361     { .vbat_uv = 3704000, .ri_uohm = 216000 },
0362     { .vbat_uv = 3701000, .ri_uohm = 218000 },
0363     { .vbat_uv = 3698000, .ri_uohm = 222000 },
0364     { .vbat_uv = 3694000, .ri_uohm = 218000 },
0365     { .vbat_uv = 3692000, .ri_uohm = 215000 },
0366     { .vbat_uv = 3688000, .ri_uohm = 224000 },
0367     { .vbat_uv = 3686000, .ri_uohm = 224000 },
0368     { .vbat_uv = 3683000, .ri_uohm = 228000 },
0369     { .vbat_uv = 3681000, .ri_uohm = 228000 },
0370     { .vbat_uv = 3679000, .ri_uohm = 229000 },
0371     { .vbat_uv = 3676000, .ri_uohm = 232000 },
0372     { .vbat_uv = 3675000, .ri_uohm = 229000 },
0373     { .vbat_uv = 3673000, .ri_uohm = 229000 },
0374     { .vbat_uv = 3672000, .ri_uohm = 223000 },
0375     { .vbat_uv = 3669000, .ri_uohm = 224000 },
0376     { .vbat_uv = 3666000, .ri_uohm = 224000 },
0377     { .vbat_uv = 3663000, .ri_uohm = 221000 },
0378     { .vbat_uv = 3660000, .ri_uohm = 218000 },
0379     { .vbat_uv = 3657000, .ri_uohm = 215000 },
0380     { .vbat_uv = 3654000, .ri_uohm = 212000 },
0381     { .vbat_uv = 3649000, .ri_uohm = 215000 },
0382     { .vbat_uv = 3644000, .ri_uohm = 215000 },
0383     { .vbat_uv = 3636000, .ri_uohm = 215000 },
0384     { .vbat_uv = 3631000, .ri_uohm = 206000 },
0385     { .vbat_uv = 3623000, .ri_uohm = 205000 },
0386     { .vbat_uv = 3616000, .ri_uohm = 193000 },
0387     { .vbat_uv = 3605000, .ri_uohm = 193000 },
0388     { .vbat_uv = 3600000, .ri_uohm = 198000 },
0389     { .vbat_uv = 3597000, .ri_uohm = 198000 },
0390     { .vbat_uv = 3592000, .ri_uohm = 203000 },
0391     { .vbat_uv = 3591000, .ri_uohm = 188000 },
0392     { .vbat_uv = 3587000, .ri_uohm = 188000 },
0393     { .vbat_uv = 3583000, .ri_uohm = 177000 },
0394     { .vbat_uv = 3577000, .ri_uohm = 170000 },
0395     { .vbat_uv = 3568000, .ri_uohm = 135000 },
0396     { .vbat_uv = 3552000, .ri_uohm = 54000 },
0397     { .vbat_uv = 3526000, .ri_uohm = 130000 },
0398     { .vbat_uv = 3501000, .ri_uohm = 48000 },
0399     { .vbat_uv = 3442000, .ri_uohm = 183000 },
0400     { .vbat_uv = 3326000, .ri_uohm = 372000 },
0401     { .vbat_uv = 3161000, .ri_uohm = 452000 },
0402 };
0403 
0404 static struct power_supply_vbat_ri_table samsung_vbat2res_charging_eb585157lu[] = {
0405     { .vbat_uv = 4360000, .ri_uohm = 128000 },
0406     { .vbat_uv = 4325000, .ri_uohm = 130000 },
0407     { .vbat_uv = 4316000, .ri_uohm = 148000 },
0408     { .vbat_uv = 4308000, .ri_uohm = 162000 },
0409     { .vbat_uv = 4301000, .ri_uohm = 162000 },
0410     { .vbat_uv = 4250000, .ri_uohm = 162000 },
0411     { .vbat_uv = 4230000, .ri_uohm = 164000 },
0412     { .vbat_uv = 4030000, .ri_uohm = 164000 },
0413     { .vbat_uv = 4000000, .ri_uohm = 193000 },
0414     { .vbat_uv = 3950000, .ri_uohm = 204000 },
0415     { .vbat_uv = 3850000, .ri_uohm = 210000 },
0416     { .vbat_uv = 3800000, .ri_uohm = 230000 },
0417     { .vbat_uv = 3790000, .ri_uohm = 240000 },
0418     { .vbat_uv = 3780000, .ri_uohm = 311000 },
0419     { .vbat_uv = 3760000, .ri_uohm = 420000 },
0420     { .vbat_uv = 3700000, .ri_uohm = 504000 },
0421     { .vbat_uv = 3600000, .ri_uohm = 565000 },
0422 };
0423 
0424 /*
0425  * Temperature to internal resistance scaling tables.
0426  *
0427  * "resistance" is the percentage of the resistance determined from the voltage
0428  * so this represents the capacity ratio at different temperatures.
0429  *
0430  * FIXME: the proper table is missing: Samsung does not provide the necessary
0431  * temperature compensation tables so we just state 100% for every temperature.
0432  * If you have the datasheets, please provide these tables.
0433  */
0434 static struct power_supply_resistance_temp_table samsung_temp2res[] = {
0435     { .temp = 50, .resistance = 100 },
0436     { .temp = 40, .resistance = 100 },
0437     { .temp = 30, .resistance = 100 },
0438     { .temp = 20, .resistance = 100 },
0439     { .temp = 10, .resistance = 100 },
0440     { .temp = 00, .resistance = 100 },
0441     { .temp = -10, .resistance = 100 },
0442     { .temp = -20, .resistance = 100 },
0443 };
0444 
0445 /*
0446  * Capacity tables for different Open Circuit Voltages (OCV).
0447  * These must be sorted by falling OCV value.
0448  */
0449 
0450 static struct power_supply_battery_ocv_table samsung_ocv_cap_eb485159lu[] = {
0451     { .ocv = 4330000, .capacity = 100},
0452     { .ocv = 4320000, .capacity = 99},
0453     { .ocv = 4283000, .capacity = 95},
0454     { .ocv = 4246000, .capacity = 92},
0455     { .ocv = 4211000, .capacity = 89},
0456     { .ocv = 4167000, .capacity = 85},
0457     { .ocv = 4146000, .capacity = 83},
0458     { .ocv = 4124000, .capacity = 81},
0459     { .ocv = 4062000, .capacity = 75},
0460     { .ocv = 4013000, .capacity = 70},
0461     { .ocv = 3977000, .capacity = 66},
0462     { .ocv = 3931000, .capacity = 60},
0463     { .ocv = 3914000, .capacity = 58},
0464     { .ocv = 3901000, .capacity = 57},
0465     { .ocv = 3884000, .capacity = 56},
0466     { .ocv = 3870000, .capacity = 55},
0467     { .ocv = 3862000, .capacity = 54},
0468     { .ocv = 3854000, .capacity = 53},
0469     { .ocv = 3838000, .capacity = 50},
0470     { .ocv = 3823000, .capacity = 47},
0471     { .ocv = 3813000, .capacity = 45},
0472     { .ocv = 3807000, .capacity = 43},
0473     { .ocv = 3800000, .capacity = 41},
0474     { .ocv = 3795000, .capacity = 40},
0475     { .ocv = 3786000, .capacity = 37},
0476     { .ocv = 3783000, .capacity = 35},
0477     { .ocv = 3773000, .capacity = 30},
0478     { .ocv = 3758000, .capacity = 25},
0479     { .ocv = 3745000, .capacity = 22},
0480     { .ocv = 3738000, .capacity = 20},
0481     { .ocv = 3733000, .capacity = 19},
0482     { .ocv = 3716000, .capacity = 17},
0483     { .ocv = 3709000, .capacity = 16},
0484     { .ocv = 3698000, .capacity = 15},
0485     { .ocv = 3687000, .capacity = 14},
0486     { .ocv = 3684000, .capacity = 13},
0487     { .ocv = 3684000, .capacity = 12},
0488     { .ocv = 3678000, .capacity = 10},
0489     { .ocv = 3671000, .capacity = 9},
0490     { .ocv = 3665000, .capacity = 8},
0491     { .ocv = 3651000, .capacity = 7},
0492     { .ocv = 3634000, .capacity = 6},
0493     { .ocv = 3601000, .capacity = 5},
0494     { .ocv = 3564000, .capacity = 4},
0495     { .ocv = 3516000, .capacity = 3},
0496     { .ocv = 3456000, .capacity = 2},
0497     { .ocv = 3381000, .capacity = 1},
0498     { .ocv = 3300000, .capacity = 0},
0499 };
0500 
0501 /* Same capacity table is used by eb-l1m7flu, eb425161la, eb425161lu */
0502 static struct power_supply_battery_ocv_table samsung_ocv_cap_1500mah[] = {
0503     { .ocv = 4328000, .capacity = 100},
0504     { .ocv = 4299000, .capacity = 99},
0505     { .ocv = 4281000, .capacity = 98},
0506     { .ocv = 4241000, .capacity = 95},
0507     { .ocv = 4183000, .capacity = 90},
0508     { .ocv = 4150000, .capacity = 87},
0509     { .ocv = 4116000, .capacity = 84},
0510     { .ocv = 4077000, .capacity = 80},
0511     { .ocv = 4068000, .capacity = 79},
0512     { .ocv = 4058000, .capacity = 77},
0513     { .ocv = 4026000, .capacity = 75},
0514     { .ocv = 3987000, .capacity = 72},
0515     { .ocv = 3974000, .capacity = 69},
0516     { .ocv = 3953000, .capacity = 66},
0517     { .ocv = 3933000, .capacity = 63},
0518     { .ocv = 3911000, .capacity = 60},
0519     { .ocv = 3900000, .capacity = 58},
0520     { .ocv = 3873000, .capacity = 55},
0521     { .ocv = 3842000, .capacity = 52},
0522     { .ocv = 3829000, .capacity = 50},
0523     { .ocv = 3810000, .capacity = 45},
0524     { .ocv = 3793000, .capacity = 40},
0525     { .ocv = 3783000, .capacity = 35},
0526     { .ocv = 3776000, .capacity = 30},
0527     { .ocv = 3762000, .capacity = 25},
0528     { .ocv = 3746000, .capacity = 20},
0529     { .ocv = 3739000, .capacity = 18},
0530     { .ocv = 3715000, .capacity = 15},
0531     { .ocv = 3700000, .capacity = 12},
0532     { .ocv = 3690000, .capacity = 10},
0533     { .ocv = 3680000, .capacity = 9},
0534     { .ocv = 3670000, .capacity = 7},
0535     { .ocv = 3656000, .capacity = 5},
0536     { .ocv = 3634000, .capacity = 4},
0537     { .ocv = 3614000, .capacity = 3},
0538     { .ocv = 3551000, .capacity = 2},
0539     { .ocv = 3458000, .capacity = 1},
0540     { .ocv = 3300000, .capacity = 0},
0541 };
0542 
0543 static struct power_supply_battery_ocv_table samsung_ocv_cap_eb535151vu[] = {
0544     { .ocv = 4178000, .capacity = 100},
0545     { .ocv = 4148000, .capacity = 99},
0546     { .ocv = 4105000, .capacity = 95},
0547     { .ocv = 4078000, .capacity = 92},
0548     { .ocv = 4057000, .capacity = 89},
0549     { .ocv = 4013000, .capacity = 85},
0550     { .ocv = 3988000, .capacity = 82},
0551     { .ocv = 3962000, .capacity = 77},
0552     { .ocv = 3920000, .capacity = 70},
0553     { .ocv = 3891000, .capacity = 65},
0554     { .ocv = 3874000, .capacity = 62},
0555     { .ocv = 3839000, .capacity = 59},
0556     { .ocv = 3816000, .capacity = 55},
0557     { .ocv = 3798000, .capacity = 50},
0558     { .ocv = 3778000, .capacity = 40},
0559     { .ocv = 3764000, .capacity = 30},
0560     { .ocv = 3743000, .capacity = 25},
0561     { .ocv = 3711000, .capacity = 20},
0562     { .ocv = 3691000, .capacity = 18},
0563     { .ocv = 3685000, .capacity = 15},
0564     { .ocv = 3680000, .capacity = 12},
0565     { .ocv = 3662000, .capacity = 10},
0566     { .ocv = 3638000, .capacity = 9},
0567     { .ocv = 3593000, .capacity = 7},
0568     { .ocv = 3566000, .capacity = 6},
0569     { .ocv = 3497000, .capacity = 4},
0570     { .ocv = 3405000, .capacity = 2},
0571     { .ocv = 3352000, .capacity = 1},
0572     { .ocv = 3300000, .capacity = 0},
0573 };
0574 
0575 static struct power_supply_battery_ocv_table samsung_ocv_cap_eb585157lu[] = {
0576     { .ocv = 4320000, .capacity = 100},
0577     { .ocv = 4296000, .capacity = 99},
0578     { .ocv = 4283000, .capacity = 98},
0579     { .ocv = 4245000, .capacity = 95},
0580     { .ocv = 4185000, .capacity = 90},
0581     { .ocv = 4152000, .capacity = 87},
0582     { .ocv = 4119000, .capacity = 84},
0583     { .ocv = 4077000, .capacity = 80},
0584     { .ocv = 4057000, .capacity = 78},
0585     { .ocv = 4048000, .capacity = 77},
0586     { .ocv = 4020000, .capacity = 74},
0587     { .ocv = 4003000, .capacity = 72},
0588     { .ocv = 3978000, .capacity = 69},
0589     { .ocv = 3955000, .capacity = 66},
0590     { .ocv = 3934000, .capacity = 63},
0591     { .ocv = 3912000, .capacity = 60},
0592     { .ocv = 3894000, .capacity = 58},
0593     { .ocv = 3860000, .capacity = 55},
0594     { .ocv = 3837000, .capacity = 52},
0595     { .ocv = 3827000, .capacity = 50},
0596     { .ocv = 3806000, .capacity = 45},
0597     { .ocv = 3791000, .capacity = 40},
0598     { .ocv = 3779000, .capacity = 35},
0599     { .ocv = 3770000, .capacity = 30},
0600     { .ocv = 3758000, .capacity = 25},
0601     { .ocv = 3739000, .capacity = 20},
0602     { .ocv = 3730000, .capacity = 18},
0603     { .ocv = 3706000, .capacity = 15},
0604     { .ocv = 3684000, .capacity = 13},
0605     { .ocv = 3675000, .capacity = 10},
0606     { .ocv = 3673000, .capacity = 9},
0607     { .ocv = 3665000, .capacity = 7},
0608     { .ocv = 3649000, .capacity = 5},
0609     { .ocv = 3628000, .capacity = 4},
0610     { .ocv = 3585000, .capacity = 3},
0611     { .ocv = 3525000, .capacity = 2},
0612     { .ocv = 3441000, .capacity = 1},
0613     { .ocv = 3300000, .capacity = 0},
0614 };
0615 
0616 static struct power_supply_maintenance_charge_table samsung_maint_charge_table[] = {
0617     {
0618         /* Maintenance charging phase A, 60 hours */
0619         .charge_current_max_ua = 600000,
0620         .charge_voltage_max_uv = 4150000,
0621         .charge_safety_timer_minutes = 60*60,
0622     },
0623     {
0624         /* Maintenance charging phase B, 200 hours */
0625         .charge_current_max_ua = 600000,
0626         .charge_voltage_max_uv = 4100000,
0627         .charge_safety_timer_minutes = 200*60,
0628     }
0629 };
0630 
0631 static struct samsung_sdi_battery samsung_sdi_batteries[] = {
0632     {
0633         /*
0634          * Used in Samsung GT-I8190 "Golden"
0635          * Data from vendor boardfile board-golden-[bm|battery].c
0636          */
0637         .compatible = "samsung,eb-l1m7flu",
0638         .name = "EB-L1M7FLU",
0639         .info = {
0640             .charge_full_design_uah = 1500000,
0641             .technology = POWER_SUPPLY_TECHNOLOGY_LION,
0642             .factory_internal_resistance_uohm = 100000,
0643             .factory_internal_resistance_charging_uohm = 200000,
0644             /* If you have data on this fix the min_design_uv */
0645             .voltage_min_design_uv = 3320000,
0646             .voltage_max_design_uv = 4340000,
0647             .overvoltage_limit_uv = 4500000,
0648             .constant_charge_current_max_ua = 900000,
0649             .constant_charge_voltage_max_uv = 4320000,
0650             .charge_term_current_ua = 200000,
0651             .charge_restart_voltage_uv = 4300000,
0652             .maintenance_charge = samsung_maint_charge_table,
0653             .maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
0654             .alert_low_temp_charge_current_ua = 300000,
0655             .alert_low_temp_charge_voltage_uv = 4000000,
0656             .alert_high_temp_charge_current_ua = 300000,
0657             .alert_high_temp_charge_voltage_uv = 4000000,
0658             .temp_min = -50,
0659             .temp_alert_min = 0,
0660             .temp_alert_max = 40,
0661             .temp_max = 60,
0662             .resist_table = samsung_temp2res,
0663             .resist_table_size = ARRAY_SIZE(samsung_temp2res),
0664             /* If you have tables for more temperatures, add them */
0665             .ocv_temp[0] = 25,
0666             .ocv_table[0] = samsung_ocv_cap_1500mah,
0667             .ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_1500mah),
0668             .vbat2ri_discharging = samsung_vbat2res_discharging_eb_l1m7flu,
0669             .vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb_l1m7flu),
0670             .vbat2ri_charging = samsung_vbat2res_charging_eb_l1m7flu,
0671             .vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb_l1m7flu),
0672             .bti_resistance_ohm = 2400,
0673             .bti_resistance_tolerance = 40,
0674         },
0675     },
0676     {
0677         /*
0678          * Used in Samsung SGH-T599 "Codina TMO" and SGH-I407 "Kyle"
0679          * Data from vendor boardfile board-kyle-[bm|battery].c
0680          */
0681         .compatible = "samsung,eb425161la",
0682         .name = "EB425161LA",
0683         .info = {
0684             .charge_full_design_uah = 1500000,
0685             .technology = POWER_SUPPLY_TECHNOLOGY_LION,
0686             .factory_internal_resistance_uohm = 136000,
0687             .factory_internal_resistance_charging_uohm = 200000,
0688             /* If you have data on this fix the min_design_uv */
0689             .voltage_min_design_uv = 3320000,
0690             .voltage_max_design_uv = 4340000,
0691             .overvoltage_limit_uv = 4500000,
0692             .constant_charge_current_max_ua = 900000,
0693             .constant_charge_voltage_max_uv = 4320000,
0694             .charge_term_current_ua = 200000,
0695             .charge_restart_voltage_uv = 4270000,
0696             .maintenance_charge = samsung_maint_charge_table,
0697             .maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
0698             .alert_low_temp_charge_current_ua = 300000,
0699             .alert_low_temp_charge_voltage_uv = 4000000,
0700             .alert_high_temp_charge_current_ua = 300000,
0701             .alert_high_temp_charge_voltage_uv = 4000000,
0702             .temp_min = -30,
0703             .temp_alert_min = 0,
0704             .temp_alert_max = 40,
0705             .temp_max = 47,
0706             .resist_table = samsung_temp2res,
0707             .resist_table_size = ARRAY_SIZE(samsung_temp2res),
0708             /* If you have tables for more temperatures, add them */
0709             .ocv_temp[0] = 25,
0710             .ocv_table[0] = samsung_ocv_cap_1500mah,
0711             .ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_1500mah),
0712             .vbat2ri_discharging = samsung_vbat2res_discharging_eb425161la,
0713             .vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb425161la),
0714             .vbat2ri_charging = samsung_vbat2res_charging_eb425161la,
0715             .vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb425161la),
0716             .bti_resistance_ohm = 2400,
0717             .bti_resistance_tolerance = 40,
0718         },
0719     },
0720     {
0721         /*
0722          * Used in Samsung GT-I8160 "Codina"
0723          * Data from vendor boardfile board-codina-[bm|battery].c
0724          */
0725         .compatible = "samsung,eb425161lu",
0726         .name = "EB425161LU",
0727         .info = {
0728             .charge_full_design_uah = 1500000,
0729             .technology = POWER_SUPPLY_TECHNOLOGY_LION,
0730             .factory_internal_resistance_uohm = 100000,
0731             .factory_internal_resistance_charging_uohm = 200000,
0732             /* If you have data on this fix the min_design_uv */
0733             .voltage_min_design_uv = 3320000,
0734             .voltage_max_design_uv = 4350000,
0735             .overvoltage_limit_uv = 4500000,
0736             .constant_charge_current_max_ua = 900000,
0737             .constant_charge_voltage_max_uv = 4340000,
0738             .charge_term_current_ua = 200000,
0739             .charge_restart_voltage_uv = 4280000,
0740             .maintenance_charge = samsung_maint_charge_table,
0741             .maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
0742             .alert_low_temp_charge_current_ua = 300000,
0743             .alert_low_temp_charge_voltage_uv = 4000000,
0744             .alert_high_temp_charge_current_ua = 300000,
0745             .alert_high_temp_charge_voltage_uv = 4000000,
0746             .temp_min = -50,
0747             .temp_alert_min = 0,
0748             .temp_alert_max = 43,
0749             .temp_max = 49,
0750             .resist_table = samsung_temp2res,
0751             .resist_table_size = ARRAY_SIZE(samsung_temp2res),
0752             /* If you have tables for more temperatures, add them */
0753             .ocv_temp[0] = 25,
0754             .ocv_table[0] = samsung_ocv_cap_1500mah,
0755             .ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_1500mah),
0756             .vbat2ri_discharging = samsung_vbat2res_discharging_eb425161lu,
0757             .vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb425161lu),
0758             .vbat2ri_charging = samsung_vbat2res_charging_eb425161lu,
0759             .vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb425161lu),
0760             .bti_resistance_ohm = 2400,
0761             .bti_resistance_tolerance = 40,
0762         },
0763     },
0764     {
0765         /*
0766          * Used in Samsung GT-S7710 "Skomer"
0767          * Data from vendor boardfile board-skomer-[bm|battery].c
0768          */
0769         .compatible = "samsung,eb485159lu",
0770         .name = "EB485159LU",
0771         .info = {
0772             .charge_full_design_uah = 1700000,
0773             .technology = POWER_SUPPLY_TECHNOLOGY_LION,
0774             .factory_internal_resistance_uohm = 100000,
0775             .factory_internal_resistance_charging_uohm = 200000,
0776             .voltage_min_design_uv = 3320000,
0777             .voltage_max_design_uv = 4350000,
0778             .overvoltage_limit_uv = 4500000,
0779             .constant_charge_current_max_ua = 900000,
0780             .constant_charge_voltage_max_uv = 4340000,
0781             .charge_term_current_ua = 200000,
0782             .charge_restart_voltage_uv = 4300000,
0783             .maintenance_charge = samsung_maint_charge_table,
0784             .maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
0785             .alert_low_temp_charge_current_ua = 300000,
0786             .alert_low_temp_charge_voltage_uv = 4000000,
0787             .alert_high_temp_charge_current_ua = 300000,
0788             .alert_high_temp_charge_voltage_uv = 4000000,
0789             .temp_min = -50,
0790             .temp_alert_min = 0,
0791             .temp_alert_max = 40,
0792             .temp_max = 60,
0793             .resist_table = samsung_temp2res,
0794             .resist_table_size = ARRAY_SIZE(samsung_temp2res),
0795             /* If you have tables for more temperatures, add them */
0796             .ocv_temp[0] = 25,
0797             .ocv_table[0] = samsung_ocv_cap_eb485159lu,
0798             .ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_eb485159lu),
0799             /* CHECKME: vendor uses the 1500 mAh table, check against datasheet */
0800             .vbat2ri_discharging = samsung_vbat2res_discharging_eb485159lu,
0801             .vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb485159lu),
0802             .vbat2ri_charging = samsung_vbat2res_charging_eb485159lu,
0803             .vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb485159lu),
0804             .bti_resistance_ohm = 2400,
0805             .bti_resistance_tolerance = 40,
0806         },
0807     },
0808     {
0809         /*
0810          * Used in Samsung GT-I9070 "Janice"
0811          * Data from vendor boardfile board-janice-bm.c
0812          */
0813         .compatible = "samsung,eb535151vu",
0814         .name = "EB535151VU",
0815         .info = {
0816             .charge_full_design_uah = 1500000,
0817             .technology = POWER_SUPPLY_TECHNOLOGY_LION,
0818             .factory_internal_resistance_uohm = 100000,
0819             .factory_internal_resistance_charging_uohm = 200000,
0820             /* If you have data on this fix the min_design_uv */
0821             .voltage_min_design_uv = 3300000,
0822             .voltage_max_design_uv = 4180000,
0823             .overvoltage_limit_uv = 4500000,
0824             .constant_charge_current_max_ua = 900000,
0825             .constant_charge_voltage_max_uv = 4200000,
0826             .charge_term_current_ua = 200000,
0827             .charge_restart_voltage_uv = 4170000,
0828             .maintenance_charge = samsung_maint_charge_table,
0829             .maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
0830             .alert_low_temp_charge_current_ua = 300000,
0831             .alert_low_temp_charge_voltage_uv = 4000000,
0832             .alert_high_temp_charge_current_ua = 300000,
0833             .alert_high_temp_charge_voltage_uv = 4000000,
0834             .temp_min = -5,
0835             .temp_alert_min = 0,
0836             .temp_alert_max = 40,
0837             .temp_max = 60,
0838             .resist_table = samsung_temp2res,
0839             .resist_table_size = ARRAY_SIZE(samsung_temp2res),
0840             /* If you have tables for more temperatures, add them */
0841             .ocv_temp[0] = 25,
0842             .ocv_table[0] = samsung_ocv_cap_eb535151vu,
0843             .ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_eb535151vu),
0844             .vbat2ri_discharging = samsung_vbat2res_discharging_eb535151vu,
0845             .vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb535151vu),
0846             .vbat2ri_charging = samsung_vbat2res_charging_eb535151vu,
0847             .vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb535151vu),
0848             .bti_resistance_ohm = 1500,
0849             .bti_resistance_tolerance = 40,
0850         },
0851     },
0852     {
0853         /*
0854          * Used in Samsung GT-I8530 "Gavini"
0855          * Data from vendor boardfile board-gavini-bm.c
0856          */
0857         .compatible = "samsung,eb585157lu",
0858         .name = "EB585157LU",
0859         .info = {
0860             .charge_full_design_uah = 2000000,
0861             .technology = POWER_SUPPLY_TECHNOLOGY_LION,
0862             .factory_internal_resistance_uohm = 105000,
0863             .factory_internal_resistance_charging_uohm = 160000,
0864             /* If you have data on this fix the min_design_uv */
0865             .voltage_min_design_uv = 3300000,
0866             .voltage_max_design_uv = 4320000,
0867             .overvoltage_limit_uv = 4500000,
0868             .constant_charge_current_max_ua = 1500000,
0869             .constant_charge_voltage_max_uv = 4350000,
0870             .charge_term_current_ua = 120000,
0871             .charge_restart_voltage_uv = 4300000,
0872             .maintenance_charge = samsung_maint_charge_table,
0873             .maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
0874             .alert_low_temp_charge_current_ua = 300000,
0875             .alert_low_temp_charge_voltage_uv = 4000000,
0876             .alert_high_temp_charge_current_ua = 300000,
0877             .alert_high_temp_charge_voltage_uv = 4000000,
0878             .temp_min = -5,
0879             .temp_alert_min = 0,
0880             .temp_alert_max = 40,
0881             .temp_max = 60,
0882             .resist_table = samsung_temp2res,
0883             .resist_table_size = ARRAY_SIZE(samsung_temp2res),
0884             /* If you have tables for more temperatures, add them */
0885             .ocv_temp[0] = 25,
0886             .ocv_table[0] = samsung_ocv_cap_eb585157lu,
0887             .ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_eb585157lu),
0888             .vbat2ri_discharging = samsung_vbat2res_discharging_eb585157lu,
0889             .vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb585157lu),
0890             .vbat2ri_charging = samsung_vbat2res_charging_eb585157lu,
0891             .vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb585157lu),
0892             .bti_resistance_ohm = 2400,
0893             .bti_resistance_tolerance = 40,
0894         },
0895     },
0896 };
0897 
0898 int samsung_sdi_battery_get_info(struct device *dev,
0899                  const char *compatible,
0900                  struct power_supply_battery_info **info)
0901 {
0902     struct samsung_sdi_battery *batt;
0903     int i;
0904 
0905     for (i = 0; i < ARRAY_SIZE(samsung_sdi_batteries); i++) {
0906         batt = &samsung_sdi_batteries[i];
0907         if (!strcmp(compatible, batt->compatible))
0908             break;
0909     }
0910 
0911     if (i == ARRAY_SIZE(samsung_sdi_batteries))
0912         return -ENODEV;
0913 
0914     *info = &batt->info;
0915     dev_info(dev, "Samsung SDI %s battery %d mAh\n",
0916          batt->name, batt->info.charge_full_design_uah / 1000);
0917 
0918     return 0;
0919 }
0920 EXPORT_SYMBOL_GPL(samsung_sdi_battery_get_info);