crypto: caam - fix signals handling
[GitHub/mt8127/android_kernel_alcatel_ttab.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 }