• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) ST-Ericsson AB 2012
3  *
4  * Main and Back-up battery management driver.
5  *
6  * Note: Backup battery management is required in case of Li-Ion battery and not
7  * for capacitive battery. HREF boards have capacitive battery and hence backup
8  * battery management is not used and the supported code is available in this
9  * driver.
10  *
11  * License Terms: GNU General Public License v2
12  * Author:
13  *	Johan Palsson <johan.palsson@stericsson.com>
14  *	Karl Komierowski <karl.komierowski@stericsson.com>
15  *	Arun R Murthy <arun.murthy@stericsson.com>
16  */
17 
18 #include <linux/init.h>
19 #include <linux/module.h>
20 #include <linux/device.h>
21 #include <linux/interrupt.h>
22 #include <linux/platform_device.h>
23 #include <linux/power_supply.h>
24 #include <linux/kobject.h>
25 #include <linux/slab.h>
26 #include <linux/delay.h>
27 #include <linux/time.h>
28 #include <linux/of.h>
29 #include <linux/completion.h>
30 #include <linux/mfd/core.h>
31 #include <linux/mfd/abx500.h>
32 #include <linux/mfd/abx500/ab8500.h>
33 #include <linux/mfd/abx500/ab8500-bm.h>
34 #include <linux/mfd/abx500/ab8500-gpadc.h>
35 #include <linux/kernel.h>
36 
37 #define MILLI_TO_MICRO			1000
38 #define FG_LSB_IN_MA			1627
39 #define QLSB_NANO_AMP_HOURS_X10		1071
40 #define INS_CURR_TIMEOUT		(3 * HZ)
41 
42 #define SEC_TO_SAMPLE(S)		(S * 4)
43 
44 #define NBR_AVG_SAMPLES			20
45 
46 #define LOW_BAT_CHECK_INTERVAL		(HZ / 16) /* 62.5 ms */
47 
48 #define VALID_CAPACITY_SEC		(45 * 60) /* 45 minutes */
49 #define BATT_OK_MIN			2360 /* mV */
50 #define BATT_OK_INCREMENT		50 /* mV */
51 #define BATT_OK_MAX_NR_INCREMENTS	0xE
52 
53 /* FG constants */
54 #define BATT_OVV			0x01
55 
56 #define interpolate(x, x1, y1, x2, y2) \
57 	((y1) + ((((y2) - (y1)) * ((x) - (x1))) / ((x2) - (x1))));
58 
59 #define to_ab8500_fg_device_info(x) container_of((x), \
60 	struct ab8500_fg, fg_psy);
61 
62 /**
63  * struct ab8500_fg_interrupts - ab8500 fg interupts
64  * @name:	name of the interrupt
65  * @isr		function pointer to the isr
66  */
67 struct ab8500_fg_interrupts {
68 	char *name;
69 	irqreturn_t (*isr)(int irq, void *data);
70 };
71 
72 enum ab8500_fg_discharge_state {
73 	AB8500_FG_DISCHARGE_INIT,
74 	AB8500_FG_DISCHARGE_INITMEASURING,
75 	AB8500_FG_DISCHARGE_INIT_RECOVERY,
76 	AB8500_FG_DISCHARGE_RECOVERY,
77 	AB8500_FG_DISCHARGE_READOUT_INIT,
78 	AB8500_FG_DISCHARGE_READOUT,
79 	AB8500_FG_DISCHARGE_WAKEUP,
80 };
81 
82 static char *discharge_state[] = {
83 	"DISCHARGE_INIT",
84 	"DISCHARGE_INITMEASURING",
85 	"DISCHARGE_INIT_RECOVERY",
86 	"DISCHARGE_RECOVERY",
87 	"DISCHARGE_READOUT_INIT",
88 	"DISCHARGE_READOUT",
89 	"DISCHARGE_WAKEUP",
90 };
91 
92 enum ab8500_fg_charge_state {
93 	AB8500_FG_CHARGE_INIT,
94 	AB8500_FG_CHARGE_READOUT,
95 };
96 
97 static char *charge_state[] = {
98 	"CHARGE_INIT",
99 	"CHARGE_READOUT",
100 };
101 
102 enum ab8500_fg_calibration_state {
103 	AB8500_FG_CALIB_INIT,
104 	AB8500_FG_CALIB_WAIT,
105 	AB8500_FG_CALIB_END,
106 };
107 
108 struct ab8500_fg_avg_cap {
109 	int avg;
110 	int samples[NBR_AVG_SAMPLES];
111 	__kernel_time_t time_stamps[NBR_AVG_SAMPLES];
112 	int pos;
113 	int nbr_samples;
114 	int sum;
115 };
116 
117 struct ab8500_fg_cap_scaling {
118 	bool enable;
119 	int cap_to_scale[2];
120 	int disable_cap_level;
121 	int scaled_cap;
122 };
123 
124 struct ab8500_fg_battery_capacity {
125 	int max_mah_design;
126 	int max_mah;
127 	int mah;
128 	int permille;
129 	int level;
130 	int prev_mah;
131 	int prev_percent;
132 	int prev_level;
133 	int user_mah;
134 	struct ab8500_fg_cap_scaling cap_scale;
135 };
136 
137 struct ab8500_fg_flags {
138 	bool fg_enabled;
139 	bool conv_done;
140 	bool charging;
141 	bool fully_charged;
142 	bool force_full;
143 	bool low_bat_delay;
144 	bool low_bat;
145 	bool bat_ovv;
146 	bool batt_unknown;
147 	bool calibrate;
148 	bool user_cap;
149 	bool batt_id_received;
150 };
151 
152 struct inst_curr_result_list {
153 	struct list_head list;
154 	int *result;
155 };
156 
157 /**
158  * struct ab8500_fg - ab8500 FG device information
159  * @dev:		Pointer to the structure device
160  * @node:		a list of AB8500 FGs, hence prepared for reentrance
161  * @irq			holds the CCEOC interrupt number
162  * @vbat:		Battery voltage in mV
163  * @vbat_nom:		Nominal battery voltage in mV
164  * @inst_curr:		Instantenous battery current in mA
165  * @avg_curr:		Average battery current in mA
166  * @bat_temp		battery temperature
167  * @fg_samples:		Number of samples used in the FG accumulation
168  * @accu_charge:	Accumulated charge from the last conversion
169  * @recovery_cnt:	Counter for recovery mode
170  * @high_curr_cnt:	Counter for high current mode
171  * @init_cnt:		Counter for init mode
172  * @low_bat_cnt		Counter for number of consecutive low battery measures
173  * @nbr_cceoc_irq_cnt	Counter for number of CCEOC irqs received since enabled
174  * @recovery_needed:	Indicate if recovery is needed
175  * @high_curr_mode:	Indicate if we're in high current mode
176  * @init_capacity:	Indicate if initial capacity measuring should be done
177  * @turn_off_fg:	True if fg was off before current measurement
178  * @calib_state		State during offset calibration
179  * @discharge_state:	Current discharge state
180  * @charge_state:	Current charge state
181  * @ab8500_fg_started	Completion struct used for the instant current start
182  * @ab8500_fg_complete	Completion struct used for the instant current reading
183  * @flags:		Structure for information about events triggered
184  * @bat_cap:		Structure for battery capacity specific parameters
185  * @avg_cap:		Average capacity filter
186  * @parent:		Pointer to the struct ab8500
187  * @gpadc:		Pointer to the struct gpadc
188  * @bm:           	Platform specific battery management information
189  * @fg_psy:		Structure that holds the FG specific battery properties
190  * @fg_wq:		Work queue for running the FG algorithm
191  * @fg_periodic_work:	Work to run the FG algorithm periodically
192  * @fg_low_bat_work:	Work to check low bat condition
193  * @fg_reinit_work	Work used to reset and reinitialise the FG algorithm
194  * @fg_work:		Work to run the FG algorithm instantly
195  * @fg_acc_cur_work:	Work to read the FG accumulator
196  * @fg_check_hw_failure_work:	Work for checking HW state
197  * @cc_lock:		Mutex for locking the CC
198  * @fg_kobject:		Structure of type kobject
199  */
200 struct ab8500_fg {
201 	struct device *dev;
202 	struct list_head node;
203 	int irq;
204 	int vbat;
205 	int vbat_nom;
206 	int inst_curr;
207 	int avg_curr;
208 	int bat_temp;
209 	int fg_samples;
210 	int accu_charge;
211 	int recovery_cnt;
212 	int high_curr_cnt;
213 	int init_cnt;
214 	int low_bat_cnt;
215 	int nbr_cceoc_irq_cnt;
216 	bool recovery_needed;
217 	bool high_curr_mode;
218 	bool init_capacity;
219 	bool turn_off_fg;
220 	enum ab8500_fg_calibration_state calib_state;
221 	enum ab8500_fg_discharge_state discharge_state;
222 	enum ab8500_fg_charge_state charge_state;
223 	struct completion ab8500_fg_started;
224 	struct completion ab8500_fg_complete;
225 	struct ab8500_fg_flags flags;
226 	struct ab8500_fg_battery_capacity bat_cap;
227 	struct ab8500_fg_avg_cap avg_cap;
228 	struct ab8500 *parent;
229 	struct ab8500_gpadc *gpadc;
230 	struct abx500_bm_data *bm;
231 	struct power_supply fg_psy;
232 	struct workqueue_struct *fg_wq;
233 	struct delayed_work fg_periodic_work;
234 	struct delayed_work fg_low_bat_work;
235 	struct delayed_work fg_reinit_work;
236 	struct work_struct fg_work;
237 	struct work_struct fg_acc_cur_work;
238 	struct delayed_work fg_check_hw_failure_work;
239 	struct mutex cc_lock;
240 	struct kobject fg_kobject;
241 };
242 static LIST_HEAD(ab8500_fg_list);
243 
244 /**
245  * ab8500_fg_get() - returns a reference to the primary AB8500 fuel gauge
246  * (i.e. the first fuel gauge in the instance list)
247  */
ab8500_fg_get(void)248 struct ab8500_fg *ab8500_fg_get(void)
249 {
250 	struct ab8500_fg *fg;
251 
252 	if (list_empty(&ab8500_fg_list))
253 		return NULL;
254 
255 	fg = list_first_entry(&ab8500_fg_list, struct ab8500_fg, node);
256 	return fg;
257 }
258 
259 /* Main battery properties */
260 static enum power_supply_property ab8500_fg_props[] = {
261 	POWER_SUPPLY_PROP_VOLTAGE_NOW,
262 	POWER_SUPPLY_PROP_CURRENT_NOW,
263 	POWER_SUPPLY_PROP_CURRENT_AVG,
264 	POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN,
265 	POWER_SUPPLY_PROP_ENERGY_FULL,
266 	POWER_SUPPLY_PROP_ENERGY_NOW,
267 	POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN,
268 	POWER_SUPPLY_PROP_CHARGE_FULL,
269 	POWER_SUPPLY_PROP_CHARGE_NOW,
270 	POWER_SUPPLY_PROP_CAPACITY,
271 	POWER_SUPPLY_PROP_CAPACITY_LEVEL,
272 };
273 
274 /*
275  * This array maps the raw hex value to lowbat voltage used by the AB8500
276  * Values taken from the UM0836
277  */
278 static int ab8500_fg_lowbat_voltage_map[] = {
279 	2300 ,
280 	2325 ,
281 	2350 ,
282 	2375 ,
283 	2400 ,
284 	2425 ,
285 	2450 ,
286 	2475 ,
287 	2500 ,
288 	2525 ,
289 	2550 ,
290 	2575 ,
291 	2600 ,
292 	2625 ,
293 	2650 ,
294 	2675 ,
295 	2700 ,
296 	2725 ,
297 	2750 ,
298 	2775 ,
299 	2800 ,
300 	2825 ,
301 	2850 ,
302 	2875 ,
303 	2900 ,
304 	2925 ,
305 	2950 ,
306 	2975 ,
307 	3000 ,
308 	3025 ,
309 	3050 ,
310 	3075 ,
311 	3100 ,
312 	3125 ,
313 	3150 ,
314 	3175 ,
315 	3200 ,
316 	3225 ,
317 	3250 ,
318 	3275 ,
319 	3300 ,
320 	3325 ,
321 	3350 ,
322 	3375 ,
323 	3400 ,
324 	3425 ,
325 	3450 ,
326 	3475 ,
327 	3500 ,
328 	3525 ,
329 	3550 ,
330 	3575 ,
331 	3600 ,
332 	3625 ,
333 	3650 ,
334 	3675 ,
335 	3700 ,
336 	3725 ,
337 	3750 ,
338 	3775 ,
339 	3800 ,
340 	3825 ,
341 	3850 ,
342 	3850 ,
343 };
344 
ab8500_volt_to_regval(int voltage)345 static u8 ab8500_volt_to_regval(int voltage)
346 {
347 	int i;
348 
349 	if (voltage < ab8500_fg_lowbat_voltage_map[0])
350 		return 0;
351 
352 	for (i = 0; i < ARRAY_SIZE(ab8500_fg_lowbat_voltage_map); i++) {
353 		if (voltage < ab8500_fg_lowbat_voltage_map[i])
354 			return (u8) i - 1;
355 	}
356 
357 	/* If not captured above, return index of last element */
358 	return (u8) ARRAY_SIZE(ab8500_fg_lowbat_voltage_map) - 1;
359 }
360 
361 /**
362  * ab8500_fg_is_low_curr() - Low or high current mode
363  * @di:		pointer to the ab8500_fg structure
364  * @curr:	the current to base or our decision on
365  *
366  * Low current mode if the current consumption is below a certain threshold
367  */
ab8500_fg_is_low_curr(struct ab8500_fg * di,int curr)368 static int ab8500_fg_is_low_curr(struct ab8500_fg *di, int curr)
369 {
370 	/*
371 	 * We want to know if we're in low current mode
372 	 */
373 	if (curr > -di->bm->fg_params->high_curr_threshold)
374 		return true;
375 	else
376 		return false;
377 }
378 
379 /**
380  * ab8500_fg_add_cap_sample() - Add capacity to average filter
381  * @di:		pointer to the ab8500_fg structure
382  * @sample:	the capacity in mAh to add to the filter
383  *
384  * A capacity is added to the filter and a new mean capacity is calculated and
385  * returned
386  */
ab8500_fg_add_cap_sample(struct ab8500_fg * di,int sample)387 static int ab8500_fg_add_cap_sample(struct ab8500_fg *di, int sample)
388 {
389 	struct timespec ts;
390 	struct ab8500_fg_avg_cap *avg = &di->avg_cap;
391 
392 	getnstimeofday(&ts);
393 
394 	do {
395 		avg->sum += sample - avg->samples[avg->pos];
396 		avg->samples[avg->pos] = sample;
397 		avg->time_stamps[avg->pos] = ts.tv_sec;
398 		avg->pos++;
399 
400 		if (avg->pos == NBR_AVG_SAMPLES)
401 			avg->pos = 0;
402 
403 		if (avg->nbr_samples < NBR_AVG_SAMPLES)
404 			avg->nbr_samples++;
405 
406 		/*
407 		 * Check the time stamp for each sample. If too old,
408 		 * replace with latest sample
409 		 */
410 	} while (ts.tv_sec - VALID_CAPACITY_SEC > avg->time_stamps[avg->pos]);
411 
412 	avg->avg = avg->sum / avg->nbr_samples;
413 
414 	return avg->avg;
415 }
416 
417 /**
418  * ab8500_fg_clear_cap_samples() - Clear average filter
419  * @di:		pointer to the ab8500_fg structure
420  *
421  * The capacity filter is is reset to zero.
422  */
ab8500_fg_clear_cap_samples(struct ab8500_fg * di)423 static void ab8500_fg_clear_cap_samples(struct ab8500_fg *di)
424 {
425 	int i;
426 	struct ab8500_fg_avg_cap *avg = &di->avg_cap;
427 
428 	avg->pos = 0;
429 	avg->nbr_samples = 0;
430 	avg->sum = 0;
431 	avg->avg = 0;
432 
433 	for (i = 0; i < NBR_AVG_SAMPLES; i++) {
434 		avg->samples[i] = 0;
435 		avg->time_stamps[i] = 0;
436 	}
437 }
438 
439 /**
440  * ab8500_fg_fill_cap_sample() - Fill average filter
441  * @di:		pointer to the ab8500_fg structure
442  * @sample:	the capacity in mAh to fill the filter with
443  *
444  * The capacity filter is filled with a capacity in mAh
445  */
ab8500_fg_fill_cap_sample(struct ab8500_fg * di,int sample)446 static void ab8500_fg_fill_cap_sample(struct ab8500_fg *di, int sample)
447 {
448 	int i;
449 	struct timespec ts;
450 	struct ab8500_fg_avg_cap *avg = &di->avg_cap;
451 
452 	getnstimeofday(&ts);
453 
454 	for (i = 0; i < NBR_AVG_SAMPLES; i++) {
455 		avg->samples[i] = sample;
456 		avg->time_stamps[i] = ts.tv_sec;
457 	}
458 
459 	avg->pos = 0;
460 	avg->nbr_samples = NBR_AVG_SAMPLES;
461 	avg->sum = sample * NBR_AVG_SAMPLES;
462 	avg->avg = sample;
463 }
464 
465 /**
466  * ab8500_fg_coulomb_counter() - enable coulomb counter
467  * @di:		pointer to the ab8500_fg structure
468  * @enable:	enable/disable
469  *
470  * Enable/Disable coulomb counter.
471  * On failure returns negative value.
472  */
ab8500_fg_coulomb_counter(struct ab8500_fg * di,bool enable)473 static int ab8500_fg_coulomb_counter(struct ab8500_fg *di, bool enable)
474 {
475 	int ret = 0;
476 	mutex_lock(&di->cc_lock);
477 	if (enable) {
478 		/* To be able to reprogram the number of samples, we have to
479 		 * first stop the CC and then enable it again */
480 		ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
481 			AB8500_RTC_CC_CONF_REG, 0x00);
482 		if (ret)
483 			goto cc_err;
484 
485 		/* Program the samples */
486 		ret = abx500_set_register_interruptible(di->dev,
487 			AB8500_GAS_GAUGE, AB8500_GASG_CC_NCOV_ACCU,
488 			di->fg_samples);
489 		if (ret)
490 			goto cc_err;
491 
492 		/* Start the CC */
493 		ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
494 			AB8500_RTC_CC_CONF_REG,
495 			(CC_DEEP_SLEEP_ENA | CC_PWR_UP_ENA));
496 		if (ret)
497 			goto cc_err;
498 
499 		di->flags.fg_enabled = true;
500 	} else {
501 		/* Clear any pending read requests */
502 		ret = abx500_mask_and_set_register_interruptible(di->dev,
503 			AB8500_GAS_GAUGE, AB8500_GASG_CC_CTRL_REG,
504 			(RESET_ACCU | READ_REQ), 0);
505 		if (ret)
506 			goto cc_err;
507 
508 		ret = abx500_set_register_interruptible(di->dev,
509 			AB8500_GAS_GAUGE, AB8500_GASG_CC_NCOV_ACCU_CTRL, 0);
510 		if (ret)
511 			goto cc_err;
512 
513 		/* Stop the CC */
514 		ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
515 			AB8500_RTC_CC_CONF_REG, 0);
516 		if (ret)
517 			goto cc_err;
518 
519 		di->flags.fg_enabled = false;
520 
521 	}
522 	dev_dbg(di->dev, " CC enabled: %d Samples: %d\n",
523 		enable, di->fg_samples);
524 
525 	mutex_unlock(&di->cc_lock);
526 
527 	return ret;
528 cc_err:
529 	dev_err(di->dev, "%s Enabling coulomb counter failed\n", __func__);
530 	mutex_unlock(&di->cc_lock);
531 	return ret;
532 }
533 
534 /**
535  * ab8500_fg_inst_curr_start() - start battery instantaneous current
536  * @di:         pointer to the ab8500_fg structure
537  *
538  * Returns 0 or error code
539  * Note: This is part "one" and has to be called before
540  * ab8500_fg_inst_curr_finalize()
541  */
ab8500_fg_inst_curr_start(struct ab8500_fg * di)542 int ab8500_fg_inst_curr_start(struct ab8500_fg *di)
543 {
544 	u8 reg_val;
545 	int ret;
546 
547 	mutex_lock(&di->cc_lock);
548 
549 	di->nbr_cceoc_irq_cnt = 0;
550 	ret = abx500_get_register_interruptible(di->dev, AB8500_RTC,
551 		AB8500_RTC_CC_CONF_REG, &reg_val);
552 	if (ret < 0)
553 		goto fail;
554 
555 	if (!(reg_val & CC_PWR_UP_ENA)) {
556 		dev_dbg(di->dev, "%s Enable FG\n", __func__);
557 		di->turn_off_fg = true;
558 
559 		/* Program the samples */
560 		ret = abx500_set_register_interruptible(di->dev,
561 			AB8500_GAS_GAUGE, AB8500_GASG_CC_NCOV_ACCU,
562 			SEC_TO_SAMPLE(10));
563 		if (ret)
564 			goto fail;
565 
566 		/* Start the CC */
567 		ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
568 			AB8500_RTC_CC_CONF_REG,
569 			(CC_DEEP_SLEEP_ENA | CC_PWR_UP_ENA));
570 		if (ret)
571 			goto fail;
572 	} else {
573 		di->turn_off_fg = false;
574 	}
575 
576 	/* Return and WFI */
577 	INIT_COMPLETION(di->ab8500_fg_started);
578 	INIT_COMPLETION(di->ab8500_fg_complete);
579 	enable_irq(di->irq);
580 
581 	/* Note: cc_lock is still locked */
582 	return 0;
583 fail:
584 	mutex_unlock(&di->cc_lock);
585 	return ret;
586 }
587 
588 /**
589  * ab8500_fg_inst_curr_started() - check if fg conversion has started
590  * @di:         pointer to the ab8500_fg structure
591  *
592  * Returns 1 if conversion started, 0 if still waiting
593  */
ab8500_fg_inst_curr_started(struct ab8500_fg * di)594 int ab8500_fg_inst_curr_started(struct ab8500_fg *di)
595 {
596 	return completion_done(&di->ab8500_fg_started);
597 }
598 
599 /**
600  * ab8500_fg_inst_curr_done() - check if fg conversion is done
601  * @di:         pointer to the ab8500_fg structure
602  *
603  * Returns 1 if conversion done, 0 if still waiting
604  */
ab8500_fg_inst_curr_done(struct ab8500_fg * di)605 int ab8500_fg_inst_curr_done(struct ab8500_fg *di)
606 {
607 	return completion_done(&di->ab8500_fg_complete);
608 }
609 
610 /**
611  * ab8500_fg_inst_curr_finalize() - battery instantaneous current
612  * @di:         pointer to the ab8500_fg structure
613  * @res:	battery instantenous current(on success)
614  *
615  * Returns 0 or an error code
616  * Note: This is part "two" and has to be called at earliest 250 ms
617  * after ab8500_fg_inst_curr_start()
618  */
ab8500_fg_inst_curr_finalize(struct ab8500_fg * di,int * res)619 int ab8500_fg_inst_curr_finalize(struct ab8500_fg *di, int *res)
620 {
621 	u8 low, high;
622 	int val;
623 	int ret;
624 	int timeout;
625 
626 	if (!completion_done(&di->ab8500_fg_complete)) {
627 		timeout = wait_for_completion_timeout(
628 			&di->ab8500_fg_complete,
629 			INS_CURR_TIMEOUT);
630 		dev_dbg(di->dev, "Finalize time: %d ms\n",
631 			((INS_CURR_TIMEOUT - timeout) * 1000) / HZ);
632 		if (!timeout) {
633 			ret = -ETIME;
634 			disable_irq(di->irq);
635 			di->nbr_cceoc_irq_cnt = 0;
636 			dev_err(di->dev, "completion timed out [%d]\n",
637 				__LINE__);
638 			goto fail;
639 		}
640 	}
641 
642 	disable_irq(di->irq);
643 	di->nbr_cceoc_irq_cnt = 0;
644 
645 	ret = abx500_mask_and_set_register_interruptible(di->dev,
646 			AB8500_GAS_GAUGE, AB8500_GASG_CC_CTRL_REG,
647 			READ_REQ, READ_REQ);
648 
649 	/* 100uS between read request and read is needed */
650 	usleep_range(100, 100);
651 
652 	/* Read CC Sample conversion value Low and high */
653 	ret = abx500_get_register_interruptible(di->dev, AB8500_GAS_GAUGE,
654 		AB8500_GASG_CC_SMPL_CNVL_REG,  &low);
655 	if (ret < 0)
656 		goto fail;
657 
658 	ret = abx500_get_register_interruptible(di->dev, AB8500_GAS_GAUGE,
659 		AB8500_GASG_CC_SMPL_CNVH_REG,  &high);
660 	if (ret < 0)
661 		goto fail;
662 
663 	/*
664 	 * negative value for Discharging
665 	 * convert 2's compliment into decimal
666 	 */
667 	if (high & 0x10)
668 		val = (low | (high << 8) | 0xFFFFE000);
669 	else
670 		val = (low | (high << 8));
671 
672 	/*
673 	 * Convert to unit value in mA
674 	 * Full scale input voltage is
675 	 * 63.160mV => LSB = 63.160mV/(4096*res) = 1.542mA
676 	 * Given a 250ms conversion cycle time the LSB corresponds
677 	 * to 107.1 nAh. Convert to current by dividing by the conversion
678 	 * time in hours (250ms = 1 / (3600 * 4)h)
679 	 * 107.1nAh assumes 10mOhm, but fg_res is in 0.1mOhm
680 	 */
681 	val = (val * QLSB_NANO_AMP_HOURS_X10 * 36 * 4) /
682 		(1000 * di->bm->fg_res);
683 
684 	if (di->turn_off_fg) {
685 		dev_dbg(di->dev, "%s Disable FG\n", __func__);
686 
687 		/* Clear any pending read requests */
688 		ret = abx500_set_register_interruptible(di->dev,
689 			AB8500_GAS_GAUGE, AB8500_GASG_CC_CTRL_REG, 0);
690 		if (ret)
691 			goto fail;
692 
693 		/* Stop the CC */
694 		ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
695 			AB8500_RTC_CC_CONF_REG, 0);
696 		if (ret)
697 			goto fail;
698 	}
699 	mutex_unlock(&di->cc_lock);
700 	(*res) = val;
701 
702 	return 0;
703 fail:
704 	mutex_unlock(&di->cc_lock);
705 	return ret;
706 }
707 
708 /**
709  * ab8500_fg_inst_curr_blocking() - battery instantaneous current
710  * @di:         pointer to the ab8500_fg structure
711  * @res:	battery instantenous current(on success)
712  *
713  * Returns 0 else error code
714  */
ab8500_fg_inst_curr_blocking(struct ab8500_fg * di)715 int ab8500_fg_inst_curr_blocking(struct ab8500_fg *di)
716 {
717 	int ret;
718 	int timeout;
719 	int res = 0;
720 
721 	ret = ab8500_fg_inst_curr_start(di);
722 	if (ret) {
723 		dev_err(di->dev, "Failed to initialize fg_inst\n");
724 		return 0;
725 	}
726 
727 	/* Wait for CC to actually start */
728 	if (!completion_done(&di->ab8500_fg_started)) {
729 		timeout = wait_for_completion_timeout(
730 			&di->ab8500_fg_started,
731 			INS_CURR_TIMEOUT);
732 		dev_dbg(di->dev, "Start time: %d ms\n",
733 			((INS_CURR_TIMEOUT - timeout) * 1000) / HZ);
734 		if (!timeout) {
735 			ret = -ETIME;
736 			dev_err(di->dev, "completion timed out [%d]\n",
737 				__LINE__);
738 			goto fail;
739 		}
740 	}
741 
742 	ret = ab8500_fg_inst_curr_finalize(di, &res);
743 	if (ret) {
744 		dev_err(di->dev, "Failed to finalize fg_inst\n");
745 		return 0;
746 	}
747 
748 	dev_dbg(di->dev, "%s instant current: %d", __func__, res);
749 	return res;
750 fail:
751 	disable_irq(di->irq);
752 	mutex_unlock(&di->cc_lock);
753 	return ret;
754 }
755 
756 /**
757  * ab8500_fg_acc_cur_work() - average battery current
758  * @work:	pointer to the work_struct structure
759  *
760  * Updated the average battery current obtained from the
761  * coulomb counter.
762  */
ab8500_fg_acc_cur_work(struct work_struct * work)763 static void ab8500_fg_acc_cur_work(struct work_struct *work)
764 {
765 	int val;
766 	int ret;
767 	u8 low, med, high;
768 
769 	struct ab8500_fg *di = container_of(work,
770 		struct ab8500_fg, fg_acc_cur_work);
771 
772 	mutex_lock(&di->cc_lock);
773 	ret = abx500_set_register_interruptible(di->dev, AB8500_GAS_GAUGE,
774 		AB8500_GASG_CC_NCOV_ACCU_CTRL, RD_NCONV_ACCU_REQ);
775 	if (ret)
776 		goto exit;
777 
778 	ret = abx500_get_register_interruptible(di->dev, AB8500_GAS_GAUGE,
779 		AB8500_GASG_CC_NCOV_ACCU_LOW,  &low);
780 	if (ret < 0)
781 		goto exit;
782 
783 	ret = abx500_get_register_interruptible(di->dev, AB8500_GAS_GAUGE,
784 		AB8500_GASG_CC_NCOV_ACCU_MED,  &med);
785 	if (ret < 0)
786 		goto exit;
787 
788 	ret = abx500_get_register_interruptible(di->dev, AB8500_GAS_GAUGE,
789 		AB8500_GASG_CC_NCOV_ACCU_HIGH, &high);
790 	if (ret < 0)
791 		goto exit;
792 
793 	/* Check for sign bit in case of negative value, 2's compliment */
794 	if (high & 0x10)
795 		val = (low | (med << 8) | (high << 16) | 0xFFE00000);
796 	else
797 		val = (low | (med << 8) | (high << 16));
798 
799 	/*
800 	 * Convert to uAh
801 	 * Given a 250ms conversion cycle time the LSB corresponds
802 	 * to 112.9 nAh.
803 	 * 112.9nAh assumes 10mOhm, but fg_res is in 0.1mOhm
804 	 */
805 	di->accu_charge = (val * QLSB_NANO_AMP_HOURS_X10) /
806 		(100 * di->bm->fg_res);
807 
808 	/*
809 	 * Convert to unit value in mA
810 	 * by dividing by the conversion
811 	 * time in hours (= samples / (3600 * 4)h)
812 	 * and multiply with 1000
813 	 */
814 	di->avg_curr = (val * QLSB_NANO_AMP_HOURS_X10 * 36) /
815 		(1000 * di->bm->fg_res * (di->fg_samples / 4));
816 
817 	di->flags.conv_done = true;
818 
819 	mutex_unlock(&di->cc_lock);
820 
821 	queue_work(di->fg_wq, &di->fg_work);
822 
823 	dev_dbg(di->dev, "fg_res: %d, fg_samples: %d, gasg: %d, accu_charge: %d \n",
824 				di->bm->fg_res, di->fg_samples, val, di->accu_charge);
825 	return;
826 exit:
827 	dev_err(di->dev,
828 		"Failed to read or write gas gauge registers\n");
829 	mutex_unlock(&di->cc_lock);
830 	queue_work(di->fg_wq, &di->fg_work);
831 }
832 
833 /**
834  * ab8500_fg_bat_voltage() - get battery voltage
835  * @di:		pointer to the ab8500_fg structure
836  *
837  * Returns battery voltage(on success) else error code
838  */
ab8500_fg_bat_voltage(struct ab8500_fg * di)839 static int ab8500_fg_bat_voltage(struct ab8500_fg *di)
840 {
841 	int vbat;
842 	static int prev;
843 
844 	vbat = ab8500_gpadc_convert(di->gpadc, MAIN_BAT_V);
845 	if (vbat < 0) {
846 		dev_err(di->dev,
847 			"%s gpadc conversion failed, using previous value\n",
848 			__func__);
849 		return prev;
850 	}
851 
852 	prev = vbat;
853 	return vbat;
854 }
855 
856 /**
857  * ab8500_fg_volt_to_capacity() - Voltage based capacity
858  * @di:		pointer to the ab8500_fg structure
859  * @voltage:	The voltage to convert to a capacity
860  *
861  * Returns battery capacity in per mille based on voltage
862  */
ab8500_fg_volt_to_capacity(struct ab8500_fg * di,int voltage)863 static int ab8500_fg_volt_to_capacity(struct ab8500_fg *di, int voltage)
864 {
865 	int i, tbl_size;
866 	const struct abx500_v_to_cap *tbl;
867 	int cap = 0;
868 
869 	tbl = di->bm->bat_type[di->bm->batt_id].v_to_cap_tbl,
870 	tbl_size = di->bm->bat_type[di->bm->batt_id].n_v_cap_tbl_elements;
871 
872 	for (i = 0; i < tbl_size; ++i) {
873 		if (voltage > tbl[i].voltage)
874 			break;
875 	}
876 
877 	if ((i > 0) && (i < tbl_size)) {
878 		cap = interpolate(voltage,
879 			tbl[i].voltage,
880 			tbl[i].capacity * 10,
881 			tbl[i-1].voltage,
882 			tbl[i-1].capacity * 10);
883 	} else if (i == 0) {
884 		cap = 1000;
885 	} else {
886 		cap = 0;
887 	}
888 
889 	dev_dbg(di->dev, "%s Vbat: %d, Cap: %d per mille",
890 		__func__, voltage, cap);
891 
892 	return cap;
893 }
894 
895 /**
896  * ab8500_fg_uncomp_volt_to_capacity() - Uncompensated voltage based capacity
897  * @di:		pointer to the ab8500_fg structure
898  *
899  * Returns battery capacity based on battery voltage that is not compensated
900  * for the voltage drop due to the load
901  */
ab8500_fg_uncomp_volt_to_capacity(struct ab8500_fg * di)902 static int ab8500_fg_uncomp_volt_to_capacity(struct ab8500_fg *di)
903 {
904 	di->vbat = ab8500_fg_bat_voltage(di);
905 	return ab8500_fg_volt_to_capacity(di, di->vbat);
906 }
907 
908 /**
909  * ab8500_fg_battery_resistance() - Returns the battery inner resistance
910  * @di:		pointer to the ab8500_fg structure
911  *
912  * Returns battery inner resistance added with the fuel gauge resistor value
913  * to get the total resistance in the whole link from gnd to bat+ node.
914  */
ab8500_fg_battery_resistance(struct ab8500_fg * di)915 static int ab8500_fg_battery_resistance(struct ab8500_fg *di)
916 {
917 	int i, tbl_size;
918 	const struct batres_vs_temp *tbl;
919 	int resist = 0;
920 
921 	tbl = di->bm->bat_type[di->bm->batt_id].batres_tbl;
922 	tbl_size = di->bm->bat_type[di->bm->batt_id].n_batres_tbl_elements;
923 
924 	for (i = 0; i < tbl_size; ++i) {
925 		if (di->bat_temp / 10 > tbl[i].temp)
926 			break;
927 	}
928 
929 	if ((i > 0) && (i < tbl_size)) {
930 		resist = interpolate(di->bat_temp / 10,
931 			tbl[i].temp,
932 			tbl[i].resist,
933 			tbl[i-1].temp,
934 			tbl[i-1].resist);
935 	} else if (i == 0) {
936 		resist = tbl[0].resist;
937 	} else {
938 		resist = tbl[tbl_size - 1].resist;
939 	}
940 
941 	dev_dbg(di->dev, "%s Temp: %d battery internal resistance: %d"
942 	    " fg resistance %d, total: %d (mOhm)\n",
943 		__func__, di->bat_temp, resist, di->bm->fg_res / 10,
944 		(di->bm->fg_res / 10) + resist);
945 
946 	/* fg_res variable is in 0.1mOhm */
947 	resist += di->bm->fg_res / 10;
948 
949 	return resist;
950 }
951 
952 /**
953  * ab8500_fg_load_comp_volt_to_capacity() - Load compensated voltage based capacity
954  * @di:		pointer to the ab8500_fg structure
955  *
956  * Returns battery capacity based on battery voltage that is load compensated
957  * for the voltage drop
958  */
ab8500_fg_load_comp_volt_to_capacity(struct ab8500_fg * di)959 static int ab8500_fg_load_comp_volt_to_capacity(struct ab8500_fg *di)
960 {
961 	int vbat_comp, res;
962 	int i = 0;
963 	int vbat = 0;
964 
965 	ab8500_fg_inst_curr_start(di);
966 
967 	do {
968 		vbat += ab8500_fg_bat_voltage(di);
969 		i++;
970 		usleep_range(5000, 6000);
971 	} while (!ab8500_fg_inst_curr_done(di));
972 
973 	ab8500_fg_inst_curr_finalize(di, &di->inst_curr);
974 
975 	di->vbat = vbat / i;
976 	res = ab8500_fg_battery_resistance(di);
977 
978 	/* Use Ohms law to get the load compensated voltage */
979 	vbat_comp = di->vbat - (di->inst_curr * res) / 1000;
980 
981 	dev_dbg(di->dev, "%s Measured Vbat: %dmV,Compensated Vbat %dmV, "
982 		"R: %dmOhm, Current: %dmA Vbat Samples: %d\n",
983 		__func__, di->vbat, vbat_comp, res, di->inst_curr, i);
984 
985 	return ab8500_fg_volt_to_capacity(di, vbat_comp);
986 }
987 
988 /**
989  * ab8500_fg_convert_mah_to_permille() - Capacity in mAh to permille
990  * @di:		pointer to the ab8500_fg structure
991  * @cap_mah:	capacity in mAh
992  *
993  * Converts capacity in mAh to capacity in permille
994  */
ab8500_fg_convert_mah_to_permille(struct ab8500_fg * di,int cap_mah)995 static int ab8500_fg_convert_mah_to_permille(struct ab8500_fg *di, int cap_mah)
996 {
997 	return (cap_mah * 1000) / di->bat_cap.max_mah_design;
998 }
999 
1000 /**
1001  * ab8500_fg_convert_permille_to_mah() - Capacity in permille to mAh
1002  * @di:		pointer to the ab8500_fg structure
1003  * @cap_pm:	capacity in permille
1004  *
1005  * Converts capacity in permille to capacity in mAh
1006  */
ab8500_fg_convert_permille_to_mah(struct ab8500_fg * di,int cap_pm)1007 static int ab8500_fg_convert_permille_to_mah(struct ab8500_fg *di, int cap_pm)
1008 {
1009 	return cap_pm * di->bat_cap.max_mah_design / 1000;
1010 }
1011 
1012 /**
1013  * ab8500_fg_convert_mah_to_uwh() - Capacity in mAh to uWh
1014  * @di:		pointer to the ab8500_fg structure
1015  * @cap_mah:	capacity in mAh
1016  *
1017  * Converts capacity in mAh to capacity in uWh
1018  */
ab8500_fg_convert_mah_to_uwh(struct ab8500_fg * di,int cap_mah)1019 static int ab8500_fg_convert_mah_to_uwh(struct ab8500_fg *di, int cap_mah)
1020 {
1021 	u64 div_res;
1022 	u32 div_rem;
1023 
1024 	div_res = ((u64) cap_mah) * ((u64) di->vbat_nom);
1025 	div_rem = do_div(div_res, 1000);
1026 
1027 	/* Make sure to round upwards if necessary */
1028 	if (div_rem >= 1000 / 2)
1029 		div_res++;
1030 
1031 	return (int) div_res;
1032 }
1033 
1034 /**
1035  * ab8500_fg_calc_cap_charging() - Calculate remaining capacity while charging
1036  * @di:		pointer to the ab8500_fg structure
1037  *
1038  * Return the capacity in mAh based on previous calculated capcity and the FG
1039  * accumulator register value. The filter is filled with this capacity
1040  */
ab8500_fg_calc_cap_charging(struct ab8500_fg * di)1041 static int ab8500_fg_calc_cap_charging(struct ab8500_fg *di)
1042 {
1043 	dev_dbg(di->dev, "%s cap_mah %d accu_charge %d\n",
1044 		__func__,
1045 		di->bat_cap.mah,
1046 		di->accu_charge);
1047 
1048 	/* Capacity should not be less than 0 */
1049 	if (di->bat_cap.mah + di->accu_charge > 0)
1050 		di->bat_cap.mah += di->accu_charge;
1051 	else
1052 		di->bat_cap.mah = 0;
1053 	/*
1054 	 * We force capacity to 100% once when the algorithm
1055 	 * reports that it's full.
1056 	 */
1057 	if (di->bat_cap.mah >= di->bat_cap.max_mah_design ||
1058 		di->flags.force_full) {
1059 		di->bat_cap.mah = di->bat_cap.max_mah_design;
1060 	}
1061 
1062 	ab8500_fg_fill_cap_sample(di, di->bat_cap.mah);
1063 	di->bat_cap.permille =
1064 		ab8500_fg_convert_mah_to_permille(di, di->bat_cap.mah);
1065 
1066 	/* We need to update battery voltage and inst current when charging */
1067 	di->vbat = ab8500_fg_bat_voltage(di);
1068 	di->inst_curr = ab8500_fg_inst_curr_blocking(di);
1069 
1070 	return di->bat_cap.mah;
1071 }
1072 
1073 /**
1074  * ab8500_fg_calc_cap_discharge_voltage() - Capacity in discharge with voltage
1075  * @di:		pointer to the ab8500_fg structure
1076  * @comp:	if voltage should be load compensated before capacity calc
1077  *
1078  * Return the capacity in mAh based on the battery voltage. The voltage can
1079  * either be load compensated or not. This value is added to the filter and a
1080  * new mean value is calculated and returned.
1081  */
ab8500_fg_calc_cap_discharge_voltage(struct ab8500_fg * di,bool comp)1082 static int ab8500_fg_calc_cap_discharge_voltage(struct ab8500_fg *di, bool comp)
1083 {
1084 	int permille, mah;
1085 
1086 	if (comp)
1087 		permille = ab8500_fg_load_comp_volt_to_capacity(di);
1088 	else
1089 		permille = ab8500_fg_uncomp_volt_to_capacity(di);
1090 
1091 	mah = ab8500_fg_convert_permille_to_mah(di, permille);
1092 
1093 	di->bat_cap.mah = ab8500_fg_add_cap_sample(di, mah);
1094 	di->bat_cap.permille =
1095 		ab8500_fg_convert_mah_to_permille(di, di->bat_cap.mah);
1096 
1097 	return di->bat_cap.mah;
1098 }
1099 
1100 /**
1101  * ab8500_fg_calc_cap_discharge_fg() - Capacity in discharge with FG
1102  * @di:		pointer to the ab8500_fg structure
1103  *
1104  * Return the capacity in mAh based on previous calculated capcity and the FG
1105  * accumulator register value. This value is added to the filter and a
1106  * new mean value is calculated and returned.
1107  */
ab8500_fg_calc_cap_discharge_fg(struct ab8500_fg * di)1108 static int ab8500_fg_calc_cap_discharge_fg(struct ab8500_fg *di)
1109 {
1110 	int permille_volt, permille;
1111 
1112 	dev_dbg(di->dev, "%s cap_mah %d accu_charge %d\n",
1113 		__func__,
1114 		di->bat_cap.mah,
1115 		di->accu_charge);
1116 
1117 	/* Capacity should not be less than 0 */
1118 	if (di->bat_cap.mah + di->accu_charge > 0)
1119 		di->bat_cap.mah += di->accu_charge;
1120 	else
1121 		di->bat_cap.mah = 0;
1122 
1123 	if (di->bat_cap.mah >= di->bat_cap.max_mah_design)
1124 		di->bat_cap.mah = di->bat_cap.max_mah_design;
1125 
1126 	/*
1127 	 * Check against voltage based capacity. It can not be lower
1128 	 * than what the uncompensated voltage says
1129 	 */
1130 	permille = ab8500_fg_convert_mah_to_permille(di, di->bat_cap.mah);
1131 	permille_volt = ab8500_fg_uncomp_volt_to_capacity(di);
1132 
1133 	if (permille < permille_volt) {
1134 		di->bat_cap.permille = permille_volt;
1135 		di->bat_cap.mah = ab8500_fg_convert_permille_to_mah(di,
1136 			di->bat_cap.permille);
1137 
1138 		dev_dbg(di->dev, "%s voltage based: perm %d perm_volt %d\n",
1139 			__func__,
1140 			permille,
1141 			permille_volt);
1142 
1143 		ab8500_fg_fill_cap_sample(di, di->bat_cap.mah);
1144 	} else {
1145 		ab8500_fg_fill_cap_sample(di, di->bat_cap.mah);
1146 		di->bat_cap.permille =
1147 			ab8500_fg_convert_mah_to_permille(di, di->bat_cap.mah);
1148 	}
1149 
1150 	return di->bat_cap.mah;
1151 }
1152 
1153 /**
1154  * ab8500_fg_capacity_level() - Get the battery capacity level
1155  * @di:		pointer to the ab8500_fg structure
1156  *
1157  * Get the battery capacity level based on the capacity in percent
1158  */
ab8500_fg_capacity_level(struct ab8500_fg * di)1159 static int ab8500_fg_capacity_level(struct ab8500_fg *di)
1160 {
1161 	int ret, percent;
1162 
1163 	percent = DIV_ROUND_CLOSEST(di->bat_cap.permille, 10);
1164 
1165 	if (percent <= di->bm->cap_levels->critical ||
1166 		di->flags.low_bat)
1167 		ret = POWER_SUPPLY_CAPACITY_LEVEL_CRITICAL;
1168 	else if (percent <= di->bm->cap_levels->low)
1169 		ret = POWER_SUPPLY_CAPACITY_LEVEL_LOW;
1170 	else if (percent <= di->bm->cap_levels->normal)
1171 		ret = POWER_SUPPLY_CAPACITY_LEVEL_NORMAL;
1172 	else if (percent <= di->bm->cap_levels->high)
1173 		ret = POWER_SUPPLY_CAPACITY_LEVEL_HIGH;
1174 	else
1175 		ret = POWER_SUPPLY_CAPACITY_LEVEL_FULL;
1176 
1177 	return ret;
1178 }
1179 
1180 /**
1181  * ab8500_fg_calculate_scaled_capacity() - Capacity scaling
1182  * @di:		pointer to the ab8500_fg structure
1183  *
1184  * Calculates the capacity to be shown to upper layers. Scales the capacity
1185  * to have 100% as a reference from the actual capacity upon removal of charger
1186  * when charging is in maintenance mode.
1187  */
ab8500_fg_calculate_scaled_capacity(struct ab8500_fg * di)1188 static int ab8500_fg_calculate_scaled_capacity(struct ab8500_fg *di)
1189 {
1190 	struct ab8500_fg_cap_scaling *cs = &di->bat_cap.cap_scale;
1191 	int capacity = di->bat_cap.prev_percent;
1192 
1193 	if (!cs->enable)
1194 		return capacity;
1195 
1196 	/*
1197 	 * As long as we are in fully charge mode scale the capacity
1198 	 * to show 100%.
1199 	 */
1200 	if (di->flags.fully_charged) {
1201 		cs->cap_to_scale[0] = 100;
1202 		cs->cap_to_scale[1] =
1203 			max(capacity, di->bm->fg_params->maint_thres);
1204 		dev_dbg(di->dev, "Scale cap with %d/%d\n",
1205 			 cs->cap_to_scale[0], cs->cap_to_scale[1]);
1206 	}
1207 
1208 	/* Calculates the scaled capacity. */
1209 	if ((cs->cap_to_scale[0] != cs->cap_to_scale[1])
1210 					&& (cs->cap_to_scale[1] > 0))
1211 		capacity = min(100,
1212 				 DIV_ROUND_CLOSEST(di->bat_cap.prev_percent *
1213 						 cs->cap_to_scale[0],
1214 						 cs->cap_to_scale[1]));
1215 
1216 	if (di->flags.charging) {
1217 		if (capacity < cs->disable_cap_level) {
1218 			cs->disable_cap_level = capacity;
1219 			dev_dbg(di->dev, "Cap to stop scale lowered %d%%\n",
1220 				cs->disable_cap_level);
1221 		} else if (!di->flags.fully_charged) {
1222 			if (di->bat_cap.prev_percent >=
1223 			    cs->disable_cap_level) {
1224 				dev_dbg(di->dev, "Disabling scaled capacity\n");
1225 				cs->enable = false;
1226 				capacity = di->bat_cap.prev_percent;
1227 			} else {
1228 				dev_dbg(di->dev,
1229 					"Waiting in cap to level %d%%\n",
1230 					cs->disable_cap_level);
1231 				capacity = cs->disable_cap_level;
1232 			}
1233 		}
1234 	}
1235 
1236 	return capacity;
1237 }
1238 
1239 /**
1240  * ab8500_fg_update_cap_scalers() - Capacity scaling
1241  * @di:		pointer to the ab8500_fg structure
1242  *
1243  * To be called when state change from charge<->discharge to update
1244  * the capacity scalers.
1245  */
ab8500_fg_update_cap_scalers(struct ab8500_fg * di)1246 static void ab8500_fg_update_cap_scalers(struct ab8500_fg *di)
1247 {
1248 	struct ab8500_fg_cap_scaling *cs = &di->bat_cap.cap_scale;
1249 
1250 	if (!cs->enable)
1251 		return;
1252 	if (di->flags.charging) {
1253 		di->bat_cap.cap_scale.disable_cap_level =
1254 			di->bat_cap.cap_scale.scaled_cap;
1255 		dev_dbg(di->dev, "Cap to stop scale at charge %d%%\n",
1256 				di->bat_cap.cap_scale.disable_cap_level);
1257 	} else {
1258 		if (cs->scaled_cap != 100) {
1259 			cs->cap_to_scale[0] = cs->scaled_cap;
1260 			cs->cap_to_scale[1] = di->bat_cap.prev_percent;
1261 		} else {
1262 			cs->cap_to_scale[0] = 100;
1263 			cs->cap_to_scale[1] =
1264 				max(di->bat_cap.prev_percent,
1265 				    di->bm->fg_params->maint_thres);
1266 		}
1267 
1268 		dev_dbg(di->dev, "Cap to scale at discharge %d/%d\n",
1269 				cs->cap_to_scale[0], cs->cap_to_scale[1]);
1270 	}
1271 }
1272 
1273 /**
1274  * ab8500_fg_check_capacity_limits() - Check if capacity has changed
1275  * @di:		pointer to the ab8500_fg structure
1276  * @init:	capacity is allowed to go up in init mode
1277  *
1278  * Check if capacity or capacity limit has changed and notify the system
1279  * about it using the power_supply framework
1280  */
ab8500_fg_check_capacity_limits(struct ab8500_fg * di,bool init)1281 static void ab8500_fg_check_capacity_limits(struct ab8500_fg *di, bool init)
1282 {
1283 	bool changed = false;
1284 	int percent = DIV_ROUND_CLOSEST(di->bat_cap.permille, 10);
1285 
1286 	di->bat_cap.level = ab8500_fg_capacity_level(di);
1287 
1288 	if (di->bat_cap.level != di->bat_cap.prev_level) {
1289 		/*
1290 		 * We do not allow reported capacity level to go up
1291 		 * unless we're charging or if we're in init
1292 		 */
1293 		if (!(!di->flags.charging && di->bat_cap.level >
1294 			di->bat_cap.prev_level) || init) {
1295 			dev_dbg(di->dev, "level changed from %d to %d\n",
1296 				di->bat_cap.prev_level,
1297 				di->bat_cap.level);
1298 			di->bat_cap.prev_level = di->bat_cap.level;
1299 			changed = true;
1300 		} else {
1301 			dev_dbg(di->dev, "level not allowed to go up "
1302 				"since no charger is connected: %d to %d\n",
1303 				di->bat_cap.prev_level,
1304 				di->bat_cap.level);
1305 		}
1306 	}
1307 
1308 	/*
1309 	 * If we have received the LOW_BAT IRQ, set capacity to 0 to initiate
1310 	 * shutdown
1311 	 */
1312 	if (di->flags.low_bat) {
1313 		dev_dbg(di->dev, "Battery low, set capacity to 0\n");
1314 		di->bat_cap.prev_percent = 0;
1315 		di->bat_cap.permille = 0;
1316 		percent = 0;
1317 		di->bat_cap.prev_mah = 0;
1318 		di->bat_cap.mah = 0;
1319 		changed = true;
1320 	} else if (di->flags.fully_charged) {
1321 		/*
1322 		 * We report 100% if algorithm reported fully charged
1323 		 * and show 100% during maintenance charging (scaling).
1324 		 */
1325 		if (di->flags.force_full) {
1326 			di->bat_cap.prev_percent = percent;
1327 			di->bat_cap.prev_mah = di->bat_cap.mah;
1328 
1329 			changed = true;
1330 
1331 			if (!di->bat_cap.cap_scale.enable &&
1332 						di->bm->capacity_scaling) {
1333 				di->bat_cap.cap_scale.enable = true;
1334 				di->bat_cap.cap_scale.cap_to_scale[0] = 100;
1335 				di->bat_cap.cap_scale.cap_to_scale[1] =
1336 						di->bat_cap.prev_percent;
1337 				di->bat_cap.cap_scale.disable_cap_level = 100;
1338 			}
1339 		} else if (di->bat_cap.prev_percent != percent) {
1340 			dev_dbg(di->dev,
1341 				"battery reported full "
1342 				"but capacity dropping: %d\n",
1343 				percent);
1344 			di->bat_cap.prev_percent = percent;
1345 			di->bat_cap.prev_mah = di->bat_cap.mah;
1346 
1347 			changed = true;
1348 		}
1349 	} else if (di->bat_cap.prev_percent != percent) {
1350 		if (percent == 0) {
1351 			/*
1352 			 * We will not report 0% unless we've got
1353 			 * the LOW_BAT IRQ, no matter what the FG
1354 			 * algorithm says.
1355 			 */
1356 			di->bat_cap.prev_percent = 1;
1357 			percent = 1;
1358 
1359 			changed = true;
1360 		} else if (!(!di->flags.charging &&
1361 			percent > di->bat_cap.prev_percent) || init) {
1362 			/*
1363 			 * We do not allow reported capacity to go up
1364 			 * unless we're charging or if we're in init
1365 			 */
1366 			dev_dbg(di->dev,
1367 				"capacity changed from %d to %d (%d)\n",
1368 				di->bat_cap.prev_percent,
1369 				percent,
1370 				di->bat_cap.permille);
1371 			di->bat_cap.prev_percent = percent;
1372 			di->bat_cap.prev_mah = di->bat_cap.mah;
1373 
1374 			changed = true;
1375 		} else {
1376 			dev_dbg(di->dev, "capacity not allowed to go up since "
1377 				"no charger is connected: %d to %d (%d)\n",
1378 				di->bat_cap.prev_percent,
1379 				percent,
1380 				di->bat_cap.permille);
1381 		}
1382 	}
1383 
1384 	if (changed) {
1385 		if (di->bm->capacity_scaling) {
1386 			di->bat_cap.cap_scale.scaled_cap =
1387 				ab8500_fg_calculate_scaled_capacity(di);
1388 
1389 			dev_info(di->dev, "capacity=%d (%d)\n",
1390 				di->bat_cap.prev_percent,
1391 				di->bat_cap.cap_scale.scaled_cap);
1392 		}
1393 		power_supply_changed(&di->fg_psy);
1394 		if (di->flags.fully_charged && di->flags.force_full) {
1395 			dev_dbg(di->dev, "Battery full, notifying.\n");
1396 			di->flags.force_full = false;
1397 			sysfs_notify(&di->fg_kobject, NULL, "charge_full");
1398 		}
1399 		sysfs_notify(&di->fg_kobject, NULL, "charge_now");
1400 	}
1401 }
1402 
ab8500_fg_charge_state_to(struct ab8500_fg * di,enum ab8500_fg_charge_state new_state)1403 static void ab8500_fg_charge_state_to(struct ab8500_fg *di,
1404 	enum ab8500_fg_charge_state new_state)
1405 {
1406 	dev_dbg(di->dev, "Charge state from %d [%s] to %d [%s]\n",
1407 		di->charge_state,
1408 		charge_state[di->charge_state],
1409 		new_state,
1410 		charge_state[new_state]);
1411 
1412 	di->charge_state = new_state;
1413 }
1414 
ab8500_fg_discharge_state_to(struct ab8500_fg * di,enum ab8500_fg_discharge_state new_state)1415 static void ab8500_fg_discharge_state_to(struct ab8500_fg *di,
1416 	enum ab8500_fg_discharge_state new_state)
1417 {
1418 	dev_dbg(di->dev, "Disharge state from %d [%s] to %d [%s]\n",
1419 		di->discharge_state,
1420 		discharge_state[di->discharge_state],
1421 		new_state,
1422 		discharge_state[new_state]);
1423 
1424 	di->discharge_state = new_state;
1425 }
1426 
1427 /**
1428  * ab8500_fg_algorithm_charging() - FG algorithm for when charging
1429  * @di:		pointer to the ab8500_fg structure
1430  *
1431  * Battery capacity calculation state machine for when we're charging
1432  */
ab8500_fg_algorithm_charging(struct ab8500_fg * di)1433 static void ab8500_fg_algorithm_charging(struct ab8500_fg *di)
1434 {
1435 	/*
1436 	 * If we change to discharge mode
1437 	 * we should start with recovery
1438 	 */
1439 	if (di->discharge_state != AB8500_FG_DISCHARGE_INIT_RECOVERY)
1440 		ab8500_fg_discharge_state_to(di,
1441 			AB8500_FG_DISCHARGE_INIT_RECOVERY);
1442 
1443 	switch (di->charge_state) {
1444 	case AB8500_FG_CHARGE_INIT:
1445 		di->fg_samples = SEC_TO_SAMPLE(
1446 			di->bm->fg_params->accu_charging);
1447 
1448 		ab8500_fg_coulomb_counter(di, true);
1449 		ab8500_fg_charge_state_to(di, AB8500_FG_CHARGE_READOUT);
1450 
1451 		break;
1452 
1453 	case AB8500_FG_CHARGE_READOUT:
1454 		/*
1455 		 * Read the FG and calculate the new capacity
1456 		 */
1457 		mutex_lock(&di->cc_lock);
1458 		if (!di->flags.conv_done && !di->flags.force_full) {
1459 			/* Wasn't the CC IRQ that got us here */
1460 			mutex_unlock(&di->cc_lock);
1461 			dev_dbg(di->dev, "%s CC conv not done\n",
1462 				__func__);
1463 
1464 			break;
1465 		}
1466 		di->flags.conv_done = false;
1467 		mutex_unlock(&di->cc_lock);
1468 
1469 		ab8500_fg_calc_cap_charging(di);
1470 
1471 		break;
1472 
1473 	default:
1474 		break;
1475 	}
1476 
1477 	/* Check capacity limits */
1478 	ab8500_fg_check_capacity_limits(di, false);
1479 }
1480 
force_capacity(struct ab8500_fg * di)1481 static void force_capacity(struct ab8500_fg *di)
1482 {
1483 	int cap;
1484 
1485 	ab8500_fg_clear_cap_samples(di);
1486 	cap = di->bat_cap.user_mah;
1487 	if (cap > di->bat_cap.max_mah_design) {
1488 		dev_dbg(di->dev, "Remaining cap %d can't be bigger than total"
1489 			" %d\n", cap, di->bat_cap.max_mah_design);
1490 		cap = di->bat_cap.max_mah_design;
1491 	}
1492 	ab8500_fg_fill_cap_sample(di, di->bat_cap.user_mah);
1493 	di->bat_cap.permille = ab8500_fg_convert_mah_to_permille(di, cap);
1494 	di->bat_cap.mah = cap;
1495 	ab8500_fg_check_capacity_limits(di, true);
1496 }
1497 
check_sysfs_capacity(struct ab8500_fg * di)1498 static bool check_sysfs_capacity(struct ab8500_fg *di)
1499 {
1500 	int cap, lower, upper;
1501 	int cap_permille;
1502 
1503 	cap = di->bat_cap.user_mah;
1504 
1505 	cap_permille = ab8500_fg_convert_mah_to_permille(di,
1506 		di->bat_cap.user_mah);
1507 
1508 	lower = di->bat_cap.permille - di->bm->fg_params->user_cap_limit * 10;
1509 	upper = di->bat_cap.permille + di->bm->fg_params->user_cap_limit * 10;
1510 
1511 	if (lower < 0)
1512 		lower = 0;
1513 	/* 1000 is permille, -> 100 percent */
1514 	if (upper > 1000)
1515 		upper = 1000;
1516 
1517 	dev_dbg(di->dev, "Capacity limits:"
1518 		" (Lower: %d User: %d Upper: %d) [user: %d, was: %d]\n",
1519 		lower, cap_permille, upper, cap, di->bat_cap.mah);
1520 
1521 	/* If within limits, use the saved capacity and exit estimation...*/
1522 	if (cap_permille > lower && cap_permille < upper) {
1523 		dev_dbg(di->dev, "OK! Using users cap %d uAh now\n", cap);
1524 		force_capacity(di);
1525 		return true;
1526 	}
1527 	dev_dbg(di->dev, "Capacity from user out of limits, ignoring");
1528 	return false;
1529 }
1530 
1531 /**
1532  * ab8500_fg_algorithm_discharging() - FG algorithm for when discharging
1533  * @di:		pointer to the ab8500_fg structure
1534  *
1535  * Battery capacity calculation state machine for when we're discharging
1536  */
ab8500_fg_algorithm_discharging(struct ab8500_fg * di)1537 static void ab8500_fg_algorithm_discharging(struct ab8500_fg *di)
1538 {
1539 	int sleep_time;
1540 
1541 	/* If we change to charge mode we should start with init */
1542 	if (di->charge_state != AB8500_FG_CHARGE_INIT)
1543 		ab8500_fg_charge_state_to(di, AB8500_FG_CHARGE_INIT);
1544 
1545 	switch (di->discharge_state) {
1546 	case AB8500_FG_DISCHARGE_INIT:
1547 		/* We use the FG IRQ to work on */
1548 		di->init_cnt = 0;
1549 		di->fg_samples = SEC_TO_SAMPLE(di->bm->fg_params->init_timer);
1550 		ab8500_fg_coulomb_counter(di, true);
1551 		ab8500_fg_discharge_state_to(di,
1552 			AB8500_FG_DISCHARGE_INITMEASURING);
1553 
1554 		/* Intentional fallthrough */
1555 	case AB8500_FG_DISCHARGE_INITMEASURING:
1556 		/*
1557 		 * Discard a number of samples during startup.
1558 		 * After that, use compensated voltage for a few
1559 		 * samples to get an initial capacity.
1560 		 * Then go to READOUT
1561 		 */
1562 		sleep_time = di->bm->fg_params->init_timer;
1563 
1564 		/* Discard the first [x] seconds */
1565 		if (di->init_cnt > di->bm->fg_params->init_discard_time) {
1566 			ab8500_fg_calc_cap_discharge_voltage(di, true);
1567 
1568 			ab8500_fg_check_capacity_limits(di, true);
1569 		}
1570 
1571 		di->init_cnt += sleep_time;
1572 		if (di->init_cnt > di->bm->fg_params->init_total_time)
1573 			ab8500_fg_discharge_state_to(di,
1574 				AB8500_FG_DISCHARGE_READOUT_INIT);
1575 
1576 		break;
1577 
1578 	case AB8500_FG_DISCHARGE_INIT_RECOVERY:
1579 		di->recovery_cnt = 0;
1580 		di->recovery_needed = true;
1581 		ab8500_fg_discharge_state_to(di,
1582 			AB8500_FG_DISCHARGE_RECOVERY);
1583 
1584 		/* Intentional fallthrough */
1585 
1586 	case AB8500_FG_DISCHARGE_RECOVERY:
1587 		sleep_time = di->bm->fg_params->recovery_sleep_timer;
1588 
1589 		/*
1590 		 * We should check the power consumption
1591 		 * If low, go to READOUT (after x min) or
1592 		 * RECOVERY_SLEEP if time left.
1593 		 * If high, go to READOUT
1594 		 */
1595 		di->inst_curr = ab8500_fg_inst_curr_blocking(di);
1596 
1597 		if (ab8500_fg_is_low_curr(di, di->inst_curr)) {
1598 			if (di->recovery_cnt >
1599 				di->bm->fg_params->recovery_total_time) {
1600 				di->fg_samples = SEC_TO_SAMPLE(
1601 					di->bm->fg_params->accu_high_curr);
1602 				ab8500_fg_coulomb_counter(di, true);
1603 				ab8500_fg_discharge_state_to(di,
1604 					AB8500_FG_DISCHARGE_READOUT);
1605 				di->recovery_needed = false;
1606 			} else {
1607 				queue_delayed_work(di->fg_wq,
1608 					&di->fg_periodic_work,
1609 					sleep_time * HZ);
1610 			}
1611 			di->recovery_cnt += sleep_time;
1612 		} else {
1613 			di->fg_samples = SEC_TO_SAMPLE(
1614 				di->bm->fg_params->accu_high_curr);
1615 			ab8500_fg_coulomb_counter(di, true);
1616 			ab8500_fg_discharge_state_to(di,
1617 				AB8500_FG_DISCHARGE_READOUT);
1618 		}
1619 		break;
1620 
1621 	case AB8500_FG_DISCHARGE_READOUT_INIT:
1622 		di->fg_samples = SEC_TO_SAMPLE(
1623 			di->bm->fg_params->accu_high_curr);
1624 		ab8500_fg_coulomb_counter(di, true);
1625 		ab8500_fg_discharge_state_to(di,
1626 				AB8500_FG_DISCHARGE_READOUT);
1627 		break;
1628 
1629 	case AB8500_FG_DISCHARGE_READOUT:
1630 		di->inst_curr = ab8500_fg_inst_curr_blocking(di);
1631 
1632 		if (ab8500_fg_is_low_curr(di, di->inst_curr)) {
1633 			/* Detect mode change */
1634 			if (di->high_curr_mode) {
1635 				di->high_curr_mode = false;
1636 				di->high_curr_cnt = 0;
1637 			}
1638 
1639 			if (di->recovery_needed) {
1640 				ab8500_fg_discharge_state_to(di,
1641 					AB8500_FG_DISCHARGE_INIT_RECOVERY);
1642 
1643 				queue_delayed_work(di->fg_wq,
1644 					&di->fg_periodic_work, 0);
1645 
1646 				break;
1647 			}
1648 
1649 			ab8500_fg_calc_cap_discharge_voltage(di, true);
1650 		} else {
1651 			mutex_lock(&di->cc_lock);
1652 			if (!di->flags.conv_done) {
1653 				/* Wasn't the CC IRQ that got us here */
1654 				mutex_unlock(&di->cc_lock);
1655 				dev_dbg(di->dev, "%s CC conv not done\n",
1656 					__func__);
1657 
1658 				break;
1659 			}
1660 			di->flags.conv_done = false;
1661 			mutex_unlock(&di->cc_lock);
1662 
1663 			/* Detect mode change */
1664 			if (!di->high_curr_mode) {
1665 				di->high_curr_mode = true;
1666 				di->high_curr_cnt = 0;
1667 			}
1668 
1669 			di->high_curr_cnt +=
1670 				di->bm->fg_params->accu_high_curr;
1671 			if (di->high_curr_cnt >
1672 				di->bm->fg_params->high_curr_time)
1673 				di->recovery_needed = true;
1674 
1675 			ab8500_fg_calc_cap_discharge_fg(di);
1676 		}
1677 
1678 		ab8500_fg_check_capacity_limits(di, false);
1679 
1680 		break;
1681 
1682 	case AB8500_FG_DISCHARGE_WAKEUP:
1683 		ab8500_fg_calc_cap_discharge_voltage(di, true);
1684 
1685 		di->fg_samples = SEC_TO_SAMPLE(
1686 			di->bm->fg_params->accu_high_curr);
1687 		ab8500_fg_coulomb_counter(di, true);
1688 		ab8500_fg_discharge_state_to(di,
1689 				AB8500_FG_DISCHARGE_READOUT);
1690 
1691 		ab8500_fg_check_capacity_limits(di, false);
1692 
1693 		break;
1694 
1695 	default:
1696 		break;
1697 	}
1698 }
1699 
1700 /**
1701  * ab8500_fg_algorithm_calibrate() - Internal columb counter offset calibration
1702  * @di:		pointer to the ab8500_fg structure
1703  *
1704  */
ab8500_fg_algorithm_calibrate(struct ab8500_fg * di)1705 static void ab8500_fg_algorithm_calibrate(struct ab8500_fg *di)
1706 {
1707 	int ret;
1708 
1709 	switch (di->calib_state) {
1710 	case AB8500_FG_CALIB_INIT:
1711 		dev_dbg(di->dev, "Calibration ongoing...\n");
1712 
1713 		ret = abx500_mask_and_set_register_interruptible(di->dev,
1714 			AB8500_GAS_GAUGE, AB8500_GASG_CC_CTRL_REG,
1715 			CC_INT_CAL_N_AVG_MASK, CC_INT_CAL_SAMPLES_8);
1716 		if (ret < 0)
1717 			goto err;
1718 
1719 		ret = abx500_mask_and_set_register_interruptible(di->dev,
1720 			AB8500_GAS_GAUGE, AB8500_GASG_CC_CTRL_REG,
1721 			CC_INTAVGOFFSET_ENA, CC_INTAVGOFFSET_ENA);
1722 		if (ret < 0)
1723 			goto err;
1724 		di->calib_state = AB8500_FG_CALIB_WAIT;
1725 		break;
1726 	case AB8500_FG_CALIB_END:
1727 		ret = abx500_mask_and_set_register_interruptible(di->dev,
1728 			AB8500_GAS_GAUGE, AB8500_GASG_CC_CTRL_REG,
1729 			CC_MUXOFFSET, CC_MUXOFFSET);
1730 		if (ret < 0)
1731 			goto err;
1732 		di->flags.calibrate = false;
1733 		dev_dbg(di->dev, "Calibration done...\n");
1734 		queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0);
1735 		break;
1736 	case AB8500_FG_CALIB_WAIT:
1737 		dev_dbg(di->dev, "Calibration WFI\n");
1738 	default:
1739 		break;
1740 	}
1741 	return;
1742 err:
1743 	/* Something went wrong, don't calibrate then */
1744 	dev_err(di->dev, "failed to calibrate the CC\n");
1745 	di->flags.calibrate = false;
1746 	di->calib_state = AB8500_FG_CALIB_INIT;
1747 	queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0);
1748 }
1749 
1750 /**
1751  * ab8500_fg_algorithm() - Entry point for the FG algorithm
1752  * @di:		pointer to the ab8500_fg structure
1753  *
1754  * Entry point for the battery capacity calculation state machine
1755  */
ab8500_fg_algorithm(struct ab8500_fg * di)1756 static void ab8500_fg_algorithm(struct ab8500_fg *di)
1757 {
1758 	if (di->flags.calibrate)
1759 		ab8500_fg_algorithm_calibrate(di);
1760 	else {
1761 		if (di->flags.charging)
1762 			ab8500_fg_algorithm_charging(di);
1763 		else
1764 			ab8500_fg_algorithm_discharging(di);
1765 	}
1766 
1767 	dev_dbg(di->dev, "[FG_DATA] %d %d %d %d %d %d %d %d %d %d "
1768 		"%d %d %d %d %d %d %d\n",
1769 		di->bat_cap.max_mah_design,
1770 		di->bat_cap.max_mah,
1771 		di->bat_cap.mah,
1772 		di->bat_cap.permille,
1773 		di->bat_cap.level,
1774 		di->bat_cap.prev_mah,
1775 		di->bat_cap.prev_percent,
1776 		di->bat_cap.prev_level,
1777 		di->vbat,
1778 		di->inst_curr,
1779 		di->avg_curr,
1780 		di->accu_charge,
1781 		di->flags.charging,
1782 		di->charge_state,
1783 		di->discharge_state,
1784 		di->high_curr_mode,
1785 		di->recovery_needed);
1786 }
1787 
1788 /**
1789  * ab8500_fg_periodic_work() - Run the FG state machine periodically
1790  * @work:	pointer to the work_struct structure
1791  *
1792  * Work queue function for periodic work
1793  */
ab8500_fg_periodic_work(struct work_struct * work)1794 static void ab8500_fg_periodic_work(struct work_struct *work)
1795 {
1796 	struct ab8500_fg *di = container_of(work, struct ab8500_fg,
1797 		fg_periodic_work.work);
1798 
1799 	if (di->init_capacity) {
1800 		/* Get an initial capacity calculation */
1801 		ab8500_fg_calc_cap_discharge_voltage(di, true);
1802 		ab8500_fg_check_capacity_limits(di, true);
1803 		di->init_capacity = false;
1804 
1805 		queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0);
1806 	} else if (di->flags.user_cap) {
1807 		if (check_sysfs_capacity(di)) {
1808 			ab8500_fg_check_capacity_limits(di, true);
1809 			if (di->flags.charging)
1810 				ab8500_fg_charge_state_to(di,
1811 					AB8500_FG_CHARGE_INIT);
1812 			else
1813 				ab8500_fg_discharge_state_to(di,
1814 					AB8500_FG_DISCHARGE_READOUT_INIT);
1815 		}
1816 		di->flags.user_cap = false;
1817 		queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0);
1818 	} else
1819 		ab8500_fg_algorithm(di);
1820 
1821 }
1822 
1823 /**
1824  * ab8500_fg_check_hw_failure_work() - Check OVV_BAT condition
1825  * @work:	pointer to the work_struct structure
1826  *
1827  * Work queue function for checking the OVV_BAT condition
1828  */
ab8500_fg_check_hw_failure_work(struct work_struct * work)1829 static void ab8500_fg_check_hw_failure_work(struct work_struct *work)
1830 {
1831 	int ret;
1832 	u8 reg_value;
1833 
1834 	struct ab8500_fg *di = container_of(work, struct ab8500_fg,
1835 		fg_check_hw_failure_work.work);
1836 
1837 	/*
1838 	 * If we have had a battery over-voltage situation,
1839 	 * check ovv-bit to see if it should be reset.
1840 	 */
1841 	ret = abx500_get_register_interruptible(di->dev,
1842 		AB8500_CHARGER, AB8500_CH_STAT_REG,
1843 		&reg_value);
1844 	if (ret < 0) {
1845 		dev_err(di->dev, "%s ab8500 read failed\n", __func__);
1846 		return;
1847 	}
1848 	if ((reg_value & BATT_OVV) == BATT_OVV) {
1849 		if (!di->flags.bat_ovv) {
1850 			dev_dbg(di->dev, "Battery OVV\n");
1851 			di->flags.bat_ovv = true;
1852 			power_supply_changed(&di->fg_psy);
1853 		}
1854 		/* Not yet recovered from ovv, reschedule this test */
1855 		queue_delayed_work(di->fg_wq, &di->fg_check_hw_failure_work,
1856 				   HZ);
1857 		} else {
1858 			dev_dbg(di->dev, "Battery recovered from OVV\n");
1859 			di->flags.bat_ovv = false;
1860 			power_supply_changed(&di->fg_psy);
1861 	}
1862 }
1863 
1864 /**
1865  * ab8500_fg_low_bat_work() - Check LOW_BAT condition
1866  * @work:	pointer to the work_struct structure
1867  *
1868  * Work queue function for checking the LOW_BAT condition
1869  */
ab8500_fg_low_bat_work(struct work_struct * work)1870 static void ab8500_fg_low_bat_work(struct work_struct *work)
1871 {
1872 	int vbat;
1873 
1874 	struct ab8500_fg *di = container_of(work, struct ab8500_fg,
1875 		fg_low_bat_work.work);
1876 
1877 	vbat = ab8500_fg_bat_voltage(di);
1878 
1879 	/* Check if LOW_BAT still fulfilled */
1880 	if (vbat < di->bm->fg_params->lowbat_threshold) {
1881 		/* Is it time to shut down? */
1882 		if (di->low_bat_cnt < 1) {
1883 			di->flags.low_bat = true;
1884 			dev_warn(di->dev, "Shut down pending...\n");
1885 		} else {
1886 			/*
1887 			* Else we need to re-schedule this check to be able to detect
1888 			* if the voltage increases again during charging or
1889 			* due to decreasing load.
1890 			*/
1891 			di->low_bat_cnt--;
1892 			dev_warn(di->dev, "Battery voltage still LOW\n");
1893 			queue_delayed_work(di->fg_wq, &di->fg_low_bat_work,
1894 				round_jiffies(LOW_BAT_CHECK_INTERVAL));
1895 		}
1896 	} else {
1897 		di->flags.low_bat_delay = false;
1898 		di->low_bat_cnt = 10;
1899 		dev_warn(di->dev, "Battery voltage OK again\n");
1900 	}
1901 
1902 	/* This is needed to dispatch LOW_BAT */
1903 	ab8500_fg_check_capacity_limits(di, false);
1904 }
1905 
1906 /**
1907  * ab8500_fg_battok_calc - calculate the bit pattern corresponding
1908  * to the target voltage.
1909  * @di:       pointer to the ab8500_fg structure
1910  * @target    target voltage
1911  *
1912  * Returns bit pattern closest to the target voltage
1913  * valid return values are 0-14. (0-BATT_OK_MAX_NR_INCREMENTS)
1914  */
1915 
ab8500_fg_battok_calc(struct ab8500_fg * di,int target)1916 static int ab8500_fg_battok_calc(struct ab8500_fg *di, int target)
1917 {
1918 	if (target > BATT_OK_MIN +
1919 		(BATT_OK_INCREMENT * BATT_OK_MAX_NR_INCREMENTS))
1920 		return BATT_OK_MAX_NR_INCREMENTS;
1921 	if (target < BATT_OK_MIN)
1922 		return 0;
1923 	return (target - BATT_OK_MIN) / BATT_OK_INCREMENT;
1924 }
1925 
1926 /**
1927  * ab8500_fg_battok_init_hw_register - init battok levels
1928  * @di:       pointer to the ab8500_fg structure
1929  *
1930  */
1931 
ab8500_fg_battok_init_hw_register(struct ab8500_fg * di)1932 static int ab8500_fg_battok_init_hw_register(struct ab8500_fg *di)
1933 {
1934 	int selected;
1935 	int sel0;
1936 	int sel1;
1937 	int cbp_sel0;
1938 	int cbp_sel1;
1939 	int ret;
1940 	int new_val;
1941 
1942 	sel0 = di->bm->fg_params->battok_falling_th_sel0;
1943 	sel1 = di->bm->fg_params->battok_raising_th_sel1;
1944 
1945 	cbp_sel0 = ab8500_fg_battok_calc(di, sel0);
1946 	cbp_sel1 = ab8500_fg_battok_calc(di, sel1);
1947 
1948 	selected = BATT_OK_MIN + cbp_sel0 * BATT_OK_INCREMENT;
1949 
1950 	if (selected != sel0)
1951 		dev_warn(di->dev, "Invalid voltage step:%d, using %d %d\n",
1952 			sel0, selected, cbp_sel0);
1953 
1954 	selected = BATT_OK_MIN + cbp_sel1 * BATT_OK_INCREMENT;
1955 
1956 	if (selected != sel1)
1957 		dev_warn(di->dev, "Invalid voltage step:%d, using %d %d\n",
1958 			sel1, selected, cbp_sel1);
1959 
1960 	new_val = cbp_sel0 | (cbp_sel1 << 4);
1961 
1962 	dev_dbg(di->dev, "using: %x %d %d\n", new_val, cbp_sel0, cbp_sel1);
1963 	ret = abx500_set_register_interruptible(di->dev, AB8500_SYS_CTRL2_BLOCK,
1964 		AB8500_BATT_OK_REG, new_val);
1965 	return ret;
1966 }
1967 
1968 /**
1969  * ab8500_fg_instant_work() - Run the FG state machine instantly
1970  * @work:	pointer to the work_struct structure
1971  *
1972  * Work queue function for instant work
1973  */
ab8500_fg_instant_work(struct work_struct * work)1974 static void ab8500_fg_instant_work(struct work_struct *work)
1975 {
1976 	struct ab8500_fg *di = container_of(work, struct ab8500_fg, fg_work);
1977 
1978 	ab8500_fg_algorithm(di);
1979 }
1980 
1981 /**
1982  * ab8500_fg_cc_data_end_handler() - end of data conversion isr.
1983  * @irq:       interrupt number
1984  * @_di:       pointer to the ab8500_fg structure
1985  *
1986  * Returns IRQ status(IRQ_HANDLED)
1987  */
ab8500_fg_cc_data_end_handler(int irq,void * _di)1988 static irqreturn_t ab8500_fg_cc_data_end_handler(int irq, void *_di)
1989 {
1990 	struct ab8500_fg *di = _di;
1991 	if (!di->nbr_cceoc_irq_cnt) {
1992 		di->nbr_cceoc_irq_cnt++;
1993 		complete(&di->ab8500_fg_started);
1994 	} else {
1995 		di->nbr_cceoc_irq_cnt = 0;
1996 		complete(&di->ab8500_fg_complete);
1997 	}
1998 	return IRQ_HANDLED;
1999 }
2000 
2001 /**
2002  * ab8500_fg_cc_int_calib_handler () - end of calibration isr.
2003  * @irq:       interrupt number
2004  * @_di:       pointer to the ab8500_fg structure
2005  *
2006  * Returns IRQ status(IRQ_HANDLED)
2007  */
ab8500_fg_cc_int_calib_handler(int irq,void * _di)2008 static irqreturn_t ab8500_fg_cc_int_calib_handler(int irq, void *_di)
2009 {
2010 	struct ab8500_fg *di = _di;
2011 	di->calib_state = AB8500_FG_CALIB_END;
2012 	queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0);
2013 	return IRQ_HANDLED;
2014 }
2015 
2016 /**
2017  * ab8500_fg_cc_convend_handler() - isr to get battery avg current.
2018  * @irq:       interrupt number
2019  * @_di:       pointer to the ab8500_fg structure
2020  *
2021  * Returns IRQ status(IRQ_HANDLED)
2022  */
ab8500_fg_cc_convend_handler(int irq,void * _di)2023 static irqreturn_t ab8500_fg_cc_convend_handler(int irq, void *_di)
2024 {
2025 	struct ab8500_fg *di = _di;
2026 
2027 	queue_work(di->fg_wq, &di->fg_acc_cur_work);
2028 
2029 	return IRQ_HANDLED;
2030 }
2031 
2032 /**
2033  * ab8500_fg_batt_ovv_handler() - Battery OVV occured
2034  * @irq:       interrupt number
2035  * @_di:       pointer to the ab8500_fg structure
2036  *
2037  * Returns IRQ status(IRQ_HANDLED)
2038  */
ab8500_fg_batt_ovv_handler(int irq,void * _di)2039 static irqreturn_t ab8500_fg_batt_ovv_handler(int irq, void *_di)
2040 {
2041 	struct ab8500_fg *di = _di;
2042 
2043 	dev_dbg(di->dev, "Battery OVV\n");
2044 
2045 	/* Schedule a new HW failure check */
2046 	queue_delayed_work(di->fg_wq, &di->fg_check_hw_failure_work, 0);
2047 
2048 	return IRQ_HANDLED;
2049 }
2050 
2051 /**
2052  * ab8500_fg_lowbatf_handler() - Battery voltage is below LOW threshold
2053  * @irq:       interrupt number
2054  * @_di:       pointer to the ab8500_fg structure
2055  *
2056  * Returns IRQ status(IRQ_HANDLED)
2057  */
ab8500_fg_lowbatf_handler(int irq,void * _di)2058 static irqreturn_t ab8500_fg_lowbatf_handler(int irq, void *_di)
2059 {
2060 	struct ab8500_fg *di = _di;
2061 
2062 	/* Initiate handling in ab8500_fg_low_bat_work() if not already initiated. */
2063 	if (!di->flags.low_bat_delay) {
2064 		dev_warn(di->dev, "Battery voltage is below LOW threshold\n");
2065 		di->flags.low_bat_delay = true;
2066 		/*
2067 		 * Start a timer to check LOW_BAT again after some time
2068 		 * This is done to avoid shutdown on single voltage dips
2069 		 */
2070 		queue_delayed_work(di->fg_wq, &di->fg_low_bat_work,
2071 			round_jiffies(LOW_BAT_CHECK_INTERVAL));
2072 	}
2073 	return IRQ_HANDLED;
2074 }
2075 
2076 /**
2077  * ab8500_fg_get_property() - get the fg properties
2078  * @psy:	pointer to the power_supply structure
2079  * @psp:	pointer to the power_supply_property structure
2080  * @val:	pointer to the power_supply_propval union
2081  *
2082  * This function gets called when an application tries to get the
2083  * fg properties by reading the sysfs files.
2084  * voltage_now:		battery voltage
2085  * current_now:		battery instant current
2086  * current_avg:		battery average current
2087  * charge_full_design:	capacity where battery is considered full
2088  * charge_now:		battery capacity in nAh
2089  * capacity:		capacity in percent
2090  * capacity_level:	capacity level
2091  *
2092  * Returns error code in case of failure else 0 on success
2093  */
ab8500_fg_get_property(struct power_supply * psy,enum power_supply_property psp,union power_supply_propval * val)2094 static int ab8500_fg_get_property(struct power_supply *psy,
2095 	enum power_supply_property psp,
2096 	union power_supply_propval *val)
2097 {
2098 	struct ab8500_fg *di;
2099 
2100 	di = to_ab8500_fg_device_info(psy);
2101 
2102 	/*
2103 	 * If battery is identified as unknown and charging of unknown
2104 	 * batteries is disabled, we always report 100% capacity and
2105 	 * capacity level UNKNOWN, since we can't calculate
2106 	 * remaining capacity
2107 	 */
2108 
2109 	switch (psp) {
2110 	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
2111 		if (di->flags.bat_ovv)
2112 			val->intval = BATT_OVV_VALUE * 1000;
2113 		else
2114 			val->intval = di->vbat * 1000;
2115 		break;
2116 	case POWER_SUPPLY_PROP_CURRENT_NOW:
2117 		val->intval = di->inst_curr * 1000;
2118 		break;
2119 	case POWER_SUPPLY_PROP_CURRENT_AVG:
2120 		val->intval = di->avg_curr * 1000;
2121 		break;
2122 	case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN:
2123 		val->intval = ab8500_fg_convert_mah_to_uwh(di,
2124 				di->bat_cap.max_mah_design);
2125 		break;
2126 	case POWER_SUPPLY_PROP_ENERGY_FULL:
2127 		val->intval = ab8500_fg_convert_mah_to_uwh(di,
2128 				di->bat_cap.max_mah);
2129 		break;
2130 	case POWER_SUPPLY_PROP_ENERGY_NOW:
2131 		if (di->flags.batt_unknown && !di->bm->chg_unknown_bat &&
2132 				di->flags.batt_id_received)
2133 			val->intval = ab8500_fg_convert_mah_to_uwh(di,
2134 					di->bat_cap.max_mah);
2135 		else
2136 			val->intval = ab8500_fg_convert_mah_to_uwh(di,
2137 					di->bat_cap.prev_mah);
2138 		break;
2139 	case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
2140 		val->intval = di->bat_cap.max_mah_design;
2141 		break;
2142 	case POWER_SUPPLY_PROP_CHARGE_FULL:
2143 		val->intval = di->bat_cap.max_mah;
2144 		break;
2145 	case POWER_SUPPLY_PROP_CHARGE_NOW:
2146 		if (di->flags.batt_unknown && !di->bm->chg_unknown_bat &&
2147 				di->flags.batt_id_received)
2148 			val->intval = di->bat_cap.max_mah;
2149 		else
2150 			val->intval = di->bat_cap.prev_mah;
2151 		break;
2152 	case POWER_SUPPLY_PROP_CAPACITY:
2153 		if (di->flags.batt_unknown && !di->bm->chg_unknown_bat &&
2154 				di->flags.batt_id_received)
2155 			val->intval = 100;
2156 		else
2157 			val->intval = di->bat_cap.prev_percent;
2158 		break;
2159 	case POWER_SUPPLY_PROP_CAPACITY_LEVEL:
2160 		if (di->flags.batt_unknown && !di->bm->chg_unknown_bat &&
2161 				di->flags.batt_id_received)
2162 			val->intval = POWER_SUPPLY_CAPACITY_LEVEL_UNKNOWN;
2163 		else
2164 			val->intval = di->bat_cap.prev_level;
2165 		break;
2166 	default:
2167 		return -EINVAL;
2168 	}
2169 	return 0;
2170 }
2171 
ab8500_fg_get_ext_psy_data(struct device * dev,void * data)2172 static int ab8500_fg_get_ext_psy_data(struct device *dev, void *data)
2173 {
2174 	struct power_supply *psy;
2175 	struct power_supply *ext;
2176 	struct ab8500_fg *di;
2177 	union power_supply_propval ret;
2178 	int i, j;
2179 	bool psy_found = false;
2180 
2181 	psy = (struct power_supply *)data;
2182 	ext = dev_get_drvdata(dev);
2183 	di = to_ab8500_fg_device_info(psy);
2184 
2185 	/*
2186 	 * For all psy where the name of your driver
2187 	 * appears in any supplied_to
2188 	 */
2189 	for (i = 0; i < ext->num_supplicants; i++) {
2190 		if (!strcmp(ext->supplied_to[i], psy->name))
2191 			psy_found = true;
2192 	}
2193 
2194 	if (!psy_found)
2195 		return 0;
2196 
2197 	/* Go through all properties for the psy */
2198 	for (j = 0; j < ext->num_properties; j++) {
2199 		enum power_supply_property prop;
2200 		prop = ext->properties[j];
2201 
2202 		if (ext->get_property(ext, prop, &ret))
2203 			continue;
2204 
2205 		switch (prop) {
2206 		case POWER_SUPPLY_PROP_STATUS:
2207 			switch (ext->type) {
2208 			case POWER_SUPPLY_TYPE_BATTERY:
2209 				switch (ret.intval) {
2210 				case POWER_SUPPLY_STATUS_UNKNOWN:
2211 				case POWER_SUPPLY_STATUS_DISCHARGING:
2212 				case POWER_SUPPLY_STATUS_NOT_CHARGING:
2213 					if (!di->flags.charging)
2214 						break;
2215 					di->flags.charging = false;
2216 					di->flags.fully_charged = false;
2217 					if (di->bm->capacity_scaling)
2218 						ab8500_fg_update_cap_scalers(di);
2219 					queue_work(di->fg_wq, &di->fg_work);
2220 					break;
2221 				case POWER_SUPPLY_STATUS_FULL:
2222 					if (di->flags.fully_charged)
2223 						break;
2224 					di->flags.fully_charged = true;
2225 					di->flags.force_full = true;
2226 					/* Save current capacity as maximum */
2227 					di->bat_cap.max_mah = di->bat_cap.mah;
2228 					queue_work(di->fg_wq, &di->fg_work);
2229 					break;
2230 				case POWER_SUPPLY_STATUS_CHARGING:
2231 					if (di->flags.charging &&
2232 						!di->flags.fully_charged)
2233 						break;
2234 					di->flags.charging = true;
2235 					di->flags.fully_charged = false;
2236 					if (di->bm->capacity_scaling)
2237 						ab8500_fg_update_cap_scalers(di);
2238 					queue_work(di->fg_wq, &di->fg_work);
2239 					break;
2240 				};
2241 			default:
2242 				break;
2243 			};
2244 			break;
2245 		case POWER_SUPPLY_PROP_TECHNOLOGY:
2246 			switch (ext->type) {
2247 			case POWER_SUPPLY_TYPE_BATTERY:
2248 				if (!di->flags.batt_id_received &&
2249 				    di->bm->batt_id != BATTERY_UNKNOWN) {
2250 					const struct abx500_battery_type *b;
2251 
2252 					b = &(di->bm->bat_type[di->bm->batt_id]);
2253 
2254 					di->flags.batt_id_received = true;
2255 
2256 					di->bat_cap.max_mah_design =
2257 						MILLI_TO_MICRO *
2258 						b->charge_full_design;
2259 
2260 					di->bat_cap.max_mah =
2261 						di->bat_cap.max_mah_design;
2262 
2263 					di->vbat_nom = b->nominal_voltage;
2264 				}
2265 
2266 				if (ret.intval)
2267 					di->flags.batt_unknown = false;
2268 				else
2269 					di->flags.batt_unknown = true;
2270 				break;
2271 			default:
2272 				break;
2273 			}
2274 			break;
2275 		case POWER_SUPPLY_PROP_TEMP:
2276 			switch (ext->type) {
2277 			case POWER_SUPPLY_TYPE_BATTERY:
2278 				if (di->flags.batt_id_received)
2279 					di->bat_temp = ret.intval;
2280 				break;
2281 			default:
2282 				break;
2283 			}
2284 			break;
2285 		default:
2286 			break;
2287 		}
2288 	}
2289 	return 0;
2290 }
2291 
2292 /**
2293  * ab8500_fg_init_hw_registers() - Set up FG related registers
2294  * @di:		pointer to the ab8500_fg structure
2295  *
2296  * Set up battery OVV, low battery voltage registers
2297  */
ab8500_fg_init_hw_registers(struct ab8500_fg * di)2298 static int ab8500_fg_init_hw_registers(struct ab8500_fg *di)
2299 {
2300 	int ret;
2301 
2302 	/* Set VBAT OVV threshold */
2303 	ret = abx500_mask_and_set_register_interruptible(di->dev,
2304 		AB8500_CHARGER,
2305 		AB8500_BATT_OVV,
2306 		BATT_OVV_TH_4P75,
2307 		BATT_OVV_TH_4P75);
2308 	if (ret) {
2309 		dev_err(di->dev, "failed to set BATT_OVV\n");
2310 		goto out;
2311 	}
2312 
2313 	/* Enable VBAT OVV detection */
2314 	ret = abx500_mask_and_set_register_interruptible(di->dev,
2315 		AB8500_CHARGER,
2316 		AB8500_BATT_OVV,
2317 		BATT_OVV_ENA,
2318 		BATT_OVV_ENA);
2319 	if (ret) {
2320 		dev_err(di->dev, "failed to enable BATT_OVV\n");
2321 		goto out;
2322 	}
2323 
2324 	/* Low Battery Voltage */
2325 	ret = abx500_set_register_interruptible(di->dev,
2326 		AB8500_SYS_CTRL2_BLOCK,
2327 		AB8500_LOW_BAT_REG,
2328 		ab8500_volt_to_regval(
2329 			di->bm->fg_params->lowbat_threshold) << 1 |
2330 		LOW_BAT_ENABLE);
2331 	if (ret) {
2332 		dev_err(di->dev, "%s write failed\n", __func__);
2333 		goto out;
2334 	}
2335 
2336 	/* Battery OK threshold */
2337 	ret = ab8500_fg_battok_init_hw_register(di);
2338 	if (ret) {
2339 		dev_err(di->dev, "BattOk init write failed.\n");
2340 		goto out;
2341 	}
2342 
2343 	if (((is_ab8505(di->parent) || is_ab9540(di->parent)) &&
2344 			abx500_get_chip_id(di->dev) >= AB8500_CUT2P0)
2345 			|| is_ab8540(di->parent)) {
2346 		ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
2347 			AB8505_RTC_PCUT_MAX_TIME_REG, di->bm->fg_params->pcut_max_time);
2348 
2349 		if (ret) {
2350 			dev_err(di->dev, "%s write failed AB8505_RTC_PCUT_MAX_TIME_REG\n", __func__);
2351 			goto out;
2352 		};
2353 
2354 		ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
2355 			AB8505_RTC_PCUT_FLAG_TIME_REG, di->bm->fg_params->pcut_flag_time);
2356 
2357 		if (ret) {
2358 			dev_err(di->dev, "%s write failed AB8505_RTC_PCUT_FLAG_TIME_REG\n", __func__);
2359 			goto out;
2360 		};
2361 
2362 		ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
2363 			AB8505_RTC_PCUT_RESTART_REG, di->bm->fg_params->pcut_max_restart);
2364 
2365 		if (ret) {
2366 			dev_err(di->dev, "%s write failed AB8505_RTC_PCUT_RESTART_REG\n", __func__);
2367 			goto out;
2368 		};
2369 
2370 		ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
2371 			AB8505_RTC_PCUT_DEBOUNCE_REG, di->bm->fg_params->pcut_debounce_time);
2372 
2373 		if (ret) {
2374 			dev_err(di->dev, "%s write failed AB8505_RTC_PCUT_DEBOUNCE_REG\n", __func__);
2375 			goto out;
2376 		};
2377 
2378 		ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
2379 			AB8505_RTC_PCUT_CTL_STATUS_REG, di->bm->fg_params->pcut_enable);
2380 
2381 		if (ret) {
2382 			dev_err(di->dev, "%s write failed AB8505_RTC_PCUT_CTL_STATUS_REG\n", __func__);
2383 			goto out;
2384 		};
2385 	}
2386 out:
2387 	return ret;
2388 }
2389 
2390 /**
2391  * ab8500_fg_external_power_changed() - callback for power supply changes
2392  * @psy:       pointer to the structure power_supply
2393  *
2394  * This function is the entry point of the pointer external_power_changed
2395  * of the structure power_supply.
2396  * This function gets executed when there is a change in any external power
2397  * supply that this driver needs to be notified of.
2398  */
ab8500_fg_external_power_changed(struct power_supply * psy)2399 static void ab8500_fg_external_power_changed(struct power_supply *psy)
2400 {
2401 	struct ab8500_fg *di = to_ab8500_fg_device_info(psy);
2402 
2403 	class_for_each_device(power_supply_class, NULL,
2404 		&di->fg_psy, ab8500_fg_get_ext_psy_data);
2405 }
2406 
2407 /**
2408  * abab8500_fg_reinit_work() - work to reset the FG algorithm
2409  * @work:	pointer to the work_struct structure
2410  *
2411  * Used to reset the current battery capacity to be able to
2412  * retrigger a new voltage base capacity calculation. For
2413  * test and verification purpose.
2414  */
ab8500_fg_reinit_work(struct work_struct * work)2415 static void ab8500_fg_reinit_work(struct work_struct *work)
2416 {
2417 	struct ab8500_fg *di = container_of(work, struct ab8500_fg,
2418 		fg_reinit_work.work);
2419 
2420 	if (di->flags.calibrate == false) {
2421 		dev_dbg(di->dev, "Resetting FG state machine to init.\n");
2422 		ab8500_fg_clear_cap_samples(di);
2423 		ab8500_fg_calc_cap_discharge_voltage(di, true);
2424 		ab8500_fg_charge_state_to(di, AB8500_FG_CHARGE_INIT);
2425 		ab8500_fg_discharge_state_to(di, AB8500_FG_DISCHARGE_INIT);
2426 		queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0);
2427 
2428 	} else {
2429 		dev_err(di->dev, "Residual offset calibration ongoing "
2430 			"retrying..\n");
2431 		/* Wait one second until next try*/
2432 		queue_delayed_work(di->fg_wq, &di->fg_reinit_work,
2433 			round_jiffies(1));
2434 	}
2435 }
2436 
2437 /**
2438  * ab8500_fg_reinit() - forces FG algorithm to reinitialize with current values
2439  *
2440  * This function can be used to force the FG algorithm to recalculate a new
2441  * voltage based battery capacity.
2442  */
ab8500_fg_reinit(void)2443 void ab8500_fg_reinit(void)
2444 {
2445 	struct ab8500_fg *di = ab8500_fg_get();
2446 	/* User won't be notified if a null pointer returned. */
2447 	if (di != NULL)
2448 		queue_delayed_work(di->fg_wq, &di->fg_reinit_work, 0);
2449 }
2450 
2451 /* Exposure to the sysfs interface */
2452 
2453 struct ab8500_fg_sysfs_entry {
2454 	struct attribute attr;
2455 	ssize_t (*show)(struct ab8500_fg *, char *);
2456 	ssize_t (*store)(struct ab8500_fg *, const char *, size_t);
2457 };
2458 
charge_full_show(struct ab8500_fg * di,char * buf)2459 static ssize_t charge_full_show(struct ab8500_fg *di, char *buf)
2460 {
2461 	return sprintf(buf, "%d\n", di->bat_cap.max_mah);
2462 }
2463 
charge_full_store(struct ab8500_fg * di,const char * buf,size_t count)2464 static ssize_t charge_full_store(struct ab8500_fg *di, const char *buf,
2465 				 size_t count)
2466 {
2467 	unsigned long charge_full;
2468 	ssize_t ret = -EINVAL;
2469 
2470 	ret = strict_strtoul(buf, 10, &charge_full);
2471 
2472 	dev_dbg(di->dev, "Ret %zd charge_full %lu", ret, charge_full);
2473 
2474 	if (!ret) {
2475 		di->bat_cap.max_mah = (int) charge_full;
2476 		ret = count;
2477 	}
2478 	return ret;
2479 }
2480 
charge_now_show(struct ab8500_fg * di,char * buf)2481 static ssize_t charge_now_show(struct ab8500_fg *di, char *buf)
2482 {
2483 	return sprintf(buf, "%d\n", di->bat_cap.prev_mah);
2484 }
2485 
charge_now_store(struct ab8500_fg * di,const char * buf,size_t count)2486 static ssize_t charge_now_store(struct ab8500_fg *di, const char *buf,
2487 				 size_t count)
2488 {
2489 	unsigned long charge_now;
2490 	ssize_t ret;
2491 
2492 	ret = strict_strtoul(buf, 10, &charge_now);
2493 
2494 	dev_dbg(di->dev, "Ret %zd charge_now %lu was %d",
2495 		ret, charge_now, di->bat_cap.prev_mah);
2496 
2497 	if (!ret) {
2498 		di->bat_cap.user_mah = (int) charge_now;
2499 		di->flags.user_cap = true;
2500 		ret = count;
2501 		queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0);
2502 	}
2503 	return ret;
2504 }
2505 
2506 static struct ab8500_fg_sysfs_entry charge_full_attr =
2507 	__ATTR(charge_full, 0644, charge_full_show, charge_full_store);
2508 
2509 static struct ab8500_fg_sysfs_entry charge_now_attr =
2510 	__ATTR(charge_now, 0644, charge_now_show, charge_now_store);
2511 
2512 static ssize_t
ab8500_fg_show(struct kobject * kobj,struct attribute * attr,char * buf)2513 ab8500_fg_show(struct kobject *kobj, struct attribute *attr, char *buf)
2514 {
2515 	struct ab8500_fg_sysfs_entry *entry;
2516 	struct ab8500_fg *di;
2517 
2518 	entry = container_of(attr, struct ab8500_fg_sysfs_entry, attr);
2519 	di = container_of(kobj, struct ab8500_fg, fg_kobject);
2520 
2521 	if (!entry->show)
2522 		return -EIO;
2523 
2524 	return entry->show(di, buf);
2525 }
2526 static ssize_t
ab8500_fg_store(struct kobject * kobj,struct attribute * attr,const char * buf,size_t count)2527 ab8500_fg_store(struct kobject *kobj, struct attribute *attr, const char *buf,
2528 		size_t count)
2529 {
2530 	struct ab8500_fg_sysfs_entry *entry;
2531 	struct ab8500_fg *di;
2532 
2533 	entry = container_of(attr, struct ab8500_fg_sysfs_entry, attr);
2534 	di = container_of(kobj, struct ab8500_fg, fg_kobject);
2535 
2536 	if (!entry->store)
2537 		return -EIO;
2538 
2539 	return entry->store(di, buf, count);
2540 }
2541 
2542 static const struct sysfs_ops ab8500_fg_sysfs_ops = {
2543 	.show = ab8500_fg_show,
2544 	.store = ab8500_fg_store,
2545 };
2546 
2547 static struct attribute *ab8500_fg_attrs[] = {
2548 	&charge_full_attr.attr,
2549 	&charge_now_attr.attr,
2550 	NULL,
2551 };
2552 
2553 static struct kobj_type ab8500_fg_ktype = {
2554 	.sysfs_ops = &ab8500_fg_sysfs_ops,
2555 	.default_attrs = ab8500_fg_attrs,
2556 };
2557 
2558 /**
2559  * ab8500_chargalg_sysfs_exit() - de-init of sysfs entry
2560  * @di:                pointer to the struct ab8500_chargalg
2561  *
2562  * This function removes the entry in sysfs.
2563  */
ab8500_fg_sysfs_exit(struct ab8500_fg * di)2564 static void ab8500_fg_sysfs_exit(struct ab8500_fg *di)
2565 {
2566 	kobject_del(&di->fg_kobject);
2567 }
2568 
2569 /**
2570  * ab8500_chargalg_sysfs_init() - init of sysfs entry
2571  * @di:                pointer to the struct ab8500_chargalg
2572  *
2573  * This function adds an entry in sysfs.
2574  * Returns error code in case of failure else 0(on success)
2575  */
ab8500_fg_sysfs_init(struct ab8500_fg * di)2576 static int ab8500_fg_sysfs_init(struct ab8500_fg *di)
2577 {
2578 	int ret = 0;
2579 
2580 	ret = kobject_init_and_add(&di->fg_kobject,
2581 		&ab8500_fg_ktype,
2582 		NULL, "battery");
2583 	if (ret < 0)
2584 		dev_err(di->dev, "failed to create sysfs entry\n");
2585 
2586 	return ret;
2587 }
2588 
ab8505_powercut_flagtime_read(struct device * dev,struct device_attribute * attr,char * buf)2589 static ssize_t ab8505_powercut_flagtime_read(struct device *dev,
2590 			     struct device_attribute *attr,
2591 			     char *buf)
2592 {
2593 	int ret;
2594 	u8 reg_value;
2595 	struct power_supply *psy = dev_get_drvdata(dev);
2596 	struct ab8500_fg *di;
2597 
2598 	di = to_ab8500_fg_device_info(psy);
2599 
2600 	ret = abx500_get_register_interruptible(di->dev, AB8500_RTC,
2601 		AB8505_RTC_PCUT_FLAG_TIME_REG, &reg_value);
2602 
2603 	if (ret < 0) {
2604 		dev_err(dev, "Failed to read AB8505_RTC_PCUT_FLAG_TIME_REG\n");
2605 		goto fail;
2606 	}
2607 
2608 	return scnprintf(buf, PAGE_SIZE, "%d\n", (reg_value & 0x7F));
2609 
2610 fail:
2611 	return ret;
2612 }
2613 
ab8505_powercut_flagtime_write(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)2614 static ssize_t ab8505_powercut_flagtime_write(struct device *dev,
2615 				  struct device_attribute *attr,
2616 				  const char *buf, size_t count)
2617 {
2618 	int ret;
2619 	long unsigned reg_value;
2620 	struct power_supply *psy = dev_get_drvdata(dev);
2621 	struct ab8500_fg *di;
2622 
2623 	di = to_ab8500_fg_device_info(psy);
2624 
2625 	reg_value = simple_strtoul(buf, NULL, 10);
2626 
2627 	if (reg_value > 0x7F) {
2628 		dev_err(dev, "Incorrect parameter, echo 0 (1.98s) - 127 (15.625ms) for flagtime\n");
2629 		goto fail;
2630 	}
2631 
2632 	ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
2633 		AB8505_RTC_PCUT_FLAG_TIME_REG, (u8)reg_value);
2634 
2635 	if (ret < 0)
2636 		dev_err(dev, "Failed to set AB8505_RTC_PCUT_FLAG_TIME_REG\n");
2637 
2638 fail:
2639 	return count;
2640 }
2641 
ab8505_powercut_maxtime_read(struct device * dev,struct device_attribute * attr,char * buf)2642 static ssize_t ab8505_powercut_maxtime_read(struct device *dev,
2643 			     struct device_attribute *attr,
2644 			     char *buf)
2645 {
2646 	int ret;
2647 	u8 reg_value;
2648 	struct power_supply *psy = dev_get_drvdata(dev);
2649 	struct ab8500_fg *di;
2650 
2651 	di = to_ab8500_fg_device_info(psy);
2652 
2653 	ret = abx500_get_register_interruptible(di->dev, AB8500_RTC,
2654 		AB8505_RTC_PCUT_MAX_TIME_REG, &reg_value);
2655 
2656 	if (ret < 0) {
2657 		dev_err(dev, "Failed to read AB8505_RTC_PCUT_MAX_TIME_REG\n");
2658 		goto fail;
2659 	}
2660 
2661 	return scnprintf(buf, PAGE_SIZE, "%d\n", (reg_value & 0x7F));
2662 
2663 fail:
2664 	return ret;
2665 
2666 }
2667 
ab8505_powercut_maxtime_write(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)2668 static ssize_t ab8505_powercut_maxtime_write(struct device *dev,
2669 				  struct device_attribute *attr,
2670 				  const char *buf, size_t count)
2671 {
2672 	int ret;
2673 	int reg_value;
2674 	struct power_supply *psy = dev_get_drvdata(dev);
2675 	struct ab8500_fg *di;
2676 
2677 	di = to_ab8500_fg_device_info(psy);
2678 
2679 	reg_value = simple_strtoul(buf, NULL, 10);
2680 	if (reg_value > 0x7F) {
2681 		dev_err(dev, "Incorrect parameter, echo 0 (0.0s) - 127 (1.98s) for maxtime\n");
2682 		goto fail;
2683 	}
2684 
2685 	ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
2686 		AB8505_RTC_PCUT_MAX_TIME_REG, (u8)reg_value);
2687 
2688 	if (ret < 0)
2689 		dev_err(dev, "Failed to set AB8505_RTC_PCUT_MAX_TIME_REG\n");
2690 
2691 fail:
2692 	return count;
2693 }
2694 
ab8505_powercut_restart_read(struct device * dev,struct device_attribute * attr,char * buf)2695 static ssize_t ab8505_powercut_restart_read(struct device *dev,
2696 			     struct device_attribute *attr,
2697 			     char *buf)
2698 {
2699 	int ret;
2700 	u8 reg_value;
2701 	struct power_supply *psy = dev_get_drvdata(dev);
2702 	struct ab8500_fg *di;
2703 
2704 	di = to_ab8500_fg_device_info(psy);
2705 
2706 	ret = abx500_get_register_interruptible(di->dev, AB8500_RTC,
2707 		AB8505_RTC_PCUT_RESTART_REG, &reg_value);
2708 
2709 	if (ret < 0) {
2710 		dev_err(dev, "Failed to read AB8505_RTC_PCUT_RESTART_REG\n");
2711 		goto fail;
2712 	}
2713 
2714 	return scnprintf(buf, PAGE_SIZE, "%d\n", (reg_value & 0xF));
2715 
2716 fail:
2717 	return ret;
2718 }
2719 
ab8505_powercut_restart_write(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)2720 static ssize_t ab8505_powercut_restart_write(struct device *dev,
2721 					     struct device_attribute *attr,
2722 					     const char *buf, size_t count)
2723 {
2724 	int ret;
2725 	int reg_value;
2726 	struct power_supply *psy = dev_get_drvdata(dev);
2727 	struct ab8500_fg *di;
2728 
2729 	di = to_ab8500_fg_device_info(psy);
2730 
2731 	reg_value = simple_strtoul(buf, NULL, 10);
2732 	if (reg_value > 0xF) {
2733 		dev_err(dev, "Incorrect parameter, echo 0 - 15 for number of restart\n");
2734 		goto fail;
2735 	}
2736 
2737 	ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
2738 						AB8505_RTC_PCUT_RESTART_REG, (u8)reg_value);
2739 
2740 	if (ret < 0)
2741 		dev_err(dev, "Failed to set AB8505_RTC_PCUT_RESTART_REG\n");
2742 
2743 fail:
2744 	return count;
2745 
2746 }
2747 
ab8505_powercut_timer_read(struct device * dev,struct device_attribute * attr,char * buf)2748 static ssize_t ab8505_powercut_timer_read(struct device *dev,
2749 					  struct device_attribute *attr,
2750 					  char *buf)
2751 {
2752 	int ret;
2753 	u8 reg_value;
2754 	struct power_supply *psy = dev_get_drvdata(dev);
2755 	struct ab8500_fg *di;
2756 
2757 	di = to_ab8500_fg_device_info(psy);
2758 
2759 	ret = abx500_get_register_interruptible(di->dev, AB8500_RTC,
2760 						AB8505_RTC_PCUT_TIME_REG, &reg_value);
2761 
2762 	if (ret < 0) {
2763 		dev_err(dev, "Failed to read AB8505_RTC_PCUT_TIME_REG\n");
2764 		goto fail;
2765 	}
2766 
2767 	return scnprintf(buf, PAGE_SIZE, "%d\n", (reg_value & 0x7F));
2768 
2769 fail:
2770 	return ret;
2771 }
2772 
ab8505_powercut_restart_counter_read(struct device * dev,struct device_attribute * attr,char * buf)2773 static ssize_t ab8505_powercut_restart_counter_read(struct device *dev,
2774 						    struct device_attribute *attr,
2775 						    char *buf)
2776 {
2777 	int ret;
2778 	u8 reg_value;
2779 	struct power_supply *psy = dev_get_drvdata(dev);
2780 	struct ab8500_fg *di;
2781 
2782 	di = to_ab8500_fg_device_info(psy);
2783 
2784 	ret = abx500_get_register_interruptible(di->dev, AB8500_RTC,
2785 						AB8505_RTC_PCUT_RESTART_REG, &reg_value);
2786 
2787 	if (ret < 0) {
2788 		dev_err(dev, "Failed to read AB8505_RTC_PCUT_RESTART_REG\n");
2789 		goto fail;
2790 	}
2791 
2792 	return scnprintf(buf, PAGE_SIZE, "%d\n", (reg_value & 0xF0) >> 4);
2793 
2794 fail:
2795 	return ret;
2796 }
2797 
ab8505_powercut_read(struct device * dev,struct device_attribute * attr,char * buf)2798 static ssize_t ab8505_powercut_read(struct device *dev,
2799 				    struct device_attribute *attr,
2800 				    char *buf)
2801 {
2802 	int ret;
2803 	u8 reg_value;
2804 	struct power_supply *psy = dev_get_drvdata(dev);
2805 	struct ab8500_fg *di;
2806 
2807 	di = to_ab8500_fg_device_info(psy);
2808 
2809 	ret = abx500_get_register_interruptible(di->dev, AB8500_RTC,
2810 						AB8505_RTC_PCUT_CTL_STATUS_REG, &reg_value);
2811 
2812 	if (ret < 0)
2813 		goto fail;
2814 
2815 	return scnprintf(buf, PAGE_SIZE, "%d\n", (reg_value & 0x1));
2816 
2817 fail:
2818 	return ret;
2819 }
2820 
ab8505_powercut_write(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)2821 static ssize_t ab8505_powercut_write(struct device *dev,
2822 				     struct device_attribute *attr,
2823 				     const char *buf, size_t count)
2824 {
2825 	int ret;
2826 	int reg_value;
2827 	struct power_supply *psy = dev_get_drvdata(dev);
2828 	struct ab8500_fg *di;
2829 
2830 	di = to_ab8500_fg_device_info(psy);
2831 
2832 	reg_value = simple_strtoul(buf, NULL, 10);
2833 	if (reg_value > 0x1) {
2834 		dev_err(dev, "Incorrect parameter, echo 0/1 to disable/enable Pcut feature\n");
2835 		goto fail;
2836 	}
2837 
2838 	ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
2839 						AB8505_RTC_PCUT_CTL_STATUS_REG, (u8)reg_value);
2840 
2841 	if (ret < 0)
2842 		dev_err(dev, "Failed to set AB8505_RTC_PCUT_CTL_STATUS_REG\n");
2843 
2844 fail:
2845 	return count;
2846 }
2847 
ab8505_powercut_flag_read(struct device * dev,struct device_attribute * attr,char * buf)2848 static ssize_t ab8505_powercut_flag_read(struct device *dev,
2849 					 struct device_attribute *attr,
2850 					 char *buf)
2851 {
2852 
2853 	int ret;
2854 	u8 reg_value;
2855 	struct power_supply *psy = dev_get_drvdata(dev);
2856 	struct ab8500_fg *di;
2857 
2858 	di = to_ab8500_fg_device_info(psy);
2859 
2860 	ret = abx500_get_register_interruptible(di->dev, AB8500_RTC,
2861 						AB8505_RTC_PCUT_CTL_STATUS_REG,  &reg_value);
2862 
2863 	if (ret < 0) {
2864 		dev_err(dev, "Failed to read AB8505_RTC_PCUT_CTL_STATUS_REG\n");
2865 		goto fail;
2866 	}
2867 
2868 	return scnprintf(buf, PAGE_SIZE, "%d\n", ((reg_value & 0x10) >> 4));
2869 
2870 fail:
2871 	return ret;
2872 }
2873 
ab8505_powercut_debounce_read(struct device * dev,struct device_attribute * attr,char * buf)2874 static ssize_t ab8505_powercut_debounce_read(struct device *dev,
2875 					     struct device_attribute *attr,
2876 					     char *buf)
2877 {
2878 	int ret;
2879 	u8 reg_value;
2880 	struct power_supply *psy = dev_get_drvdata(dev);
2881 	struct ab8500_fg *di;
2882 
2883 	di = to_ab8500_fg_device_info(psy);
2884 
2885 	ret = abx500_get_register_interruptible(di->dev, AB8500_RTC,
2886 						AB8505_RTC_PCUT_DEBOUNCE_REG,  &reg_value);
2887 
2888 	if (ret < 0) {
2889 		dev_err(dev, "Failed to read AB8505_RTC_PCUT_DEBOUNCE_REG\n");
2890 		goto fail;
2891 	}
2892 
2893 	return scnprintf(buf, PAGE_SIZE, "%d\n", (reg_value & 0x7));
2894 
2895 fail:
2896 	return ret;
2897 }
2898 
ab8505_powercut_debounce_write(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)2899 static ssize_t ab8505_powercut_debounce_write(struct device *dev,
2900 					      struct device_attribute *attr,
2901 					      const char *buf, size_t count)
2902 {
2903 	int ret;
2904 	int reg_value;
2905 	struct power_supply *psy = dev_get_drvdata(dev);
2906 	struct ab8500_fg *di;
2907 
2908 	di = to_ab8500_fg_device_info(psy);
2909 
2910 	reg_value = simple_strtoul(buf, NULL, 10);
2911 	if (reg_value > 0x7) {
2912 		dev_err(dev, "Incorrect parameter, echo 0 to 7 for debounce setting\n");
2913 		goto fail;
2914 	}
2915 
2916 	ret = abx500_set_register_interruptible(di->dev, AB8500_RTC,
2917 						AB8505_RTC_PCUT_DEBOUNCE_REG, (u8)reg_value);
2918 
2919 	if (ret < 0)
2920 		dev_err(dev, "Failed to set AB8505_RTC_PCUT_DEBOUNCE_REG\n");
2921 
2922 fail:
2923 	return count;
2924 }
2925 
ab8505_powercut_enable_status_read(struct device * dev,struct device_attribute * attr,char * buf)2926 static ssize_t ab8505_powercut_enable_status_read(struct device *dev,
2927 						  struct device_attribute *attr,
2928 						  char *buf)
2929 {
2930 	int ret;
2931 	u8 reg_value;
2932 	struct power_supply *psy = dev_get_drvdata(dev);
2933 	struct ab8500_fg *di;
2934 
2935 	di = to_ab8500_fg_device_info(psy);
2936 
2937 	ret = abx500_get_register_interruptible(di->dev, AB8500_RTC,
2938 						AB8505_RTC_PCUT_CTL_STATUS_REG, &reg_value);
2939 
2940 	if (ret < 0) {
2941 		dev_err(dev, "Failed to read AB8505_RTC_PCUT_CTL_STATUS_REG\n");
2942 		goto fail;
2943 	}
2944 
2945 	return scnprintf(buf, PAGE_SIZE, "%d\n", ((reg_value & 0x20) >> 5));
2946 
2947 fail:
2948 	return ret;
2949 }
2950 
2951 static struct device_attribute ab8505_fg_sysfs_psy_attrs[] = {
2952 	__ATTR(powercut_flagtime, (S_IRUGO | S_IWUSR | S_IWGRP),
2953 		ab8505_powercut_flagtime_read, ab8505_powercut_flagtime_write),
2954 	__ATTR(powercut_maxtime, (S_IRUGO | S_IWUSR | S_IWGRP),
2955 		ab8505_powercut_maxtime_read, ab8505_powercut_maxtime_write),
2956 	__ATTR(powercut_restart_max, (S_IRUGO | S_IWUSR | S_IWGRP),
2957 		ab8505_powercut_restart_read, ab8505_powercut_restart_write),
2958 	__ATTR(powercut_timer, S_IRUGO, ab8505_powercut_timer_read, NULL),
2959 	__ATTR(powercut_restart_counter, S_IRUGO,
2960 		ab8505_powercut_restart_counter_read, NULL),
2961 	__ATTR(powercut_enable, (S_IRUGO | S_IWUSR | S_IWGRP),
2962 		ab8505_powercut_read, ab8505_powercut_write),
2963 	__ATTR(powercut_flag, S_IRUGO, ab8505_powercut_flag_read, NULL),
2964 	__ATTR(powercut_debounce_time, (S_IRUGO | S_IWUSR | S_IWGRP),
2965 		ab8505_powercut_debounce_read, ab8505_powercut_debounce_write),
2966 	__ATTR(powercut_enable_status, S_IRUGO,
2967 		ab8505_powercut_enable_status_read, NULL),
2968 };
2969 
ab8500_fg_sysfs_psy_create_attrs(struct device * dev)2970 static int ab8500_fg_sysfs_psy_create_attrs(struct device *dev)
2971 {
2972 	unsigned int i, j;
2973 	struct power_supply *psy = dev_get_drvdata(dev);
2974 	struct ab8500_fg *di;
2975 
2976 	di = to_ab8500_fg_device_info(psy);
2977 
2978 	if (((is_ab8505(di->parent) || is_ab9540(di->parent)) &&
2979 	     abx500_get_chip_id(dev->parent) >= AB8500_CUT2P0)
2980 	    || is_ab8540(di->parent)) {
2981 		for (j = 0; j < ARRAY_SIZE(ab8505_fg_sysfs_psy_attrs); j++)
2982 			if (device_create_file(dev, &ab8505_fg_sysfs_psy_attrs[j]))
2983 				goto sysfs_psy_create_attrs_failed_ab8505;
2984 	}
2985 	return 0;
2986 sysfs_psy_create_attrs_failed_ab8505:
2987 	dev_err(dev, "Failed creating sysfs psy attrs for ab8505.\n");
2988 	while (j--)
2989 		device_remove_file(dev, &ab8505_fg_sysfs_psy_attrs[i]);
2990 
2991 	return -EIO;
2992 }
2993 
ab8500_fg_sysfs_psy_remove_attrs(struct device * dev)2994 static void ab8500_fg_sysfs_psy_remove_attrs(struct device *dev)
2995 {
2996 	unsigned int i;
2997 	struct power_supply *psy = dev_get_drvdata(dev);
2998 	struct ab8500_fg *di;
2999 
3000 	di = to_ab8500_fg_device_info(psy);
3001 
3002 	if (((is_ab8505(di->parent) || is_ab9540(di->parent)) &&
3003 	     abx500_get_chip_id(dev->parent) >= AB8500_CUT2P0)
3004 	    || is_ab8540(di->parent)) {
3005 		for (i = 0; i < ARRAY_SIZE(ab8505_fg_sysfs_psy_attrs); i++)
3006 			(void)device_remove_file(dev, &ab8505_fg_sysfs_psy_attrs[i]);
3007 	}
3008 }
3009 
3010 /* Exposure to the sysfs interface <<END>> */
3011 
3012 #if defined(CONFIG_PM)
ab8500_fg_resume(struct platform_device * pdev)3013 static int ab8500_fg_resume(struct platform_device *pdev)
3014 {
3015 	struct ab8500_fg *di = platform_get_drvdata(pdev);
3016 
3017 	/*
3018 	 * Change state if we're not charging. If we're charging we will wake
3019 	 * up on the FG IRQ
3020 	 */
3021 	if (!di->flags.charging) {
3022 		ab8500_fg_discharge_state_to(di, AB8500_FG_DISCHARGE_WAKEUP);
3023 		queue_work(di->fg_wq, &di->fg_work);
3024 	}
3025 
3026 	return 0;
3027 }
3028 
ab8500_fg_suspend(struct platform_device * pdev,pm_message_t state)3029 static int ab8500_fg_suspend(struct platform_device *pdev,
3030 	pm_message_t state)
3031 {
3032 	struct ab8500_fg *di = platform_get_drvdata(pdev);
3033 
3034 	flush_delayed_work(&di->fg_periodic_work);
3035 	flush_work(&di->fg_work);
3036 	flush_work(&di->fg_acc_cur_work);
3037 	flush_delayed_work(&di->fg_reinit_work);
3038 	flush_delayed_work(&di->fg_low_bat_work);
3039 	flush_delayed_work(&di->fg_check_hw_failure_work);
3040 
3041 	/*
3042 	 * If the FG is enabled we will disable it before going to suspend
3043 	 * only if we're not charging
3044 	 */
3045 	if (di->flags.fg_enabled && !di->flags.charging)
3046 		ab8500_fg_coulomb_counter(di, false);
3047 
3048 	return 0;
3049 }
3050 #else
3051 #define ab8500_fg_suspend      NULL
3052 #define ab8500_fg_resume       NULL
3053 #endif
3054 
ab8500_fg_remove(struct platform_device * pdev)3055 static int ab8500_fg_remove(struct platform_device *pdev)
3056 {
3057 	int ret = 0;
3058 	struct ab8500_fg *di = platform_get_drvdata(pdev);
3059 
3060 	list_del(&di->node);
3061 
3062 	/* Disable coulomb counter */
3063 	ret = ab8500_fg_coulomb_counter(di, false);
3064 	if (ret)
3065 		dev_err(di->dev, "failed to disable coulomb counter\n");
3066 
3067 	destroy_workqueue(di->fg_wq);
3068 	ab8500_fg_sysfs_exit(di);
3069 
3070 	flush_scheduled_work();
3071 	ab8500_fg_sysfs_psy_remove_attrs(di->fg_psy.dev);
3072 	power_supply_unregister(&di->fg_psy);
3073 	platform_set_drvdata(pdev, NULL);
3074 	return ret;
3075 }
3076 
3077 /* ab8500 fg driver interrupts and their respective isr */
3078 static struct ab8500_fg_interrupts ab8500_fg_irq[] = {
3079 	{"NCONV_ACCU", ab8500_fg_cc_convend_handler},
3080 	{"BATT_OVV", ab8500_fg_batt_ovv_handler},
3081 	{"LOW_BAT_F", ab8500_fg_lowbatf_handler},
3082 	{"CC_INT_CALIB", ab8500_fg_cc_int_calib_handler},
3083 	{"CCEOC", ab8500_fg_cc_data_end_handler},
3084 };
3085 
3086 static char *supply_interface[] = {
3087 	"ab8500_chargalg",
3088 	"ab8500_usb",
3089 };
3090 
ab8500_fg_probe(struct platform_device * pdev)3091 static int ab8500_fg_probe(struct platform_device *pdev)
3092 {
3093 	struct device_node *np = pdev->dev.of_node;
3094 	struct abx500_bm_data *plat = pdev->dev.platform_data;
3095 	struct ab8500_fg *di;
3096 	int i, irq;
3097 	int ret = 0;
3098 
3099 	di = devm_kzalloc(&pdev->dev, sizeof(*di), GFP_KERNEL);
3100 	if (!di) {
3101 		dev_err(&pdev->dev, "%s no mem for ab8500_fg\n", __func__);
3102 		return -ENOMEM;
3103 	}
3104 
3105 	if (!plat) {
3106 		dev_err(&pdev->dev, "no battery management data supplied\n");
3107 		return -EINVAL;
3108 	}
3109 	di->bm = plat;
3110 
3111 	if (np) {
3112 		ret = ab8500_bm_of_probe(&pdev->dev, np, di->bm);
3113 		if (ret) {
3114 			dev_err(&pdev->dev, "failed to get battery information\n");
3115 			return ret;
3116 		}
3117 	}
3118 
3119 	mutex_init(&di->cc_lock);
3120 
3121 	/* get parent data */
3122 	di->dev = &pdev->dev;
3123 	di->parent = dev_get_drvdata(pdev->dev.parent);
3124 	di->gpadc = ab8500_gpadc_get("ab8500-gpadc.0");
3125 
3126 	di->fg_psy.name = "ab8500_fg";
3127 	di->fg_psy.type = POWER_SUPPLY_TYPE_BATTERY;
3128 	di->fg_psy.properties = ab8500_fg_props;
3129 	di->fg_psy.num_properties = ARRAY_SIZE(ab8500_fg_props);
3130 	di->fg_psy.get_property = ab8500_fg_get_property;
3131 	di->fg_psy.supplied_to = supply_interface;
3132 	di->fg_psy.num_supplicants = ARRAY_SIZE(supply_interface),
3133 	di->fg_psy.external_power_changed = ab8500_fg_external_power_changed;
3134 
3135 	di->bat_cap.max_mah_design = MILLI_TO_MICRO *
3136 		di->bm->bat_type[di->bm->batt_id].charge_full_design;
3137 
3138 	di->bat_cap.max_mah = di->bat_cap.max_mah_design;
3139 
3140 	di->vbat_nom = di->bm->bat_type[di->bm->batt_id].nominal_voltage;
3141 
3142 	di->init_capacity = true;
3143 
3144 	ab8500_fg_charge_state_to(di, AB8500_FG_CHARGE_INIT);
3145 	ab8500_fg_discharge_state_to(di, AB8500_FG_DISCHARGE_INIT);
3146 
3147 	/* Create a work queue for running the FG algorithm */
3148 	di->fg_wq = create_singlethread_workqueue("ab8500_fg_wq");
3149 	if (di->fg_wq == NULL) {
3150 		dev_err(di->dev, "failed to create work queue\n");
3151 		return -ENOMEM;
3152 	}
3153 
3154 	/* Init work for running the fg algorithm instantly */
3155 	INIT_WORK(&di->fg_work, ab8500_fg_instant_work);
3156 
3157 	/* Init work for getting the battery accumulated current */
3158 	INIT_WORK(&di->fg_acc_cur_work, ab8500_fg_acc_cur_work);
3159 
3160 	/* Init work for reinitialising the fg algorithm */
3161 	INIT_DEFERRABLE_WORK(&di->fg_reinit_work,
3162 		ab8500_fg_reinit_work);
3163 
3164 	/* Work delayed Queue to run the state machine */
3165 	INIT_DEFERRABLE_WORK(&di->fg_periodic_work,
3166 		ab8500_fg_periodic_work);
3167 
3168 	/* Work to check low battery condition */
3169 	INIT_DEFERRABLE_WORK(&di->fg_low_bat_work,
3170 		ab8500_fg_low_bat_work);
3171 
3172 	/* Init work for HW failure check */
3173 	INIT_DEFERRABLE_WORK(&di->fg_check_hw_failure_work,
3174 		ab8500_fg_check_hw_failure_work);
3175 
3176 	/* Reset battery low voltage flag */
3177 	di->flags.low_bat = false;
3178 
3179 	/* Initialize low battery counter */
3180 	di->low_bat_cnt = 10;
3181 
3182 	/* Initialize OVV, and other registers */
3183 	ret = ab8500_fg_init_hw_registers(di);
3184 	if (ret) {
3185 		dev_err(di->dev, "failed to initialize registers\n");
3186 		goto free_inst_curr_wq;
3187 	}
3188 
3189 	/* Consider battery unknown until we're informed otherwise */
3190 	di->flags.batt_unknown = true;
3191 	di->flags.batt_id_received = false;
3192 
3193 	/* Register FG power supply class */
3194 	ret = power_supply_register(di->dev, &di->fg_psy);
3195 	if (ret) {
3196 		dev_err(di->dev, "failed to register FG psy\n");
3197 		goto free_inst_curr_wq;
3198 	}
3199 
3200 	di->fg_samples = SEC_TO_SAMPLE(di->bm->fg_params->init_timer);
3201 	ab8500_fg_coulomb_counter(di, true);
3202 
3203 	/*
3204 	 * Initialize completion used to notify completion and start
3205 	 * of inst current
3206 	 */
3207 	init_completion(&di->ab8500_fg_started);
3208 	init_completion(&di->ab8500_fg_complete);
3209 
3210 	/* Register interrupts */
3211 	for (i = 0; i < ARRAY_SIZE(ab8500_fg_irq); i++) {
3212 		irq = platform_get_irq_byname(pdev, ab8500_fg_irq[i].name);
3213 		ret = request_threaded_irq(irq, NULL, ab8500_fg_irq[i].isr,
3214 			IRQF_SHARED | IRQF_NO_SUSPEND,
3215 			ab8500_fg_irq[i].name, di);
3216 
3217 		if (ret != 0) {
3218 			dev_err(di->dev, "failed to request %s IRQ %d: %d\n"
3219 				, ab8500_fg_irq[i].name, irq, ret);
3220 			goto free_irq;
3221 		}
3222 		dev_dbg(di->dev, "Requested %s IRQ %d: %d\n",
3223 			ab8500_fg_irq[i].name, irq, ret);
3224 	}
3225 	di->irq = platform_get_irq_byname(pdev, "CCEOC");
3226 	disable_irq(di->irq);
3227 	di->nbr_cceoc_irq_cnt = 0;
3228 
3229 	platform_set_drvdata(pdev, di);
3230 
3231 	ret = ab8500_fg_sysfs_init(di);
3232 	if (ret) {
3233 		dev_err(di->dev, "failed to create sysfs entry\n");
3234 		goto free_irq;
3235 	}
3236 
3237 	ret = ab8500_fg_sysfs_psy_create_attrs(di->fg_psy.dev);
3238 	if (ret) {
3239 		dev_err(di->dev, "failed to create FG psy\n");
3240 		ab8500_fg_sysfs_exit(di);
3241 		goto free_irq;
3242 	}
3243 
3244 	/* Calibrate the fg first time */
3245 	di->flags.calibrate = true;
3246 	di->calib_state = AB8500_FG_CALIB_INIT;
3247 
3248 	/* Use room temp as default value until we get an update from driver. */
3249 	di->bat_temp = 210;
3250 
3251 	/* Run the FG algorithm */
3252 	queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0);
3253 
3254 	list_add_tail(&di->node, &ab8500_fg_list);
3255 
3256 	return ret;
3257 
3258 free_irq:
3259 	power_supply_unregister(&di->fg_psy);
3260 
3261 	/* We also have to free all successfully registered irqs */
3262 	for (i = i - 1; i >= 0; i--) {
3263 		irq = platform_get_irq_byname(pdev, ab8500_fg_irq[i].name);
3264 		free_irq(irq, di);
3265 	}
3266 free_inst_curr_wq:
3267 	destroy_workqueue(di->fg_wq);
3268 	return ret;
3269 }
3270 
3271 static const struct of_device_id ab8500_fg_match[] = {
3272 	{ .compatible = "stericsson,ab8500-fg", },
3273 	{ },
3274 };
3275 
3276 static struct platform_driver ab8500_fg_driver = {
3277 	.probe = ab8500_fg_probe,
3278 	.remove = ab8500_fg_remove,
3279 	.suspend = ab8500_fg_suspend,
3280 	.resume = ab8500_fg_resume,
3281 	.driver = {
3282 		.name = "ab8500-fg",
3283 		.owner = THIS_MODULE,
3284 		.of_match_table = ab8500_fg_match,
3285 	},
3286 };
3287 
ab8500_fg_init(void)3288 static int __init ab8500_fg_init(void)
3289 {
3290 	return platform_driver_register(&ab8500_fg_driver);
3291 }
3292 
ab8500_fg_exit(void)3293 static void __exit ab8500_fg_exit(void)
3294 {
3295 	platform_driver_unregister(&ab8500_fg_driver);
3296 }
3297 
3298 subsys_initcall_sync(ab8500_fg_init);
3299 module_exit(ab8500_fg_exit);
3300 
3301 MODULE_LICENSE("GPL v2");
3302 MODULE_AUTHOR("Johan Palsson, Karl Komierowski");
3303 MODULE_ALIAS("platform:ab8500-fg");
3304 MODULE_DESCRIPTION("AB8500 Fuel Gauge driver");
3305