Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.15-rc5 3303 lines 86 kB view raw
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 */ 67struct ab8500_fg_interrupts { 68 char *name; 69 irqreturn_t (*isr)(int irq, void *data); 70}; 71 72enum 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 82static 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 92enum ab8500_fg_charge_state { 93 AB8500_FG_CHARGE_INIT, 94 AB8500_FG_CHARGE_READOUT, 95}; 96 97static char *charge_state[] = { 98 "CHARGE_INIT", 99 "CHARGE_READOUT", 100}; 101 102enum ab8500_fg_calibration_state { 103 AB8500_FG_CALIB_INIT, 104 AB8500_FG_CALIB_WAIT, 105 AB8500_FG_CALIB_END, 106}; 107 108struct 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 117struct ab8500_fg_cap_scaling { 118 bool enable; 119 int cap_to_scale[2]; 120 int disable_cap_level; 121 int scaled_cap; 122}; 123 124struct 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 137struct 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 152struct 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 */ 200struct 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}; 242static 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 */ 248struct 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 */ 260static 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 */ 278static 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 345static 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 */ 368static 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 */ 387static 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 */ 423static 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 */ 446static 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 */ 473static 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; 528cc_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 */ 542int 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 reinit_completion(&di->ab8500_fg_started); 578 reinit_completion(&di->ab8500_fg_complete); 579 enable_irq(di->irq); 580 581 /* Note: cc_lock is still locked */ 582 return 0; 583fail: 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 */ 594int 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 */ 605int 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 */ 619int 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; 703fail: 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 */ 715int 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; 750fail: 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 */ 763static 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; 826exit: 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 */ 839static 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 */ 863static 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 */ 902static 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 */ 915static 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 */ 959static 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 */ 995static 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 */ 1007static 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 */ 1019static 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 */ 1041static 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 */ 1082static 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 */ 1108static 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 */ 1159static 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 */ 1188static 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 */ 1246static 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 */ 1281static 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 1403static 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 1415static 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 */ 1433static 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 1481static 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 1498static 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 */ 1537static 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 */ 1705static 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; 1742err: 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 */ 1756static 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 */ 1794static 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 */ 1829static 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 */ 1870static 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 1916static 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 1932static 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 */ 1974static 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 */ 1988static 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 */ 2008static 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 */ 2023static 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 */ 2039static 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 */ 2058static 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 */ 2094static 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 2172static 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 */ 2298static 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 } 2386out: 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 */ 2399static 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 */ 2415static 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 */ 2443void 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 2453struct 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 2459static 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 2464static 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; 2469 2470 ret = kstrtoul(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 2481static 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 2486static 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 = kstrtoul(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 2506static struct ab8500_fg_sysfs_entry charge_full_attr = 2507 __ATTR(charge_full, 0644, charge_full_show, charge_full_store); 2508 2509static struct ab8500_fg_sysfs_entry charge_now_attr = 2510 __ATTR(charge_now, 0644, charge_now_show, charge_now_store); 2511 2512static ssize_t 2513ab8500_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} 2526static ssize_t 2527ab8500_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 2542static const struct sysfs_ops ab8500_fg_sysfs_ops = { 2543 .show = ab8500_fg_show, 2544 .store = ab8500_fg_store, 2545}; 2546 2547static struct attribute *ab8500_fg_attrs[] = { 2548 &charge_full_attr.attr, 2549 &charge_now_attr.attr, 2550 NULL, 2551}; 2552 2553static 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 */ 2564static 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 */ 2576static 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 2589static 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 2610fail: 2611 return ret; 2612} 2613 2614static 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 2638fail: 2639 return count; 2640} 2641 2642static 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 2663fail: 2664 return ret; 2665 2666} 2667 2668static 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 2691fail: 2692 return count; 2693} 2694 2695static 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 2716fail: 2717 return ret; 2718} 2719 2720static 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 2743fail: 2744 return count; 2745 2746} 2747 2748static 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 2769fail: 2770 return ret; 2771} 2772 2773static 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 2794fail: 2795 return ret; 2796} 2797 2798static 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 2817fail: 2818 return ret; 2819} 2820 2821static 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 2844fail: 2845 return count; 2846} 2847 2848static 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 2870fail: 2871 return ret; 2872} 2873 2874static 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 2895fail: 2896 return ret; 2897} 2898 2899static 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 2922fail: 2923 return count; 2924} 2925 2926static 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 2947fail: 2948 return ret; 2949} 2950 2951static 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 2970static 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; 2986sysfs_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 2994static 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) 3013static 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 3029static 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 3055static 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 return ret; 3074} 3075 3076/* ab8500 fg driver interrupts and their respective isr */ 3077static struct ab8500_fg_interrupts ab8500_fg_irq[] = { 3078 {"NCONV_ACCU", ab8500_fg_cc_convend_handler}, 3079 {"BATT_OVV", ab8500_fg_batt_ovv_handler}, 3080 {"LOW_BAT_F", ab8500_fg_lowbatf_handler}, 3081 {"CC_INT_CALIB", ab8500_fg_cc_int_calib_handler}, 3082 {"CCEOC", ab8500_fg_cc_data_end_handler}, 3083}; 3084 3085static char *supply_interface[] = { 3086 "ab8500_chargalg", 3087 "ab8500_usb", 3088}; 3089 3090static int ab8500_fg_probe(struct platform_device *pdev) 3091{ 3092 struct device_node *np = pdev->dev.of_node; 3093 struct abx500_bm_data *plat = pdev->dev.platform_data; 3094 struct ab8500_fg *di; 3095 int i, irq; 3096 int ret = 0; 3097 3098 di = devm_kzalloc(&pdev->dev, sizeof(*di), GFP_KERNEL); 3099 if (!di) { 3100 dev_err(&pdev->dev, "%s no mem for ab8500_fg\n", __func__); 3101 return -ENOMEM; 3102 } 3103 3104 if (!plat) { 3105 dev_err(&pdev->dev, "no battery management data supplied\n"); 3106 return -EINVAL; 3107 } 3108 di->bm = plat; 3109 3110 if (np) { 3111 ret = ab8500_bm_of_probe(&pdev->dev, np, di->bm); 3112 if (ret) { 3113 dev_err(&pdev->dev, "failed to get battery information\n"); 3114 return ret; 3115 } 3116 } 3117 3118 mutex_init(&di->cc_lock); 3119 3120 /* get parent data */ 3121 di->dev = &pdev->dev; 3122 di->parent = dev_get_drvdata(pdev->dev.parent); 3123 di->gpadc = ab8500_gpadc_get("ab8500-gpadc.0"); 3124 3125 di->fg_psy.name = "ab8500_fg"; 3126 di->fg_psy.type = POWER_SUPPLY_TYPE_BATTERY; 3127 di->fg_psy.properties = ab8500_fg_props; 3128 di->fg_psy.num_properties = ARRAY_SIZE(ab8500_fg_props); 3129 di->fg_psy.get_property = ab8500_fg_get_property; 3130 di->fg_psy.supplied_to = supply_interface; 3131 di->fg_psy.num_supplicants = ARRAY_SIZE(supply_interface), 3132 di->fg_psy.external_power_changed = ab8500_fg_external_power_changed; 3133 3134 di->bat_cap.max_mah_design = MILLI_TO_MICRO * 3135 di->bm->bat_type[di->bm->batt_id].charge_full_design; 3136 3137 di->bat_cap.max_mah = di->bat_cap.max_mah_design; 3138 3139 di->vbat_nom = di->bm->bat_type[di->bm->batt_id].nominal_voltage; 3140 3141 di->init_capacity = true; 3142 3143 ab8500_fg_charge_state_to(di, AB8500_FG_CHARGE_INIT); 3144 ab8500_fg_discharge_state_to(di, AB8500_FG_DISCHARGE_INIT); 3145 3146 /* Create a work queue for running the FG algorithm */ 3147 di->fg_wq = create_singlethread_workqueue("ab8500_fg_wq"); 3148 if (di->fg_wq == NULL) { 3149 dev_err(di->dev, "failed to create work queue\n"); 3150 return -ENOMEM; 3151 } 3152 3153 /* Init work for running the fg algorithm instantly */ 3154 INIT_WORK(&di->fg_work, ab8500_fg_instant_work); 3155 3156 /* Init work for getting the battery accumulated current */ 3157 INIT_WORK(&di->fg_acc_cur_work, ab8500_fg_acc_cur_work); 3158 3159 /* Init work for reinitialising the fg algorithm */ 3160 INIT_DEFERRABLE_WORK(&di->fg_reinit_work, 3161 ab8500_fg_reinit_work); 3162 3163 /* Work delayed Queue to run the state machine */ 3164 INIT_DEFERRABLE_WORK(&di->fg_periodic_work, 3165 ab8500_fg_periodic_work); 3166 3167 /* Work to check low battery condition */ 3168 INIT_DEFERRABLE_WORK(&di->fg_low_bat_work, 3169 ab8500_fg_low_bat_work); 3170 3171 /* Init work for HW failure check */ 3172 INIT_DEFERRABLE_WORK(&di->fg_check_hw_failure_work, 3173 ab8500_fg_check_hw_failure_work); 3174 3175 /* Reset battery low voltage flag */ 3176 di->flags.low_bat = false; 3177 3178 /* Initialize low battery counter */ 3179 di->low_bat_cnt = 10; 3180 3181 /* Initialize OVV, and other registers */ 3182 ret = ab8500_fg_init_hw_registers(di); 3183 if (ret) { 3184 dev_err(di->dev, "failed to initialize registers\n"); 3185 goto free_inst_curr_wq; 3186 } 3187 3188 /* Consider battery unknown until we're informed otherwise */ 3189 di->flags.batt_unknown = true; 3190 di->flags.batt_id_received = false; 3191 3192 /* Register FG power supply class */ 3193 ret = power_supply_register(di->dev, &di->fg_psy); 3194 if (ret) { 3195 dev_err(di->dev, "failed to register FG psy\n"); 3196 goto free_inst_curr_wq; 3197 } 3198 3199 di->fg_samples = SEC_TO_SAMPLE(di->bm->fg_params->init_timer); 3200 ab8500_fg_coulomb_counter(di, true); 3201 3202 /* 3203 * Initialize completion used to notify completion and start 3204 * of inst current 3205 */ 3206 init_completion(&di->ab8500_fg_started); 3207 init_completion(&di->ab8500_fg_complete); 3208 3209 /* Register interrupts */ 3210 for (i = 0; i < ARRAY_SIZE(ab8500_fg_irq); i++) { 3211 irq = platform_get_irq_byname(pdev, ab8500_fg_irq[i].name); 3212 ret = request_threaded_irq(irq, NULL, ab8500_fg_irq[i].isr, 3213 IRQF_SHARED | IRQF_NO_SUSPEND, 3214 ab8500_fg_irq[i].name, di); 3215 3216 if (ret != 0) { 3217 dev_err(di->dev, "failed to request %s IRQ %d: %d\n" 3218 , ab8500_fg_irq[i].name, irq, ret); 3219 goto free_irq; 3220 } 3221 dev_dbg(di->dev, "Requested %s IRQ %d: %d\n", 3222 ab8500_fg_irq[i].name, irq, ret); 3223 } 3224 di->irq = platform_get_irq_byname(pdev, "CCEOC"); 3225 disable_irq(di->irq); 3226 di->nbr_cceoc_irq_cnt = 0; 3227 3228 platform_set_drvdata(pdev, di); 3229 3230 ret = ab8500_fg_sysfs_init(di); 3231 if (ret) { 3232 dev_err(di->dev, "failed to create sysfs entry\n"); 3233 goto free_irq; 3234 } 3235 3236 ret = ab8500_fg_sysfs_psy_create_attrs(di->fg_psy.dev); 3237 if (ret) { 3238 dev_err(di->dev, "failed to create FG psy\n"); 3239 ab8500_fg_sysfs_exit(di); 3240 goto free_irq; 3241 } 3242 3243 /* Calibrate the fg first time */ 3244 di->flags.calibrate = true; 3245 di->calib_state = AB8500_FG_CALIB_INIT; 3246 3247 /* Use room temp as default value until we get an update from driver. */ 3248 di->bat_temp = 210; 3249 3250 /* Run the FG algorithm */ 3251 queue_delayed_work(di->fg_wq, &di->fg_periodic_work, 0); 3252 3253 list_add_tail(&di->node, &ab8500_fg_list); 3254 3255 return ret; 3256 3257free_irq: 3258 power_supply_unregister(&di->fg_psy); 3259 3260 /* We also have to free all successfully registered irqs */ 3261 for (i = i - 1; i >= 0; i--) { 3262 irq = platform_get_irq_byname(pdev, ab8500_fg_irq[i].name); 3263 free_irq(irq, di); 3264 } 3265free_inst_curr_wq: 3266 destroy_workqueue(di->fg_wq); 3267 return ret; 3268} 3269 3270static const struct of_device_id ab8500_fg_match[] = { 3271 { .compatible = "stericsson,ab8500-fg", }, 3272 { }, 3273}; 3274 3275static struct platform_driver ab8500_fg_driver = { 3276 .probe = ab8500_fg_probe, 3277 .remove = ab8500_fg_remove, 3278 .suspend = ab8500_fg_suspend, 3279 .resume = ab8500_fg_resume, 3280 .driver = { 3281 .name = "ab8500-fg", 3282 .owner = THIS_MODULE, 3283 .of_match_table = ab8500_fg_match, 3284 }, 3285}; 3286 3287static int __init ab8500_fg_init(void) 3288{ 3289 return platform_driver_register(&ab8500_fg_driver); 3290} 3291 3292static void __exit ab8500_fg_exit(void) 3293{ 3294 platform_driver_unregister(&ab8500_fg_driver); 3295} 3296 3297subsys_initcall_sync(ab8500_fg_init); 3298module_exit(ab8500_fg_exit); 3299 3300MODULE_LICENSE("GPL v2"); 3301MODULE_AUTHOR("Johan Palsson, Karl Komierowski"); 3302MODULE_ALIAS("platform:ab8500-fg"); 3303MODULE_DESCRIPTION("AB8500 Fuel Gauge driver");