Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux...
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / power / ab8500_bmdata.c
1 #include <linux/export.h>
2 #include <linux/power_supply.h>
3 #include <linux/of.h>
4 #include <linux/mfd/abx500.h>
5 #include <linux/mfd/abx500/ab8500.h>
6 #include <linux/mfd/abx500/ab8500-bm.h>
7
8 /*
9  * These are the defined batteries that uses a NTC and ID resistor placed
10  * inside of the battery pack.
11  * Note that the res_to_temp table must be strictly sorted by falling resistance
12  * values to work.
13  */
14 const struct abx500_res_to_temp ab8500_temp_tbl_a_thermistor[] = {
15         {-5, 53407},
16         { 0, 48594},
17         { 5, 43804},
18         {10, 39188},
19         {15, 34870},
20         {20, 30933},
21         {25, 27422},
22         {30, 24347},
23         {35, 21694},
24         {40, 19431},
25         {45, 17517},
26         {50, 15908},
27         {55, 14561},
28         {60, 13437},
29         {65, 12500},
30 };
31 EXPORT_SYMBOL(ab8500_temp_tbl_a_thermistor);
32
33 const int ab8500_temp_tbl_a_size = ARRAY_SIZE(ab8500_temp_tbl_a_thermistor);
34 EXPORT_SYMBOL(ab8500_temp_tbl_a_size);
35
36 const struct abx500_res_to_temp ab8500_temp_tbl_b_thermistor[] = {
37         {-5, 200000},
38         { 0, 159024},
39         { 5, 151921},
40         {10, 144300},
41         {15, 136424},
42         {20, 128565},
43         {25, 120978},
44         {30, 113875},
45         {35, 107397},
46         {40, 101629},
47         {45,  96592},
48         {50,  92253},
49         {55,  88569},
50         {60,  85461},
51         {65,  82869},
52 };
53 EXPORT_SYMBOL(ab8500_temp_tbl_b_thermistor);
54
55 const int ab8500_temp_tbl_b_size = ARRAY_SIZE(ab8500_temp_tbl_b_thermistor);
56 EXPORT_SYMBOL(ab8500_temp_tbl_b_size);
57
58 static const struct abx500_v_to_cap cap_tbl_a_thermistor[] = {
59         {4171,  100},
60         {4114,   95},
61         {4009,   83},
62         {3947,   74},
63         {3907,   67},
64         {3863,   59},
65         {3830,   56},
66         {3813,   53},
67         {3791,   46},
68         {3771,   33},
69         {3754,   25},
70         {3735,   20},
71         {3717,   17},
72         {3681,   13},
73         {3664,    8},
74         {3651,    6},
75         {3635,    5},
76         {3560,    3},
77         {3408,    1},
78         {3247,    0},
79 };
80
81 static const struct abx500_v_to_cap cap_tbl_b_thermistor[] = {
82         {4161,  100},
83         {4124,   98},
84         {4044,   90},
85         {4003,   85},
86         {3966,   80},
87         {3933,   75},
88         {3888,   67},
89         {3849,   60},
90         {3813,   55},
91         {3787,   47},
92         {3772,   30},
93         {3751,   25},
94         {3718,   20},
95         {3681,   16},
96         {3660,   14},
97         {3589,   10},
98         {3546,    7},
99         {3495,    4},
100         {3404,    2},
101         {3250,    0},
102 };
103
104 static const struct abx500_v_to_cap cap_tbl[] = {
105         {4186,  100},
106         {4163,   99},
107         {4114,   95},
108         {4068,   90},
109         {3990,   80},
110         {3926,   70},
111         {3898,   65},
112         {3866,   60},
113         {3833,   55},
114         {3812,   50},
115         {3787,   40},
116         {3768,   30},
117         {3747,   25},
118         {3730,   20},
119         {3705,   15},
120         {3699,   14},
121         {3684,   12},
122         {3672,    9},
123         {3657,    7},
124         {3638,    6},
125         {3556,    4},
126         {3424,    2},
127         {3317,    1},
128         {3094,    0},
129 };
130
131 /*
132  * Note that the res_to_temp table must be strictly sorted by falling
133  * resistance values to work.
134  */
135 static const struct abx500_res_to_temp temp_tbl[] = {
136         {-5, 214834},
137         { 0, 162943},
138         { 5, 124820},
139         {10,  96520},
140         {15,  75306},
141         {20,  59254},
142         {25,  47000},
143         {30,  37566},
144         {35,  30245},
145         {40,  24520},
146         {45,  20010},
147         {50,  16432},
148         {55,  13576},
149         {60,  11280},
150         {65,   9425},
151 };
152
153 /*
154  * Note that the batres_vs_temp table must be strictly sorted by falling
155  * temperature values to work.
156  */
157 static const struct batres_vs_temp temp_to_batres_tbl_thermistor[] = {
158         { 40, 120},
159         { 30, 135},
160         { 20, 165},
161         { 10, 230},
162         { 00, 325},
163         {-10, 445},
164         {-20, 595},
165 };
166
167 /*
168  * Note that the batres_vs_temp table must be strictly sorted by falling
169  * temperature values to work.
170  */
171 static const struct batres_vs_temp temp_to_batres_tbl_ext_thermistor[] = {
172         { 60, 300},
173         { 30, 300},
174         { 20, 300},
175         { 10, 300},
176         { 00, 300},
177         {-10, 300},
178         {-20, 300},
179 };
180
181 /* battery resistance table for LI ION 9100 battery */
182 static const struct batres_vs_temp temp_to_batres_tbl_9100[] = {
183         { 60, 180},
184         { 30, 180},
185         { 20, 180},
186         { 10, 180},
187         { 00, 180},
188         {-10, 180},
189         {-20, 180},
190 };
191
192 static struct abx500_battery_type bat_type_thermistor[] = {
193         [BATTERY_UNKNOWN] = {
194                 /* First element always represent the UNKNOWN battery */
195                 .name = POWER_SUPPLY_TECHNOLOGY_UNKNOWN,
196                 .resis_high = 0,
197                 .resis_low = 0,
198                 .battery_resistance = 300,
199                 .charge_full_design = 612,
200                 .nominal_voltage = 3700,
201                 .termination_vol = 4050,
202                 .termination_curr = 200,
203                 .recharge_cap = 95,
204                 .normal_cur_lvl = 400,
205                 .normal_vol_lvl = 4100,
206                 .maint_a_cur_lvl = 400,
207                 .maint_a_vol_lvl = 4050,
208                 .maint_a_chg_timer_h = 60,
209                 .maint_b_cur_lvl = 400,
210                 .maint_b_vol_lvl = 4000,
211                 .maint_b_chg_timer_h = 200,
212                 .low_high_cur_lvl = 300,
213                 .low_high_vol_lvl = 4000,
214                 .n_temp_tbl_elements = ARRAY_SIZE(temp_tbl),
215                 .r_to_t_tbl = temp_tbl,
216                 .n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl),
217                 .v_to_cap_tbl = cap_tbl,
218                 .n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
219                 .batres_tbl = temp_to_batres_tbl_thermistor,
220         },
221         {
222                 .name = POWER_SUPPLY_TECHNOLOGY_LIPO,
223                 .resis_high = 53407,
224                 .resis_low = 12500,
225                 .battery_resistance = 300,
226                 .charge_full_design = 900,
227                 .nominal_voltage = 3600,
228                 .termination_vol = 4150,
229                 .termination_curr = 80,
230                 .recharge_cap = 95,
231                 .normal_cur_lvl = 700,
232                 .normal_vol_lvl = 4200,
233                 .maint_a_cur_lvl = 600,
234                 .maint_a_vol_lvl = 4150,
235                 .maint_a_chg_timer_h = 60,
236                 .maint_b_cur_lvl = 600,
237                 .maint_b_vol_lvl = 4100,
238                 .maint_b_chg_timer_h = 200,
239                 .low_high_cur_lvl = 300,
240                 .low_high_vol_lvl = 4000,
241                 .n_temp_tbl_elements = ARRAY_SIZE(ab8500_temp_tbl_a_thermistor),
242                 .r_to_t_tbl = ab8500_temp_tbl_a_thermistor,
243                 .n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl_a_thermistor),
244                 .v_to_cap_tbl = cap_tbl_a_thermistor,
245                 .n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
246                 .batres_tbl = temp_to_batres_tbl_thermistor,
247
248         },
249         {
250                 .name = POWER_SUPPLY_TECHNOLOGY_LIPO,
251                 .resis_high = 200000,
252                 .resis_low = 82869,
253                 .battery_resistance = 300,
254                 .charge_full_design = 900,
255                 .nominal_voltage = 3600,
256                 .termination_vol = 4150,
257                 .termination_curr = 80,
258                 .recharge_cap = 95,
259                 .normal_cur_lvl = 700,
260                 .normal_vol_lvl = 4200,
261                 .maint_a_cur_lvl = 600,
262                 .maint_a_vol_lvl = 4150,
263                 .maint_a_chg_timer_h = 60,
264                 .maint_b_cur_lvl = 600,
265                 .maint_b_vol_lvl = 4100,
266                 .maint_b_chg_timer_h = 200,
267                 .low_high_cur_lvl = 300,
268                 .low_high_vol_lvl = 4000,
269                 .n_temp_tbl_elements = ARRAY_SIZE(ab8500_temp_tbl_b_thermistor),
270                 .r_to_t_tbl = ab8500_temp_tbl_b_thermistor,
271                 .n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl_b_thermistor),
272                 .v_to_cap_tbl = cap_tbl_b_thermistor,
273                 .n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
274                 .batres_tbl = temp_to_batres_tbl_thermistor,
275         },
276 };
277
278 static struct abx500_battery_type bat_type_ext_thermistor[] = {
279         [BATTERY_UNKNOWN] = {
280                 /* First element always represent the UNKNOWN battery */
281                 .name = POWER_SUPPLY_TECHNOLOGY_UNKNOWN,
282                 .resis_high = 0,
283                 .resis_low = 0,
284                 .battery_resistance = 300,
285                 .charge_full_design = 612,
286                 .nominal_voltage = 3700,
287                 .termination_vol = 4050,
288                 .termination_curr = 200,
289                 .recharge_cap = 95,
290                 .normal_cur_lvl = 400,
291                 .normal_vol_lvl = 4100,
292                 .maint_a_cur_lvl = 400,
293                 .maint_a_vol_lvl = 4050,
294                 .maint_a_chg_timer_h = 60,
295                 .maint_b_cur_lvl = 400,
296                 .maint_b_vol_lvl = 4000,
297                 .maint_b_chg_timer_h = 200,
298                 .low_high_cur_lvl = 300,
299                 .low_high_vol_lvl = 4000,
300                 .n_temp_tbl_elements = ARRAY_SIZE(temp_tbl),
301                 .r_to_t_tbl = temp_tbl,
302                 .n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl),
303                 .v_to_cap_tbl = cap_tbl,
304                 .n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
305                 .batres_tbl = temp_to_batres_tbl_thermistor,
306         },
307 /*
308  * These are the batteries that doesn't have an internal NTC resistor to measure
309  * its temperature. The temperature in this case is measure with a NTC placed
310  * near the battery but on the PCB.
311  */
312         {
313                 .name = POWER_SUPPLY_TECHNOLOGY_LIPO,
314                 .resis_high = 76000,
315                 .resis_low = 53000,
316                 .battery_resistance = 300,
317                 .charge_full_design = 900,
318                 .nominal_voltage = 3700,
319                 .termination_vol = 4150,
320                 .termination_curr = 100,
321                 .recharge_cap = 95,
322                 .normal_cur_lvl = 700,
323                 .normal_vol_lvl = 4200,
324                 .maint_a_cur_lvl = 600,
325                 .maint_a_vol_lvl = 4150,
326                 .maint_a_chg_timer_h = 60,
327                 .maint_b_cur_lvl = 600,
328                 .maint_b_vol_lvl = 4100,
329                 .maint_b_chg_timer_h = 200,
330                 .low_high_cur_lvl = 300,
331                 .low_high_vol_lvl = 4000,
332                 .n_temp_tbl_elements = ARRAY_SIZE(temp_tbl),
333                 .r_to_t_tbl = temp_tbl,
334                 .n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl),
335                 .v_to_cap_tbl = cap_tbl,
336                 .n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
337                 .batres_tbl = temp_to_batres_tbl_thermistor,
338         },
339         {
340                 .name = POWER_SUPPLY_TECHNOLOGY_LION,
341                 .resis_high = 30000,
342                 .resis_low = 10000,
343                 .battery_resistance = 300,
344                 .charge_full_design = 950,
345                 .nominal_voltage = 3700,
346                 .termination_vol = 4150,
347                 .termination_curr = 100,
348                 .recharge_cap = 95,
349                 .normal_cur_lvl = 700,
350                 .normal_vol_lvl = 4200,
351                 .maint_a_cur_lvl = 600,
352                 .maint_a_vol_lvl = 4150,
353                 .maint_a_chg_timer_h = 60,
354                 .maint_b_cur_lvl = 600,
355                 .maint_b_vol_lvl = 4100,
356                 .maint_b_chg_timer_h = 200,
357                 .low_high_cur_lvl = 300,
358                 .low_high_vol_lvl = 4000,
359                 .n_temp_tbl_elements = ARRAY_SIZE(temp_tbl),
360                 .r_to_t_tbl = temp_tbl,
361                 .n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl),
362                 .v_to_cap_tbl = cap_tbl,
363                 .n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
364                 .batres_tbl = temp_to_batres_tbl_thermistor,
365         },
366         {
367                 .name = POWER_SUPPLY_TECHNOLOGY_LION,
368                 .resis_high = 95000,
369                 .resis_low = 76001,
370                 .battery_resistance = 300,
371                 .charge_full_design = 950,
372                 .nominal_voltage = 3700,
373                 .termination_vol = 4150,
374                 .termination_curr = 100,
375                 .recharge_cap = 95,
376                 .normal_cur_lvl = 700,
377                 .normal_vol_lvl = 4200,
378                 .maint_a_cur_lvl = 600,
379                 .maint_a_vol_lvl = 4150,
380                 .maint_a_chg_timer_h = 60,
381                 .maint_b_cur_lvl = 600,
382                 .maint_b_vol_lvl = 4100,
383                 .maint_b_chg_timer_h = 200,
384                 .low_high_cur_lvl = 300,
385                 .low_high_vol_lvl = 4000,
386                 .n_temp_tbl_elements = ARRAY_SIZE(temp_tbl),
387                 .r_to_t_tbl = temp_tbl,
388                 .n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl),
389                 .v_to_cap_tbl = cap_tbl,
390                 .n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
391                 .batres_tbl = temp_to_batres_tbl_thermistor,
392         },
393 };
394
395 static const struct abx500_bm_capacity_levels cap_levels = {
396         .critical       = 2,
397         .low            = 10,
398         .normal         = 70,
399         .high           = 95,
400         .full           = 100,
401 };
402
403 static const struct abx500_fg_parameters fg = {
404         .recovery_sleep_timer = 10,
405         .recovery_total_time = 100,
406         .init_timer = 1,
407         .init_discard_time = 5,
408         .init_total_time = 40,
409         .high_curr_time = 60,
410         .accu_charging = 30,
411         .accu_high_curr = 30,
412         .high_curr_threshold = 50,
413         .lowbat_threshold = 3100,
414         .battok_falling_th_sel0 = 2860,
415         .battok_raising_th_sel1 = 2860,
416         .maint_thres = 95,
417         .user_cap_limit = 15,
418         .pcut_enable = 1,
419         .pcut_max_time = 127,
420         .pcut_flag_time = 112,
421         .pcut_max_restart = 15,
422         .pcut_debounce_time = 2,
423 };
424
425 static const struct abx500_maxim_parameters ab8500_maxi_params = {
426         .ena_maxi = true,
427         .chg_curr = 910,
428         .wait_cycles = 10,
429         .charger_curr_step = 100,
430 };
431
432 static const struct abx500_maxim_parameters abx540_maxi_params = {
433         .ena_maxi = true,
434         .chg_curr = 3000,
435         .wait_cycles = 10,
436         .charger_curr_step = 200,
437 };
438
439 static const struct abx500_bm_charger_parameters chg = {
440         .usb_volt_max           = 5500,
441         .usb_curr_max           = 1500,
442         .ac_volt_max            = 7500,
443         .ac_curr_max            = 1500,
444 };
445
446 /*
447  * This array maps the raw hex value to charger output current used by the
448  * AB8500 values
449  */
450 static int ab8500_charge_output_curr_map[] = {
451         100,    200,    300,    400,    500,    600,    700,    800,
452         900,    1000,   1100,   1200,   1300,   1400,   1500,   1500,
453 };
454
455 static int ab8540_charge_output_curr_map[] = {
456         0,      0,      0,      75,     100,    125,    150,    175,
457         200,    225,    250,    275,    300,    325,    350,    375,
458         400,    425,    450,    475,    500,    525,    550,    575,
459         600,    625,    650,    675,    700,    725,    750,    775,
460         800,    825,    850,    875,    900,    925,    950,    975,
461         1000,   1025,   1050,   1075,   1100,   1125,   1150,   1175,
462         1200,   1225,   1250,   1275,   1300,   1325,   1350,   1375,
463         1400,   1425,   1450,   1500,   1600,   1700,   1900,   2000,
464 };
465
466 /*
467  * This array maps the raw hex value to charger input current used by the
468  * AB8500 values
469  */
470 static int ab8500_charge_input_curr_map[] = {
471         50,     98,     193,    290,    380,    450,    500,    600,
472         700,    800,    900,    1000,   1100,   1300,   1400,   1500,
473 };
474
475 static int ab8540_charge_input_curr_map[] = {
476         25,     50,     75,     100,    125,    150,    175,    200,
477         225,    250,    275,    300,    325,    350,    375,    400,
478         425,    450,    475,    500,    525,    550,    575,    600,
479         625,    650,    675,    700,    725,    750,    775,    800,
480         825,    850,    875,    900,    925,    950,    975,    1000,
481         1025,   1050,   1075,   1100,   1125,   1150,   1175,   1200,
482         1225,   1250,   1275,   1300,   1325,   1350,   1375,   1400,
483         1425,   1450,   1475,   1500,   1500,   1500,   1500,   1500,
484 };
485
486 struct abx500_bm_data ab8500_bm_data = {
487         .temp_under             = 3,
488         .temp_low               = 8,
489         .temp_high              = 43,
490         .temp_over              = 48,
491         .main_safety_tmr_h      = 4,
492         .temp_interval_chg      = 20,
493         .temp_interval_nochg    = 120,
494         .usb_safety_tmr_h       = 4,
495         .bkup_bat_v             = BUP_VCH_SEL_2P6V,
496         .bkup_bat_i             = BUP_ICH_SEL_150UA,
497         .no_maintenance         = false,
498         .capacity_scaling       = false,
499         .adc_therm              = ABx500_ADC_THERM_BATCTRL,
500         .chg_unknown_bat        = false,
501         .enable_overshoot       = false,
502         .fg_res                 = 100,
503         .cap_levels             = &cap_levels,
504         .bat_type               = bat_type_thermistor,
505         .n_btypes               = ARRAY_SIZE(bat_type_thermistor),
506         .batt_id                = 0,
507         .interval_charging      = 5,
508         .interval_not_charging  = 120,
509         .temp_hysteresis        = 3,
510         .gnd_lift_resistance    = 34,
511         .chg_output_curr        = ab8500_charge_output_curr_map,
512         .n_chg_out_curr         = ARRAY_SIZE(ab8500_charge_output_curr_map),
513         .maxi                   = &ab8500_maxi_params,
514         .chg_params             = &chg,
515         .fg_params              = &fg,
516         .chg_input_curr         = ab8500_charge_input_curr_map,
517         .n_chg_in_curr          = ARRAY_SIZE(ab8500_charge_input_curr_map),
518 };
519
520 struct abx500_bm_data ab8540_bm_data = {
521         .temp_under             = 3,
522         .temp_low               = 8,
523         .temp_high              = 43,
524         .temp_over              = 48,
525         .main_safety_tmr_h      = 4,
526         .temp_interval_chg      = 20,
527         .temp_interval_nochg    = 120,
528         .usb_safety_tmr_h       = 4,
529         .bkup_bat_v             = BUP_VCH_SEL_2P6V,
530         .bkup_bat_i             = BUP_ICH_SEL_150UA,
531         .no_maintenance         = false,
532         .capacity_scaling       = false,
533         .adc_therm              = ABx500_ADC_THERM_BATCTRL,
534         .chg_unknown_bat        = false,
535         .enable_overshoot       = false,
536         .fg_res                 = 100,
537         .cap_levels             = &cap_levels,
538         .bat_type               = bat_type_thermistor,
539         .n_btypes               = ARRAY_SIZE(bat_type_thermistor),
540         .batt_id                = 0,
541         .interval_charging      = 5,
542         .interval_not_charging  = 120,
543         .temp_hysteresis        = 3,
544         .gnd_lift_resistance    = 0,
545         .maxi                   = &abx540_maxi_params,
546         .chg_params             = &chg,
547         .fg_params              = &fg,
548         .chg_output_curr        = ab8540_charge_output_curr_map,
549         .n_chg_out_curr         = ARRAY_SIZE(ab8540_charge_output_curr_map),
550         .chg_input_curr         = ab8540_charge_input_curr_map,
551         .n_chg_in_curr          = ARRAY_SIZE(ab8540_charge_input_curr_map),
552 };
553
554 int ab8500_bm_of_probe(struct device *dev,
555                        struct device_node *np,
556                        struct abx500_bm_data *bm)
557 {
558         const struct batres_vs_temp *tmp_batres_tbl;
559         struct device_node *battery_node;
560         const char *btech;
561         int i;
562
563         /* get phandle to 'battery-info' node */
564         battery_node = of_parse_phandle(np, "battery", 0);
565         if (!battery_node) {
566                 dev_err(dev, "battery node or reference missing\n");
567                 return -EINVAL;
568         }
569
570         btech = of_get_property(battery_node, "stericsson,battery-type", NULL);
571         if (!btech) {
572                 dev_warn(dev, "missing property battery-name/type\n");
573                 return -EINVAL;
574         }
575
576         if (strncmp(btech, "LION", 4) == 0) {
577                 bm->no_maintenance  = true;
578                 bm->chg_unknown_bat = true;
579                 bm->bat_type[BATTERY_UNKNOWN].charge_full_design = 2600;
580                 bm->bat_type[BATTERY_UNKNOWN].termination_vol    = 4150;
581                 bm->bat_type[BATTERY_UNKNOWN].recharge_cap       = 95;
582                 bm->bat_type[BATTERY_UNKNOWN].normal_cur_lvl     = 520;
583                 bm->bat_type[BATTERY_UNKNOWN].normal_vol_lvl     = 4200;
584         }
585
586         if (of_property_read_bool(battery_node, "thermistor-on-batctrl")) {
587                 if (strncmp(btech, "LION", 4) == 0)
588                         tmp_batres_tbl = temp_to_batres_tbl_9100;
589                 else
590                         tmp_batres_tbl = temp_to_batres_tbl_thermistor;
591         } else {
592                 bm->n_btypes   = 4;
593                 bm->bat_type   = bat_type_ext_thermistor;
594                 bm->adc_therm  = ABx500_ADC_THERM_BATTEMP;
595                 tmp_batres_tbl = temp_to_batres_tbl_ext_thermistor;
596         }
597
598         /* select the battery resolution table */
599         for (i = 0; i < bm->n_btypes; ++i)
600                 bm->bat_type[i].batres_tbl = tmp_batres_tbl;
601
602         of_node_put(battery_node);
603
604         return 0;
605 }