Merge "qpnp-smb2: enable/disable sw jeita using a property"

This commit is contained in:
Linux Build Service Account 2017-08-09 03:18:21 -07:00 committed by Gerrit - the friendly Code Review server
commit bb7cc76a8f
4 changed files with 51 additions and 0 deletions

View file

@ -901,6 +901,7 @@ static enum power_supply_property smb2_batt_props[] = {
POWER_SUPPLY_PROP_TEMP,
POWER_SUPPLY_PROP_TECHNOLOGY,
POWER_SUPPLY_PROP_STEP_CHARGING_ENABLED,
POWER_SUPPLY_PROP_SW_JEITA_ENABLED,
POWER_SUPPLY_PROP_CHARGE_DONE,
POWER_SUPPLY_PROP_PARALLEL_DISABLE,
POWER_SUPPLY_PROP_SET_SHIP_MODE,
@ -958,6 +959,9 @@ static int smb2_batt_get_prop(struct power_supply *psy,
case POWER_SUPPLY_PROP_STEP_CHARGING_ENABLED:
val->intval = chg->step_chg_enabled;
break;
case POWER_SUPPLY_PROP_SW_JEITA_ENABLED:
val->intval = chg->sw_jeita_enabled;
break;
case POWER_SUPPLY_PROP_VOLTAGE_NOW:
rc = smblib_get_prop_batt_voltage_now(chg, val);
break;
@ -1074,6 +1078,13 @@ static int smb2_batt_set_prop(struct power_supply *psy,
case POWER_SUPPLY_PROP_STEP_CHARGING_ENABLED:
chg->step_chg_enabled = !!val->intval;
break;
case POWER_SUPPLY_PROP_SW_JEITA_ENABLED:
if (chg->sw_jeita_enabled != (!!val->intval)) {
rc = smblib_disable_hw_jeita(chg, !!val->intval);
if (rc == 0)
chg->sw_jeita_enabled = !!val->intval;
}
break;
case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
chg->batt_profile_fcc_ua = val->intval;
vote(chg->fcc_votable, BATT_PROFILE_VOTER, true, val->intval);
@ -1115,6 +1126,7 @@ static int smb2_batt_prop_is_writeable(struct power_supply *psy,
case POWER_SUPPLY_PROP_RERUN_AICL:
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMITED:
case POWER_SUPPLY_PROP_STEP_CHARGING_ENABLED:
case POWER_SUPPLY_PROP_SW_JEITA_ENABLED:
return 1;
default:
break;
@ -1707,6 +1719,14 @@ static int smb2_init_hw(struct smb2 *chip)
}
}
if (chg->sw_jeita_enabled) {
rc = smblib_disable_hw_jeita(chg, true);
if (rc < 0) {
dev_err(chg->dev, "Couldn't set hw jeita rc=%d\n", rc);
return rc;
}
}
return rc;
}

View file

@ -2053,6 +2053,29 @@ int smblib_dp_dm(struct smb_charger *chg, int val)
return rc;
}
int smblib_disable_hw_jeita(struct smb_charger *chg, bool disable)
{
int rc;
u8 mask;
/*
* Disable h/w base JEITA compensation if s/w JEITA is enabled
*/
mask = JEITA_EN_COLD_SL_FCV_BIT
| JEITA_EN_HOT_SL_FCV_BIT
| JEITA_EN_HOT_SL_CCC_BIT
| JEITA_EN_COLD_SL_CCC_BIT,
rc = smblib_masked_write(chg, JEITA_EN_CFG_REG, mask,
disable ? 0 : mask);
if (rc < 0) {
dev_err(chg->dev,
"Couldn't configure s/w jeita rc=%d\n",
rc);
return rc;
}
return 0;
}
/*******************
* DC PSY GETTERS *
*******************/

View file

@ -501,6 +501,7 @@ int smblib_get_prop_fcc_delta(struct smb_charger *chg,
union power_supply_propval *val);
int smblib_icl_override(struct smb_charger *chg, bool override);
int smblib_dp_dm(struct smb_charger *chg, int val);
int smblib_disable_hw_jeita(struct smb_charger *chg, bool disable);
int smblib_rerun_aicl(struct smb_charger *chg);
int smblib_set_icl_current(struct smb_charger *chg, int icl_ua);
int smblib_get_icl_current(struct smb_charger *chg, int *icl_ua);

View file

@ -271,6 +271,13 @@ static int handle_jeita(struct step_chg_info *chip)
int rc = 0, fcc_ua = 0, fv_uv = 0;
u64 elapsed_us;
rc = power_supply_get_property(chip->batt_psy,
POWER_SUPPLY_PROP_SW_JEITA_ENABLED, &pval);
if (rc < 0)
chip->sw_jeita_enable = 0;
else
chip->sw_jeita_enable = pval.intval;
if (!chip->sw_jeita_enable) {
if (chip->fcc_votable)
vote(chip->fcc_votable, JEITA_VOTER, false, 0);