is_chrg_flt ||
vbus_voltage < WEAKVIN_VOLTAGE_LEVEL) {
-
if ((adc_temp > batt_thrshlds->temp_high) ||
(adc_temp < batt_thrshlds->temp_low)) {
dev_warn(msic_dev,
mbi->batt_props.health = POWER_SUPPLY_HEALTH_OVERHEAT;
mutex_unlock(&mbi->batt_lock);
}
- /* Check charger Status bits */
- if (is_chrg_flt || mbi->batt_props.status
- == POWER_SUPPLY_STATUS_DISCHARGING) {
+ /* set battery charging status */
+ if (mbi->batt_props.status !=
+ POWER_SUPPLY_STATUS_NOT_CHARGING) {
mutex_lock(&mbi->batt_lock);
mbi->batt_props.status =
POWER_SUPPLY_STATUS_NOT_CHARGING;
mutex_unlock(&mbi->usb_chrg_lock);
}
+ iprev = -1;
dump_registers(MSIC_CHRG_REG_DUMP_EVENT);
/*
* If we are in middle of charge cycle is safer to Reset WDT
*/
static void msic_status_monitor(struct work_struct *work)
{
- int chr_mode, chr_event, is_chrg_flt;
unsigned int delay = CHARGE_STATUS_DELAY_JIFFIES;
struct msic_power_module_info *mbi =
container_of(work, struct msic_power_module_info,
pm_runtime_get_sync(&mbi->ipcdev->dev);
- mutex_lock(&mbi->event_lock);
- chr_mode = mbi->charging_mode;
- chr_event = mbi->batt_event;
- mutex_unlock(&mbi->event_lock);
-
/*update charger and battery health */
update_charger_health(mbi);
update_battery_health(mbi);
- /* Check charger Status bits */
- is_chrg_flt = is_charger_fault();
-
- mutex_lock(&mbi->batt_lock);
- if (chr_mode == BATT_CHARGING_MODE_MAINTENANCE)
- mbi->batt_props.status = POWER_SUPPLY_STATUS_FULL;
- else if (chr_mode == BATT_CHARGING_MODE_NORMAL)
- mbi->batt_props.status = POWER_SUPPLY_STATUS_CHARGING;
- else if (chr_event == USBCHRG_EVENT_SUSPEND)
- mbi->batt_props.status = POWER_SUPPLY_STATUS_NOT_CHARGING;
- else
- mbi->batt_props.status = POWER_SUPPLY_STATUS_DISCHARGING;
-
- if (is_chrg_flt) {
- dev_warn(msic_dev, "charger fault detected\n");
- mbi->batt_props.status = POWER_SUPPLY_STATUS_NOT_CHARGING;
- }
- mutex_unlock(&mbi->batt_lock);
-
- dump_registers(MSIC_CHRG_REG_DUMP_EVENT);
power_supply_changed(&mbi->usb);
schedule_delayed_work(&mbi->chr_status_monitor, delay);