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

Merge tag 'for-v5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply

Pull power supply and reset updates from Sebastian Reichel:
"Core:
- Ensure HWMON devices are registered with valid names
- Fix device wakeup code

Drivers:
- bq25890_charger: Add BQ25895 support
- axp288_fuel_gauge: Add Minix Neo Z83-4 to blacklist
- sc27xx: improve battery calibration
- misc small fixes all over drivers"

* tag 'for-v5.4' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply: (24 commits)
power: supply: cpcap-charger: Enable vbus boost voltage
power: supply: sc27xx: Add POWER_SUPPLY_PROP_CALIBRATE attribute
power: supply: sc27xx: Optimize the battery capacity calibration
power: supply: sc27xx: Make sure the alarm capacity is larger than 0
power: supply: sc27xx: Fix the the accuracy issue of coulomb calculation
power: supply: sc27xx: Fix conditon to enable the FGU interrupt
power: supply: sc27xx: Add POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN attribute
power: supply: max77650: add MODULE_ALIAS()
power: supply: isp1704: remove redundant assignment to variable ret
power: supply: bq25890_charger: Add the BQ25895 part
power: supply: sc27xx: Replace devm_add_action() followed by failure action with devm_add_action_or_reset()
power: supply: sc27xx: Introduce local variable 'struct device *dev'
power: reset: reboot-mode: Fix author email format
power: supply: ab8500: remove set but not used variables 'vbup33_vrtcn' and 'bup_vch_range'
power: supply: max17042_battery: Fix a typo in function names
power: reset: gpio-restart: Fix typo when gpio reset is not found
power: supply: Init device wakeup after device_add()
power: supply: ab8500_charger: Mark expected switch fall-through
power: supply: sbs-battery: only return health when battery present
MAINTAINERS: N900: Remove isp1704_charger.h record
...

+247 -130
-1
MAINTAINERS
··· 11511 11511 R: Pali Rohár <pali.rohar@gmail.com> 11512 11512 F: include/linux/power/bq2415x_charger.h 11513 11513 F: include/linux/power/bq27xxx_battery.h 11514 - F: include/linux/power/isp1704_charger.h 11515 11514 F: drivers/power/supply/bq2415x_charger.c 11516 11515 F: drivers/power/supply/bq27xxx_battery.c 11517 11516 F: drivers/power/supply/bq27xxx_battery_i2c.c
+5 -3
drivers/phy/motorola/phy-cpcap-usb.c
··· 231 231 goto out_err; 232 232 233 233 error = regmap_update_bits(ddata->reg, CPCAP_REG_USBC3, 234 - CPCAP_BIT_VBUSSTBY_EN, 235 - CPCAP_BIT_VBUSSTBY_EN); 234 + CPCAP_BIT_VBUSSTBY_EN | 235 + CPCAP_BIT_VBUSEN_SPI, 236 + CPCAP_BIT_VBUSEN_SPI); 236 237 if (error) 237 238 goto out_err; 238 239 ··· 241 240 } 242 241 243 242 error = regmap_update_bits(ddata->reg, CPCAP_REG_USBC3, 244 - CPCAP_BIT_VBUSSTBY_EN, 0); 243 + CPCAP_BIT_VBUSSTBY_EN | 244 + CPCAP_BIT_VBUSEN_SPI, 0); 245 245 if (error) 246 246 goto out_err; 247 247
+1 -1
drivers/power/reset/gpio-restart.c
··· 65 65 gpio_restart->reset_gpio = devm_gpiod_get(&pdev->dev, NULL, 66 66 open_source ? GPIOD_IN : GPIOD_OUT_LOW); 67 67 if (IS_ERR(gpio_restart->reset_gpio)) { 68 - dev_err(&pdev->dev, "Could net get reset GPIO\n"); 68 + dev_err(&pdev->dev, "Could not get reset GPIO\n"); 69 69 return PTR_ERR(gpio_restart->reset_gpio); 70 70 } 71 71
+1 -1
drivers/power/reset/reboot-mode.c
··· 190 190 } 191 191 EXPORT_SYMBOL_GPL(devm_reboot_mode_unregister); 192 192 193 - MODULE_AUTHOR("Andy Yan <andy.yan@rock-chips.com"); 193 + MODULE_AUTHOR("Andy Yan <andy.yan@rock-chips.com>"); 194 194 MODULE_DESCRIPTION("System reboot mode core library"); 195 195 MODULE_LICENSE("GPL v2");
+1 -8
drivers/power/supply/ab8500_charger.c
··· 742 742 USB_CH_IP_CUR_LVL_1P5; 743 743 break; 744 744 } 745 - /* Else, fall through */ 745 + /* else, fall through */ 746 746 case USB_STAT_HM_IDGND: 747 747 dev_err(di->dev, "USB Type - Charging not allowed\n"); 748 748 di->max_usb_in_curr.usb_type_max = USB_CH_IP_CUR_LVL_0P05; ··· 3011 3011 static int ab8500_charger_init_hw_registers(struct ab8500_charger *di) 3012 3012 { 3013 3013 int ret = 0; 3014 - u8 bup_vch_range = 0, vbup33_vrtcn = 0; 3015 3014 3016 3015 /* Setup maximum charger current and voltage for ABB cut2.0 */ 3017 3016 if (!is_ab8500_1p1_or_earlier(di->parent)) { ··· 3110 3111 dev_err(di->dev, "failed to disable LED\n"); 3111 3112 goto out; 3112 3113 } 3113 - 3114 - /* Backup battery voltage and current */ 3115 - if (di->bm->bkup_bat_v > BUP_VCH_SEL_3P1V) 3116 - bup_vch_range = BUP_VCH_RANGE; 3117 - if (di->bm->bkup_bat_v == BUP_VCH_SEL_3P3V) 3118 - vbup33_vrtcn = VBUP33_VRTCN; 3119 3114 3120 3115 ret = abx500_set_register_interruptible(di->dev, 3121 3116 AB8500_RTC,
+11 -3
drivers/power/supply/axp288_fuel_gauge.c
··· 674 674 /* 675 675 * Some devices have no battery (HDMI sticks) and the axp288 battery's 676 676 * detection reports one despite it not being there. 677 + * Please keep this listed sorted alphabetically. 677 678 */ 678 679 static const struct dmi_system_id axp288_fuel_gauge_blacklist[] = { 679 680 { ··· 695 694 DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "T11"), 696 695 /* also match on somewhat unique bios-version */ 697 696 DMI_EXACT_MATCH(DMI_BIOS_VERSION, "1.000"), 697 + }, 698 + }, 699 + { 700 + /* ECS EF20EA */ 701 + .matches = { 702 + DMI_MATCH(DMI_PRODUCT_NAME, "EF20EA"), 698 703 }, 699 704 }, 700 705 { ··· 727 720 }, 728 721 }, 729 722 { 730 - /* ECS EF20EA */ 723 + /* Minix Neo Z83-4 mini PC */ 731 724 .matches = { 732 - DMI_MATCH(DMI_PRODUCT_NAME, "EF20EA"), 733 - }, 725 + DMI_MATCH(DMI_SYS_VENDOR, "MINIX"), 726 + DMI_MATCH(DMI_PRODUCT_NAME, "Z83-4"), 727 + } 734 728 }, 735 729 {} 736 730 };
+8 -4
drivers/power/supply/bq25890_charger.c
··· 22 22 #define BQ25890_IRQ_PIN "bq25890_irq" 23 23 24 24 #define BQ25890_ID 3 25 + #define BQ25895_ID 7 25 26 #define BQ25896_ID 0 26 27 27 28 enum bq25890_fields { ··· 172 171 [F_WD] = REG_FIELD(0x07, 4, 5), 173 172 [F_TMR_EN] = REG_FIELD(0x07, 3, 3), 174 173 [F_CHG_TMR] = REG_FIELD(0x07, 1, 2), 175 - [F_JEITA_ISET] = REG_FIELD(0x07, 0, 0), 174 + [F_JEITA_ISET] = REG_FIELD(0x07, 0, 0), // reserved on BQ25895 176 175 /* REG08 */ 177 176 [F_BATCMP] = REG_FIELD(0x08, 5, 7), 178 177 [F_VCLAMP] = REG_FIELD(0x08, 2, 4), ··· 181 180 [F_FORCE_ICO] = REG_FIELD(0x09, 7, 7), 182 181 [F_TMR2X_EN] = REG_FIELD(0x09, 6, 6), 183 182 [F_BATFET_DIS] = REG_FIELD(0x09, 5, 5), 184 - [F_JEITA_VSET] = REG_FIELD(0x09, 4, 4), 183 + [F_JEITA_VSET] = REG_FIELD(0x09, 4, 4), // reserved on BQ25895 185 184 [F_BATFET_DLY] = REG_FIELD(0x09, 3, 3), 186 185 [F_BATFET_RST_EN] = REG_FIELD(0x09, 2, 2), 187 186 [F_PUMPX_UP] = REG_FIELD(0x09, 1, 1), ··· 189 188 /* REG0A */ 190 189 [F_BOOSTV] = REG_FIELD(0x0A, 4, 7), 191 190 /* PFM_OTG_DIS 3 on BQ25896 */ 192 - [F_BOOSTI] = REG_FIELD(0x0A, 0, 2), 191 + [F_BOOSTI] = REG_FIELD(0x0A, 0, 2), // reserved on BQ25895 193 192 /* REG0B */ 194 193 [F_VBUS_STAT] = REG_FIELD(0x0B, 5, 7), 195 194 [F_CHG_STAT] = REG_FIELD(0x0B, 3, 4), ··· 393 392 case POWER_SUPPLY_PROP_MODEL_NAME: 394 393 if (bq->chip_id == BQ25890_ID) 395 394 val->strval = "BQ25890"; 395 + else if (bq->chip_id == BQ25895_ID) 396 + val->strval = "BQ25895"; 396 397 else if (bq->chip_id == BQ25896_ID) 397 398 val->strval = "BQ25896"; 398 399 else ··· 865 862 return bq->chip_id; 866 863 } 867 864 868 - if ((bq->chip_id != BQ25890_ID) && (bq->chip_id != BQ25896_ID)) { 865 + if ((bq->chip_id != BQ25890_ID) && (bq->chip_id != BQ25895_ID) 866 + && (bq->chip_id != BQ25896_ID)) { 869 867 dev_err(dev, "Chip with ID=%d, not supported!\n", bq->chip_id); 870 868 return -ENODEV; 871 869 }
+20 -3
drivers/power/supply/cpcap-charger.c
··· 108 108 #define CPCAP_REG_CRM_ICHRG_1A596 CPCAP_REG_CRM_ICHRG(0xe) 109 109 #define CPCAP_REG_CRM_ICHRG_NO_LIMIT CPCAP_REG_CRM_ICHRG(0xf) 110 110 111 + /* CPCAP_REG_VUSBC register bits needed for VBUS */ 112 + #define CPCAP_BIT_VBUS_SWITCH BIT(0) /* VBUS boost to 5V */ 113 + 111 114 enum { 112 115 CPCAP_CHARGER_IIO_BATTDET, 113 116 CPCAP_CHARGER_IIO_VOLTAGE, ··· 133 130 struct power_supply *usb; 134 131 135 132 struct phy_companion comparator; /* For USB VBUS */ 136 - bool vbus_enabled; 133 + unsigned int vbus_enabled:1; 134 + unsigned int feeding_vbus:1; 137 135 atomic_t active; 138 136 139 137 int status; ··· 329 325 } 330 326 331 327 /* VBUS control functions for the USB PHY companion */ 332 - 333 328 static void cpcap_charger_vbus_work(struct work_struct *work) 334 329 { 335 330 struct cpcap_charger_ddata *ddata; ··· 346 343 return; 347 344 } 348 345 346 + ddata->feeding_vbus = true; 349 347 cpcap_charger_set_cable_path(ddata, false); 350 348 cpcap_charger_set_inductive_path(ddata, false); 351 349 352 350 error = cpcap_charger_set_state(ddata, 0, 0, 0); 351 + if (error) 352 + goto out_err; 353 + 354 + error = regmap_update_bits(ddata->reg, CPCAP_REG_VUSBC, 355 + CPCAP_BIT_VBUS_SWITCH, 356 + CPCAP_BIT_VBUS_SWITCH); 353 357 if (error) 354 358 goto out_err; 355 359 ··· 366 356 if (error) 367 357 goto out_err; 368 358 } else { 359 + error = regmap_update_bits(ddata->reg, CPCAP_REG_VUSBC, 360 + CPCAP_BIT_VBUS_SWITCH, 0); 361 + if (error) 362 + goto out_err; 363 + 369 364 error = regmap_update_bits(ddata->reg, CPCAP_REG_CRM, 370 365 CPCAP_REG_CRM_RVRSMODE, 0); 371 366 if (error) ··· 378 363 379 364 cpcap_charger_set_cable_path(ddata, true); 380 365 cpcap_charger_set_inductive_path(ddata, true); 366 + ddata->feeding_vbus = false; 381 367 } 382 368 383 369 return; ··· 447 431 if (error) 448 432 return; 449 433 450 - if (cpcap_charger_vbus_valid(ddata) && s.chrgcurr1) { 434 + if (!ddata->feeding_vbus && cpcap_charger_vbus_valid(ddata) && 435 + s.chrgcurr1) { 451 436 int max_current; 452 437 453 438 if (cpcap_charger_battery_found(ddata))
+1 -1
drivers/power/supply/isp1704_charger.c
··· 342 342 int vendor; 343 343 int product; 344 344 int i; 345 - int ret = -ENODEV; 345 + int ret; 346 346 347 347 /* Test ULPI interface */ 348 348 ret = isp1704_write(isp, ULPI_SCRATCH, 0xaa);
+4 -4
drivers/power/supply/max17042_battery.c
··· 511 511 regmap_write(map, reg, value); 512 512 } 513 513 514 - static inline void max10742_unlock_model(struct max17042_chip *chip) 514 + static inline void max17042_unlock_model(struct max17042_chip *chip) 515 515 { 516 516 struct regmap *map = chip->regmap; 517 517 ··· 519 519 regmap_write(map, MAX17042_MLOCKReg2, MODEL_UNLOCK2); 520 520 } 521 521 522 - static inline void max10742_lock_model(struct max17042_chip *chip) 522 + static inline void max17042_lock_model(struct max17042_chip *chip) 523 523 { 524 524 struct regmap *map = chip->regmap; 525 525 ··· 577 577 if (!temp_data) 578 578 return -ENOMEM; 579 579 580 - max10742_unlock_model(chip); 580 + max17042_unlock_model(chip); 581 581 max17042_write_model_data(chip, MAX17042_MODELChrTbl, 582 582 table_size); 583 583 max17042_read_model_data(chip, MAX17042_MODELChrTbl, temp_data, ··· 589 589 temp_data, 590 590 table_size); 591 591 592 - max10742_lock_model(chip); 592 + max17042_lock_model(chip); 593 593 kfree(temp_data); 594 594 595 595 return ret;
+1
drivers/power/supply/max77650-charger.c
··· 366 366 MODULE_DESCRIPTION("MAXIM 77650/77651 charger driver"); 367 367 MODULE_AUTHOR("Bartosz Golaszewski <bgolaszewski@baylibre.com>"); 368 368 MODULE_LICENSE("GPL v2"); 369 + MODULE_ALIAS("platform:max77650-charger");
+5 -5
drivers/power/supply/power_supply_core.c
··· 1051 1051 } 1052 1052 1053 1053 spin_lock_init(&psy->changed_lock); 1054 - rc = device_init_wakeup(dev, ws); 1055 - if (rc) 1056 - goto wakeup_init_failed; 1057 - 1058 1054 rc = device_add(dev); 1059 1055 if (rc) 1060 1056 goto device_add_failed; 1057 + 1058 + rc = device_init_wakeup(dev, ws); 1059 + if (rc) 1060 + goto wakeup_init_failed; 1061 1061 1062 1062 rc = psy_register_thermal(psy); 1063 1063 if (rc) ··· 1101 1101 psy_unregister_thermal(psy); 1102 1102 register_thermal_failed: 1103 1103 device_del(dev); 1104 - device_add_failed: 1105 1104 wakeup_init_failed: 1105 + device_add_failed: 1106 1106 check_supplies_failed: 1107 1107 dev_set_name_failed: 1108 1108 put_device(dev);
+14 -1
drivers/power/supply/power_supply_hwmon.c
··· 284 284 struct device *dev = &psy->dev; 285 285 struct device *hwmon; 286 286 int ret, i; 287 + const char *name; 287 288 288 289 if (!devres_open_group(dev, power_supply_add_hwmon_sysfs, 289 290 GFP_KERNEL)) ··· 335 334 } 336 335 } 337 336 338 - hwmon = devm_hwmon_device_register_with_info(dev, psy->desc->name, 337 + name = psy->desc->name; 338 + if (strchr(name, '-')) { 339 + char *new_name; 340 + 341 + new_name = devm_kstrdup(dev, name, GFP_KERNEL); 342 + if (!new_name) { 343 + ret = -ENOMEM; 344 + goto error; 345 + } 346 + strreplace(new_name, '-', '_'); 347 + name = new_name; 348 + } 349 + hwmon = devm_hwmon_device_register_with_info(dev, name, 339 350 psyhw, 340 351 &power_supply_hwmon_chip_info, 341 352 NULL);
+17 -10
drivers/power/supply/sbs-battery.c
··· 314 314 { 315 315 int ret; 316 316 317 - if (psp == POWER_SUPPLY_PROP_PRESENT) { 318 - /* Dummy command; if it succeeds, battery is present. */ 319 - ret = sbs_read_word_data(client, sbs_data[REG_STATUS].addr); 320 - if (ret < 0) 321 - val->intval = 0; /* battery disconnected */ 322 - else 323 - val->intval = 1; /* battery present */ 324 - } else { /* POWER_SUPPLY_PROP_HEALTH */ 317 + /* Dummy command; if it succeeds, battery is present. */ 318 + ret = sbs_read_word_data(client, sbs_data[REG_STATUS].addr); 319 + 320 + if (ret < 0) { /* battery not present*/ 321 + if (psp == POWER_SUPPLY_PROP_PRESENT) { 322 + val->intval = 0; 323 + return 0; 324 + } 325 + return ret; 326 + } 327 + 328 + if (psp == POWER_SUPPLY_PROP_PRESENT) 329 + val->intval = 1; /* battery present */ 330 + else /* POWER_SUPPLY_PROP_HEALTH */ 325 331 /* SBS spec doesn't have a general health command. */ 326 332 val->intval = POWER_SUPPLY_HEALTH_UNKNOWN; 327 - } 328 333 329 334 return 0; 330 335 } ··· 625 620 switch (psp) { 626 621 case POWER_SUPPLY_PROP_PRESENT: 627 622 case POWER_SUPPLY_PROP_HEALTH: 628 - if (client->flags & SBS_FLAGS_TI_BQ20Z75) 623 + if (chip->flags & SBS_FLAGS_TI_BQ20Z75) 629 624 ret = sbs_get_ti_battery_presence_and_health(client, 630 625 psp, val); 631 626 else 632 627 ret = sbs_get_battery_presence_and_health(client, psp, 633 628 val); 629 + 630 + /* this can only be true if no gpio is used */ 634 631 if (psp == POWER_SUPPLY_PROP_PRESENT) 635 632 return 0; 636 633 break;
+158 -85
drivers/power/supply/sc27xx_fuel_gauge.c
··· 109 109 }; 110 110 111 111 static int sc27xx_fgu_cap_to_clbcnt(struct sc27xx_fgu_data *data, int capacity); 112 + static void sc27xx_fgu_capacity_calibration(struct sc27xx_fgu_data *data, 113 + int cap, bool int_mode); 114 + static void sc27xx_fgu_adjust_cap(struct sc27xx_fgu_data *data, int cap); 112 115 113 116 static const char * const sc27xx_charger_supply_name[] = { 114 117 "sc2731_charger", ··· 329 326 { 330 327 int ret; 331 328 332 - clbcnt *= SC27XX_FGU_SAMPLE_HZ; 333 - 334 329 ret = regmap_update_bits(data->regmap, 335 330 data->base + SC27XX_FGU_CLBCNT_SETL, 336 331 SC27XX_FGU_CLBCNT_MASK, clbcnt); ··· 363 362 364 363 *clb_cnt = ccl & SC27XX_FGU_CLBCNT_MASK; 365 364 *clb_cnt |= (cch & SC27XX_FGU_CLBCNT_MASK) << SC27XX_FGU_CLBCNT_SHIFT; 366 - *clb_cnt /= SC27XX_FGU_SAMPLE_HZ; 367 365 368 366 return 0; 369 367 } ··· 380 380 381 381 /* 382 382 * Convert coulomb counter to delta capacity (mAh), and set multiplier 383 - * as 100 to improve the precision. 383 + * as 10 to improve the precision. 384 384 */ 385 - temp = DIV_ROUND_CLOSEST(delta_clbcnt, 360); 386 - temp = sc27xx_fgu_adc_to_current(data, temp); 385 + temp = DIV_ROUND_CLOSEST(delta_clbcnt * 10, 36 * SC27XX_FGU_SAMPLE_HZ); 386 + temp = sc27xx_fgu_adc_to_current(data, temp / 1000); 387 387 388 388 /* 389 389 * Convert to capacity percent of the battery total capacity, ··· 391 391 */ 392 392 delta_cap = DIV_ROUND_CLOSEST(temp * 100, data->total_cap); 393 393 *cap = delta_cap + data->init_cap; 394 + 395 + /* Calibrate the battery capacity in a normal range. */ 396 + sc27xx_fgu_capacity_calibration(data, *cap, false); 394 397 395 398 return 0; 396 399 } ··· 590 587 val->intval = value * 1000; 591 588 break; 592 589 590 + case POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN: 591 + val->intval = data->total_cap * 1000; 592 + break; 593 + 593 594 default: 594 595 ret = -EINVAL; 595 596 break; ··· 611 604 struct sc27xx_fgu_data *data = power_supply_get_drvdata(psy); 612 605 int ret; 613 606 614 - if (psp != POWER_SUPPLY_PROP_CAPACITY) 615 - return -EINVAL; 616 - 617 607 mutex_lock(&data->lock); 618 608 619 - ret = sc27xx_fgu_save_last_cap(data, val->intval); 609 + switch (psp) { 610 + case POWER_SUPPLY_PROP_CAPACITY: 611 + ret = sc27xx_fgu_save_last_cap(data, val->intval); 612 + if (ret < 0) 613 + dev_err(data->dev, "failed to save battery capacity\n"); 614 + break; 615 + 616 + case POWER_SUPPLY_PROP_CALIBRATE: 617 + sc27xx_fgu_adjust_cap(data, val->intval); 618 + ret = 0; 619 + break; 620 + 621 + default: 622 + ret = -EINVAL; 623 + } 620 624 621 625 mutex_unlock(&data->lock); 622 - 623 - if (ret < 0) 624 - dev_err(data->dev, "failed to save battery capacity\n"); 625 626 626 627 return ret; 627 628 } ··· 644 629 static int sc27xx_fgu_property_is_writeable(struct power_supply *psy, 645 630 enum power_supply_property psp) 646 631 { 647 - return psp == POWER_SUPPLY_PROP_CAPACITY; 632 + return psp == POWER_SUPPLY_PROP_CAPACITY || 633 + psp == POWER_SUPPLY_PROP_CALIBRATE; 648 634 } 649 635 650 636 static enum power_supply_property sc27xx_fgu_props[] = { ··· 660 644 POWER_SUPPLY_PROP_CURRENT_NOW, 661 645 POWER_SUPPLY_PROP_CURRENT_AVG, 662 646 POWER_SUPPLY_PROP_CONSTANT_CHARGE_VOLTAGE, 647 + POWER_SUPPLY_PROP_ENERGY_FULL_DESIGN, 648 + POWER_SUPPLY_PROP_CALIBRATE, 663 649 }; 664 650 665 651 static const struct power_supply_desc sc27xx_fgu_desc = { ··· 677 659 678 660 static void sc27xx_fgu_adjust_cap(struct sc27xx_fgu_data *data, int cap) 679 661 { 662 + int ret; 663 + 680 664 data->init_cap = cap; 681 - data->init_clbcnt = sc27xx_fgu_cap_to_clbcnt(data, data->init_cap); 665 + ret = sc27xx_fgu_get_clbcnt(data, &data->init_clbcnt); 666 + if (ret) 667 + dev_err(data->dev, "failed to get init coulomb counter\n"); 668 + } 669 + 670 + static void sc27xx_fgu_capacity_calibration(struct sc27xx_fgu_data *data, 671 + int cap, bool int_mode) 672 + { 673 + int ret, ocv, chg_sts, adc; 674 + 675 + ret = sc27xx_fgu_get_vbat_ocv(data, &ocv); 676 + if (ret) { 677 + dev_err(data->dev, "get battery ocv error.\n"); 678 + return; 679 + } 680 + 681 + ret = sc27xx_fgu_get_status(data, &chg_sts); 682 + if (ret) { 683 + dev_err(data->dev, "get charger status error.\n"); 684 + return; 685 + } 686 + 687 + /* 688 + * If we are in charging mode, then we do not need to calibrate the 689 + * lower capacity. 690 + */ 691 + if (chg_sts == POWER_SUPPLY_STATUS_CHARGING) 692 + return; 693 + 694 + if ((ocv > data->cap_table[0].ocv && cap < 100) || cap > 100) { 695 + /* 696 + * If current OCV value is larger than the max OCV value in 697 + * OCV table, or the current capacity is larger than 100, 698 + * we should force the inititial capacity to 100. 699 + */ 700 + sc27xx_fgu_adjust_cap(data, 100); 701 + } else if (ocv <= data->cap_table[data->table_len - 1].ocv) { 702 + /* 703 + * If current OCV value is leass than the minimum OCV value in 704 + * OCV table, we should force the inititial capacity to 0. 705 + */ 706 + sc27xx_fgu_adjust_cap(data, 0); 707 + } else if ((ocv > data->cap_table[data->table_len - 1].ocv && cap <= 0) || 708 + (ocv > data->min_volt && cap <= data->alarm_cap)) { 709 + /* 710 + * If current OCV value is not matchable with current capacity, 711 + * we should re-calculate current capacity by looking up the 712 + * OCV table. 713 + */ 714 + int cur_cap = power_supply_ocv2cap_simple(data->cap_table, 715 + data->table_len, ocv); 716 + 717 + sc27xx_fgu_adjust_cap(data, cur_cap); 718 + } else if (ocv <= data->min_volt) { 719 + /* 720 + * If current OCV value is less than the low alarm voltage, but 721 + * current capacity is larger than the alarm capacity, we should 722 + * adjust the inititial capacity to alarm capacity. 723 + */ 724 + if (cap > data->alarm_cap) { 725 + sc27xx_fgu_adjust_cap(data, data->alarm_cap); 726 + } else { 727 + int cur_cap; 728 + 729 + /* 730 + * If current capacity is equal with 0 or less than 0 731 + * (some error occurs), we should adjust inititial 732 + * capacity to the capacity corresponding to current OCV 733 + * value. 734 + */ 735 + cur_cap = power_supply_ocv2cap_simple(data->cap_table, 736 + data->table_len, 737 + ocv); 738 + sc27xx_fgu_adjust_cap(data, cur_cap); 739 + } 740 + 741 + if (!int_mode) 742 + return; 743 + 744 + /* 745 + * After adjusting the battery capacity, we should set the 746 + * lowest alarm voltage instead. 747 + */ 748 + data->min_volt = data->cap_table[data->table_len - 1].ocv; 749 + data->alarm_cap = power_supply_ocv2cap_simple(data->cap_table, 750 + data->table_len, 751 + data->min_volt); 752 + 753 + adc = sc27xx_fgu_voltage_to_adc(data, data->min_volt / 1000); 754 + regmap_update_bits(data->regmap, 755 + data->base + SC27XX_FGU_LOW_OVERLOAD, 756 + SC27XX_FGU_LOW_OVERLOAD_MASK, adc); 757 + } 682 758 } 683 759 684 760 static irqreturn_t sc27xx_fgu_interrupt(int irq, void *dev_id) 685 761 { 686 762 struct sc27xx_fgu_data *data = dev_id; 687 - int ret, cap, ocv, adc; 763 + int ret, cap; 688 764 u32 status; 689 765 690 766 mutex_lock(&data->lock); ··· 804 692 if (ret) 805 693 goto out; 806 694 807 - ret = sc27xx_fgu_get_vbat_ocv(data, &ocv); 808 - if (ret) 809 - goto out; 810 - 811 - /* 812 - * If current OCV value is less than the minimum OCV value in OCV table, 813 - * which means now battery capacity is 0%, and we should adjust the 814 - * inititial capacity to 0. 815 - */ 816 - if (ocv <= data->cap_table[data->table_len - 1].ocv) { 817 - sc27xx_fgu_adjust_cap(data, 0); 818 - } else if (ocv <= data->min_volt) { 819 - /* 820 - * If current OCV value is less than the low alarm voltage, but 821 - * current capacity is larger than the alarm capacity, we should 822 - * adjust the inititial capacity to alarm capacity. 823 - */ 824 - if (cap > data->alarm_cap) { 825 - sc27xx_fgu_adjust_cap(data, data->alarm_cap); 826 - } else if (cap <= 0) { 827 - int cur_cap; 828 - 829 - /* 830 - * If current capacity is equal with 0 or less than 0 831 - * (some error occurs), we should adjust inititial 832 - * capacity to the capacity corresponding to current OCV 833 - * value. 834 - */ 835 - cur_cap = power_supply_ocv2cap_simple(data->cap_table, 836 - data->table_len, 837 - ocv); 838 - sc27xx_fgu_adjust_cap(data, cur_cap); 839 - } 840 - 841 - /* 842 - * After adjusting the battery capacity, we should set the 843 - * lowest alarm voltage instead. 844 - */ 845 - data->min_volt = data->cap_table[data->table_len - 1].ocv; 846 - adc = sc27xx_fgu_voltage_to_adc(data, data->min_volt / 1000); 847 - regmap_update_bits(data->regmap, data->base + SC27XX_FGU_LOW_OVERLOAD, 848 - SC27XX_FGU_LOW_OVERLOAD_MASK, adc); 849 - } 695 + sc27xx_fgu_capacity_calibration(data, cap, true); 850 696 851 697 out: 852 698 mutex_unlock(&data->lock); ··· 855 785 * Convert current capacity (mAh) to coulomb counter according to the 856 786 * formula: 1 mAh =3.6 coulomb. 857 787 */ 858 - return DIV_ROUND_CLOSEST(cur_cap * 36 * data->cur_1000ma_adc, 10); 788 + return DIV_ROUND_CLOSEST(cur_cap * 36 * data->cur_1000ma_adc * SC27XX_FGU_SAMPLE_HZ, 10); 859 789 } 860 790 861 791 static int sc27xx_fgu_calibration(struct sc27xx_fgu_data *data) ··· 926 856 data->alarm_cap = power_supply_ocv2cap_simple(data->cap_table, 927 857 data->table_len, 928 858 data->min_volt); 859 + if (!data->alarm_cap) 860 + data->alarm_cap += 1; 929 861 930 862 power_supply_put_battery_info(data->battery, &info); 931 863 ··· 1029 957 1030 958 static int sc27xx_fgu_probe(struct platform_device *pdev) 1031 959 { 1032 - struct device_node *np = pdev->dev.of_node; 960 + struct device *dev = &pdev->dev; 961 + struct device_node *np = dev->of_node; 1033 962 struct power_supply_config fgu_cfg = { }; 1034 963 struct sc27xx_fgu_data *data; 1035 964 int ret, irq; 1036 965 1037 - data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); 966 + data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); 1038 967 if (!data) 1039 968 return -ENOMEM; 1040 969 1041 - data->regmap = dev_get_regmap(pdev->dev.parent, NULL); 970 + data->regmap = dev_get_regmap(dev->parent, NULL); 1042 971 if (!data->regmap) { 1043 - dev_err(&pdev->dev, "failed to get regmap\n"); 972 + dev_err(dev, "failed to get regmap\n"); 1044 973 return -ENODEV; 1045 974 } 1046 975 1047 - ret = device_property_read_u32(&pdev->dev, "reg", &data->base); 976 + ret = device_property_read_u32(dev, "reg", &data->base); 1048 977 if (ret) { 1049 - dev_err(&pdev->dev, "failed to get fgu address\n"); 978 + dev_err(dev, "failed to get fgu address\n"); 1050 979 return ret; 1051 980 } 1052 981 1053 - data->channel = devm_iio_channel_get(&pdev->dev, "bat-temp"); 982 + data->channel = devm_iio_channel_get(dev, "bat-temp"); 1054 983 if (IS_ERR(data->channel)) { 1055 - dev_err(&pdev->dev, "failed to get IIO channel\n"); 984 + dev_err(dev, "failed to get IIO channel\n"); 1056 985 return PTR_ERR(data->channel); 1057 986 } 1058 987 1059 - data->charge_chan = devm_iio_channel_get(&pdev->dev, "charge-vol"); 988 + data->charge_chan = devm_iio_channel_get(dev, "charge-vol"); 1060 989 if (IS_ERR(data->charge_chan)) { 1061 - dev_err(&pdev->dev, "failed to get charge IIO channel\n"); 990 + dev_err(dev, "failed to get charge IIO channel\n"); 1062 991 return PTR_ERR(data->charge_chan); 1063 992 } 1064 993 1065 - data->gpiod = devm_gpiod_get(&pdev->dev, "bat-detect", GPIOD_IN); 994 + data->gpiod = devm_gpiod_get(dev, "bat-detect", GPIOD_IN); 1066 995 if (IS_ERR(data->gpiod)) { 1067 - dev_err(&pdev->dev, "failed to get battery detection GPIO\n"); 996 + dev_err(dev, "failed to get battery detection GPIO\n"); 1068 997 return PTR_ERR(data->gpiod); 1069 998 } 1070 999 1071 1000 ret = gpiod_get_value_cansleep(data->gpiod); 1072 1001 if (ret < 0) { 1073 - dev_err(&pdev->dev, "failed to get gpio state\n"); 1002 + dev_err(dev, "failed to get gpio state\n"); 1074 1003 return ret; 1075 1004 } 1076 1005 1077 1006 data->bat_present = !!ret; 1078 1007 mutex_init(&data->lock); 1079 - data->dev = &pdev->dev; 1008 + data->dev = dev; 1080 1009 platform_set_drvdata(pdev, data); 1081 1010 1082 1011 fgu_cfg.drv_data = data; 1083 1012 fgu_cfg.of_node = np; 1084 - data->battery = devm_power_supply_register(&pdev->dev, &sc27xx_fgu_desc, 1013 + data->battery = devm_power_supply_register(dev, &sc27xx_fgu_desc, 1085 1014 &fgu_cfg); 1086 1015 if (IS_ERR(data->battery)) { 1087 - dev_err(&pdev->dev, "failed to register power supply\n"); 1016 + dev_err(dev, "failed to register power supply\n"); 1088 1017 return PTR_ERR(data->battery); 1089 1018 } 1090 1019 1091 1020 ret = sc27xx_fgu_hw_init(data); 1092 1021 if (ret) { 1093 - dev_err(&pdev->dev, "failed to initialize fgu hardware\n"); 1022 + dev_err(dev, "failed to initialize fgu hardware\n"); 1094 1023 return ret; 1095 1024 } 1096 1025 1097 - ret = devm_add_action(&pdev->dev, sc27xx_fgu_disable, data); 1026 + ret = devm_add_action_or_reset(dev, sc27xx_fgu_disable, data); 1098 1027 if (ret) { 1099 - sc27xx_fgu_disable(data); 1100 - dev_err(&pdev->dev, "failed to add fgu disable action\n"); 1028 + dev_err(dev, "failed to add fgu disable action\n"); 1101 1029 return ret; 1102 1030 } 1103 1031 1104 1032 irq = platform_get_irq(pdev, 0); 1105 1033 if (irq < 0) { 1106 - dev_err(&pdev->dev, "no irq resource specified\n"); 1034 + dev_err(dev, "no irq resource specified\n"); 1107 1035 return irq; 1108 1036 } 1109 1037 ··· 1118 1046 1119 1047 irq = gpiod_to_irq(data->gpiod); 1120 1048 if (irq < 0) { 1121 - dev_err(&pdev->dev, "failed to translate GPIO to IRQ\n"); 1049 + dev_err(dev, "failed to translate GPIO to IRQ\n"); 1122 1050 return irq; 1123 1051 } 1124 1052 1125 - ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, 1053 + ret = devm_request_threaded_irq(dev, irq, NULL, 1126 1054 sc27xx_fgu_bat_detection, 1127 1055 IRQF_ONESHOT | IRQF_TRIGGER_RISING | 1128 1056 IRQF_TRIGGER_FALLING, 1129 1057 pdev->name, data); 1130 1058 if (ret) { 1131 - dev_err(&pdev->dev, "failed to request IRQ\n"); 1059 + dev_err(dev, "failed to request IRQ\n"); 1132 1060 return ret; 1133 1061 } 1134 1062 ··· 1165 1093 * If we are charging, then no need to enable the FGU interrupts to 1166 1094 * adjust the battery capacity. 1167 1095 */ 1168 - if (status != POWER_SUPPLY_STATUS_NOT_CHARGING) 1096 + if (status != POWER_SUPPLY_STATUS_NOT_CHARGING && 1097 + status != POWER_SUPPLY_STATUS_DISCHARGING) 1169 1098 return 0; 1170 1099 1171 1100 ret = regmap_update_bits(data->regmap, data->base + SC27XX_FGU_INT_EN,