cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

samsung-sdi-battery.c (36206B)


      1// SPDX-License-Identifier: GPL-2.0
      2
      3/*
      4 * Battery data and characteristics for Samsung SDI (Samsung Digital Interface)
      5 * batteries. The data is retrieved automatically into drivers using
      6 * the power_supply_get_battery_info() call.
      7 *
      8 * The BTI (battery type indicator) resistance in the code drops was very
      9 * unreliable. The resistance listed here was obtained by simply measuring
     10 * the BTI resistance with a multimeter on the battery.
     11 */
     12#include <linux/module.h>
     13#include <linux/power_supply.h>
     14#include "samsung-sdi-battery.h"
     15
     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 varies
     24 * depending on the VBAT voltage, so look this up from a table. Different
     25 * tables apply depending on whether we are charging or not.
     26 */
     27
     28static 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 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 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 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 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 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 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 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 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 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 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 struct power_supply_vbat_ri_table samsung_vbat2res_charging_eb585157lu[] = {
    405	{ .vbat_uv = 4360000, .ri_uohm = 128000 },
    406	{ .vbat_uv = 4325000, .ri_uohm = 130000 },
    407	{ .vbat_uv = 4316000, .ri_uohm = 148000 },
    408	{ .vbat_uv = 4308000, .ri_uohm = 162000 },
    409	{ .vbat_uv = 4301000, .ri_uohm = 162000 },
    410	{ .vbat_uv = 4250000, .ri_uohm = 162000 },
    411	{ .vbat_uv = 4230000, .ri_uohm = 164000 },
    412	{ .vbat_uv = 4030000, .ri_uohm = 164000 },
    413	{ .vbat_uv = 4000000, .ri_uohm = 193000 },
    414	{ .vbat_uv = 3950000, .ri_uohm = 204000 },
    415	{ .vbat_uv = 3850000, .ri_uohm = 210000 },
    416	{ .vbat_uv = 3800000, .ri_uohm = 230000 },
    417	{ .vbat_uv = 3790000, .ri_uohm = 240000 },
    418	{ .vbat_uv = 3780000, .ri_uohm = 311000 },
    419	{ .vbat_uv = 3760000, .ri_uohm = 420000 },
    420	{ .vbat_uv = 3700000, .ri_uohm = 504000 },
    421	{ .vbat_uv = 3600000, .ri_uohm = 565000 },
    422};
    423
    424/*
    425 * Temperature to internal resistance scaling tables.
    426 *
    427 * "resistance" is the percentage of the resistance determined from the voltage
    428 * so this represents the capacity ratio at different temperatures.
    429 *
    430 * FIXME: the proper table is missing: Samsung does not provide the necessary
    431 * temperature compensation tables so we just state 100% for every temperature.
    432 * If you have the datasheets, please provide these tables.
    433 */
    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 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].c
    636		 */
    637		.compatible = "samsung,eb-l1m7flu",
    638		.name = "EB-L1M7FLU",
    639		.info = {
    640			.charge_full_design_uah = 1500000,
    641			.technology = POWER_SUPPLY_TECHNOLOGY_LION,
    642			.factory_internal_resistance_uohm = 100000,
    643			.factory_internal_resistance_charging_uohm = 200000,
    644			/* If you have data on this fix the min_design_uv */
    645			.voltage_min_design_uv = 3320000,
    646			.voltage_max_design_uv = 4340000,
    647			.overvoltage_limit_uv = 4500000,
    648			.constant_charge_current_max_ua = 900000,
    649			.constant_charge_voltage_max_uv = 4320000,
    650			.charge_term_current_ua = 200000,
    651			.charge_restart_voltage_uv = 4300000,
    652			.maintenance_charge = samsung_maint_charge_table,
    653			.maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
    654			.alert_low_temp_charge_current_ua = 300000,
    655			.alert_low_temp_charge_voltage_uv = 4000000,
    656			.alert_high_temp_charge_current_ua = 300000,
    657			.alert_high_temp_charge_voltage_uv = 4000000,
    658			.temp_min = -50,
    659			.temp_alert_min = 0,
    660			.temp_alert_max = 40,
    661			.temp_max = 60,
    662			.resist_table = samsung_temp2res,
    663			.resist_table_size = ARRAY_SIZE(samsung_temp2res),
    664			/* If you have tables for more temperatures, add them */
    665			.ocv_temp[0] = 25,
    666			.ocv_table[0] = samsung_ocv_cap_1500mah,
    667			.ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_1500mah),
    668			.vbat2ri_discharging = samsung_vbat2res_discharging_eb_l1m7flu,
    669			.vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb_l1m7flu),
    670			.vbat2ri_charging = samsung_vbat2res_charging_eb_l1m7flu,
    671			.vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb_l1m7flu),
    672			.bti_resistance_ohm = 2400,
    673			.bti_resistance_tolerance = 40,
    674		},
    675	},
    676	{
    677		/*
    678		 * Used in Samsung SGH-T599 "Codina TMO" and SGH-I407 "Kyle"
    679		 * Data from vendor boardfile board-kyle-[bm|battery].c
    680		 */
    681		.compatible = "samsung,eb425161la",
    682		.name = "EB425161LA",
    683		.info = {
    684			.charge_full_design_uah = 1500000,
    685			.technology = POWER_SUPPLY_TECHNOLOGY_LION,
    686			.factory_internal_resistance_uohm = 136000,
    687			.factory_internal_resistance_charging_uohm = 200000,
    688			/* If you have data on this fix the min_design_uv */
    689			.voltage_min_design_uv = 3320000,
    690			.voltage_max_design_uv = 4340000,
    691			.overvoltage_limit_uv = 4500000,
    692			.constant_charge_current_max_ua = 900000,
    693			.constant_charge_voltage_max_uv = 4320000,
    694			.charge_term_current_ua = 200000,
    695			.charge_restart_voltage_uv = 4270000,
    696			.maintenance_charge = samsung_maint_charge_table,
    697			.maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
    698			.alert_low_temp_charge_current_ua = 300000,
    699			.alert_low_temp_charge_voltage_uv = 4000000,
    700			.alert_high_temp_charge_current_ua = 300000,
    701			.alert_high_temp_charge_voltage_uv = 4000000,
    702			.temp_min = -30,
    703			.temp_alert_min = 0,
    704			.temp_alert_max = 40,
    705			.temp_max = 47,
    706			.resist_table = samsung_temp2res,
    707			.resist_table_size = ARRAY_SIZE(samsung_temp2res),
    708			/* If you have tables for more temperatures, add them */
    709			.ocv_temp[0] = 25,
    710			.ocv_table[0] = samsung_ocv_cap_1500mah,
    711			.ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_1500mah),
    712			.vbat2ri_discharging = samsung_vbat2res_discharging_eb425161la,
    713			.vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb425161la),
    714			.vbat2ri_charging = samsung_vbat2res_charging_eb425161la,
    715			.vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb425161la),
    716			.bti_resistance_ohm = 2400,
    717			.bti_resistance_tolerance = 40,
    718		},
    719	},
    720	{
    721		/*
    722		 * Used in Samsung GT-I8160 "Codina"
    723		 * Data from vendor boardfile board-codina-[bm|battery].c
    724		 */
    725		.compatible = "samsung,eb425161lu",
    726		.name = "EB425161LU",
    727		.info = {
    728			.charge_full_design_uah = 1500000,
    729			.technology = POWER_SUPPLY_TECHNOLOGY_LION,
    730			.factory_internal_resistance_uohm = 100000,
    731			.factory_internal_resistance_charging_uohm = 200000,
    732			/* If you have data on this fix the min_design_uv */
    733			.voltage_min_design_uv = 3320000,
    734			.voltage_max_design_uv = 4350000,
    735			.overvoltage_limit_uv = 4500000,
    736			.constant_charge_current_max_ua = 900000,
    737			.constant_charge_voltage_max_uv = 4340000,
    738			.charge_term_current_ua = 200000,
    739			.charge_restart_voltage_uv = 4280000,
    740			.maintenance_charge = samsung_maint_charge_table,
    741			.maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
    742			.alert_low_temp_charge_current_ua = 300000,
    743			.alert_low_temp_charge_voltage_uv = 4000000,
    744			.alert_high_temp_charge_current_ua = 300000,
    745			.alert_high_temp_charge_voltage_uv = 4000000,
    746			.temp_min = -50,
    747			.temp_alert_min = 0,
    748			.temp_alert_max = 43,
    749			.temp_max = 49,
    750			.resist_table = samsung_temp2res,
    751			.resist_table_size = ARRAY_SIZE(samsung_temp2res),
    752			/* If you have tables for more temperatures, add them */
    753			.ocv_temp[0] = 25,
    754			.ocv_table[0] = samsung_ocv_cap_1500mah,
    755			.ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_1500mah),
    756			.vbat2ri_discharging = samsung_vbat2res_discharging_eb425161lu,
    757			.vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb425161lu),
    758			.vbat2ri_charging = samsung_vbat2res_charging_eb425161lu,
    759			.vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb425161lu),
    760			.bti_resistance_ohm = 2400,
    761			.bti_resistance_tolerance = 40,
    762		},
    763	},
    764	{
    765		/*
    766		 * Used in Samsung GT-S7710 "Skomer"
    767		 * Data from vendor boardfile board-skomer-[bm|battery].c
    768		 */
    769		.compatible = "samsung,eb485159lu",
    770		.name = "EB485159LU",
    771		.info = {
    772			.charge_full_design_uah = 1700000,
    773			.technology = POWER_SUPPLY_TECHNOLOGY_LION,
    774			.factory_internal_resistance_uohm = 100000,
    775			.factory_internal_resistance_charging_uohm = 200000,
    776			.voltage_min_design_uv = 3320000,
    777			.voltage_max_design_uv = 4350000,
    778			.overvoltage_limit_uv = 4500000,
    779			.constant_charge_current_max_ua = 900000,
    780			.constant_charge_voltage_max_uv = 4340000,
    781			.charge_term_current_ua = 200000,
    782			.charge_restart_voltage_uv = 4300000,
    783			.maintenance_charge = samsung_maint_charge_table,
    784			.maintenance_charge_size = ARRAY_SIZE(samsung_maint_charge_table),
    785			.alert_low_temp_charge_current_ua = 300000,
    786			.alert_low_temp_charge_voltage_uv = 4000000,
    787			.alert_high_temp_charge_current_ua = 300000,
    788			.alert_high_temp_charge_voltage_uv = 4000000,
    789			.temp_min = -50,
    790			.temp_alert_min = 0,
    791			.temp_alert_max = 40,
    792			.temp_max = 60,
    793			.resist_table = samsung_temp2res,
    794			.resist_table_size = ARRAY_SIZE(samsung_temp2res),
    795			/* If you have tables for more temperatures, add them */
    796			.ocv_temp[0] = 25,
    797			.ocv_table[0] = samsung_ocv_cap_eb485159lu,
    798			.ocv_table_size[0] = ARRAY_SIZE(samsung_ocv_cap_eb485159lu),
    799			/* CHECKME: vendor uses the 1500 mAh table, check against datasheet */
    800			.vbat2ri_discharging = samsung_vbat2res_discharging_eb485159lu,
    801			.vbat2ri_discharging_size = ARRAY_SIZE(samsung_vbat2res_discharging_eb485159lu),
    802			.vbat2ri_charging = samsung_vbat2res_charging_eb485159lu,
    803			.vbat2ri_charging_size = ARRAY_SIZE(samsung_vbat2res_charging_eb485159lu),
    804			.bti_resistance_ohm = 2400,
    805			.bti_resistance_tolerance = 40,
    806		},
    807	},
    808	{
    809		/*
    810		 * Used in Samsung GT-I9070 "Janice"
    811		 * Data from vendor boardfile board-janice-bm.c
    812		 */
    813		.compatible = "samsung,eb535151vu",
    814		.name = "EB535151VU",
    815		.info = {
    816			.charge_full_design_uah = 1500000,
    817			.technology = POWER_SUPPLY_TECHNOLOGY_LION,
    818			.factory_internal_resistance_uohm = 100000,
    819			.factory_internal_resistance_charging_uohm = 200000,
    820			/* If you have data on this fix the min_design_uv */
    821			.voltage_min_design_uv = 3300000,
    822			.voltage_max_design_uv = 4180000,
    823			.overvoltage_limit_uv = 4500000,
    824			.constant_charge_current_max_ua = 900000,
    825			.constant_charge_voltage_max_uv = 4200000,
    826			.charge_term_current_ua = 200000,
    827			.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.c
    856		 */
    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);