crypto: caam - fix signals handling
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / power / ab8500_bmdata.c
CommitLineData
e0f1abeb
R
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 */
ea2be6f2 14const struct abx500_res_to_temp ab8500_temp_tbl_a_thermistor[] = {
e0f1abeb
R
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};
ea2be6f2 31EXPORT_SYMBOL(ab8500_temp_tbl_a_thermistor);
e0f1abeb 32
ea2be6f2
HZ
33const int ab8500_temp_tbl_a_size = ARRAY_SIZE(ab8500_temp_tbl_a_thermistor);
34EXPORT_SYMBOL(ab8500_temp_tbl_a_size);
35
36const struct abx500_res_to_temp ab8500_temp_tbl_b_thermistor[] = {
bd9e8ab2 37 {-5, 200000},
e0f1abeb
R
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};
ea2be6f2
HZ
53EXPORT_SYMBOL(ab8500_temp_tbl_b_thermistor);
54
55const int ab8500_temp_tbl_b_size = ARRAY_SIZE(ab8500_temp_tbl_b_thermistor);
56EXPORT_SYMBOL(ab8500_temp_tbl_b_size);
e0f1abeb 57
2c899407 58static const struct abx500_v_to_cap cap_tbl_a_thermistor[] = {
e0f1abeb
R
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
2c899407 81static const struct abx500_v_to_cap cap_tbl_b_thermistor[] = {
e0f1abeb
R
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
2c899407 104static const struct abx500_v_to_cap cap_tbl[] = {
e0f1abeb
R
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 */
2c899407 135static const struct abx500_res_to_temp temp_tbl[] = {
e0f1abeb
R
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 */
2c899407 157static const struct batres_vs_temp temp_to_batres_tbl_thermistor[] = {
e0f1abeb
R
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 */
2c899407 171static const struct batres_vs_temp temp_to_batres_tbl_ext_thermistor[] = {
e0f1abeb
R
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 */
2c899407 182static const struct batres_vs_temp temp_to_batres_tbl_9100[] = {
e0f1abeb
R
183 { 60, 180},
184 { 30, 180},
185 { 20, 180},
186 { 10, 180},
187 { 00, 180},
188 {-10, 180},
189 {-20, 180},
190};
191
192static struct abx500_battery_type bat_type_thermistor[] = {
43dc4470
LJ
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,
ea402401 203 .recharge_cap = 95,
43dc4470
LJ
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,
ea402401 230 .recharge_cap = 95,
43dc4470
LJ
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,
ea2be6f2
HZ
241 .n_temp_tbl_elements = ARRAY_SIZE(ab8500_temp_tbl_a_thermistor),
242 .r_to_t_tbl = ab8500_temp_tbl_a_thermistor,
6c1f8e02
HZ
243 .n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl_a_thermistor),
244 .v_to_cap_tbl = cap_tbl_a_thermistor,
43dc4470
LJ
245 .n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
246 .batres_tbl = temp_to_batres_tbl_thermistor,
e0f1abeb 247
43dc4470
LJ
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,
ea402401 258 .recharge_cap = 95,
43dc4470
LJ
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,
ea2be6f2
HZ
269 .n_temp_tbl_elements = ARRAY_SIZE(ab8500_temp_tbl_b_thermistor),
270 .r_to_t_tbl = ab8500_temp_tbl_b_thermistor,
6c1f8e02
HZ
271 .n_v_cap_tbl_elements = ARRAY_SIZE(cap_tbl_b_thermistor),
272 .v_to_cap_tbl = cap_tbl_b_thermistor,
43dc4470
LJ
273 .n_batres_tbl_elements = ARRAY_SIZE(temp_to_batres_tbl_thermistor),
274 .batres_tbl = temp_to_batres_tbl_thermistor,
275 },
e0f1abeb
R
276};
277
278static struct abx500_battery_type bat_type_ext_thermistor[] = {
43dc4470
LJ
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,
ea402401 289 .recharge_cap = 95,
43dc4470
LJ
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 },
e0f1abeb
R
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 */
43dc4470
LJ
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,
ea402401 321 .recharge_cap = 95,
43dc4470
LJ
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,
ea402401 348 .recharge_cap = 95,
43dc4470
LJ
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,
ea402401 375 .recharge_cap = 95,
43dc4470
LJ
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 },
e0f1abeb
R
393};
394
395static 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
403static 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,
ea402401 416 .maint_thres = 95,
e0f1abeb 417 .user_cap_limit = 15,
93ff722e
LJ
418 .pcut_enable = 1,
419 .pcut_max_time = 127,
420 .pcut_flag_time = 112,
421 .pcut_max_restart = 15,
422 .pcut_debounce_time = 2,
e0f1abeb
R
423};
424
861a30da 425static const struct abx500_maxim_parameters ab8500_maxi_params = {
e0f1abeb
R
426 .ena_maxi = true,
427 .chg_curr = 910,
428 .wait_cycles = 10,
429 .charger_curr_step = 100,
430};
431
861a30da
LJ
432static 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
e0f1abeb
R
439static 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
861a30da
LJ
446/*
447 * This array maps the raw hex value to charger output current used by the
448 * AB8500 values
449 */
450static 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
455static 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 */
470static 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
475static 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
e0f1abeb 486struct abx500_bm_data ab8500_bm_data = {
43dc4470
LJ
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,
ea402401 498 .capacity_scaling = false,
43dc4470
LJ
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,
861a30da 505 .n_btypes = ARRAY_SIZE(bat_type_thermistor),
43dc4470
LJ
506 .batt_id = 0,
507 .interval_charging = 5,
508 .interval_not_charging = 120,
509 .temp_hysteresis = 3,
510 .gnd_lift_resistance = 34,
861a30da
LJ
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,
43dc4470
LJ
514 .chg_params = &chg,
515 .fg_params = &fg,
861a30da
LJ
516 .chg_input_curr = ab8500_charge_input_curr_map,
517 .n_chg_in_curr = ARRAY_SIZE(ab8500_charge_input_curr_map),
518};
519
520struct 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),
e0f1abeb
R
552};
553
5a120391
LT
554int ab8500_bm_of_probe(struct device *dev,
555 struct device_node *np,
556 struct abx500_bm_data *bm)
e0f1abeb 557{
2c899407 558 const struct batres_vs_temp *tmp_batres_tbl;
215cf5c9 559 struct device_node *battery_node;
e0f1abeb 560 const char *btech;
8e3a71e5 561 int i;
e0f1abeb
R
562
563 /* get phandle to 'battery-info' node */
215cf5c9
LJ
564 battery_node = of_parse_phandle(np, "battery", 0);
565 if (!battery_node) {
8e3a71e5 566 dev_err(dev, "battery node or reference missing\n");
e0f1abeb
R
567 return -EINVAL;
568 }
e0f1abeb 569
215cf5c9 570 btech = of_get_property(battery_node, "stericsson,battery-type", NULL);
e0f1abeb
R
571 if (!btech) {
572 dev_warn(dev, "missing property battery-name/type\n");
f5695a39 573 return -EINVAL;
e0f1abeb
R
574 }
575
f5695a39 576 if (strncmp(btech, "LION", 4) == 0) {
23a04f9f
LJ
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;
ea402401 581 bm->bat_type[BATTERY_UNKNOWN].recharge_cap = 95;
23a04f9f
LJ
582 bm->bat_type[BATTERY_UNKNOWN].normal_cur_lvl = 520;
583 bm->bat_type[BATTERY_UNKNOWN].normal_vol_lvl = 4200;
e0f1abeb 584 }
43dc4470 585
215cf5c9 586 if (of_property_read_bool(battery_node, "thermistor-on-batctrl")) {
8e3a71e5
LJ
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 {
23a04f9f
LJ
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;
e0f1abeb 596 }
8e3a71e5
LJ
597
598 /* select the battery resolution table */
23a04f9f
LJ
599 for (i = 0; i < bm->n_btypes; ++i)
600 bm->bat_type[i].batres_tbl = tmp_batres_tbl;
8e3a71e5 601
215cf5c9 602 of_node_put(battery_node);
43dc4470 603
e0f1abeb
R
604 return 0;
605}