Merge "power: supply: qcom: Update SMB5 charger properties for GKI compliance"

This commit is contained in:
qctecmdr 2020-08-28 17:56:37 -07:00 • committed by Gerrit - the friendly Code Review server
commit df5fbccdc6
9 changed files with 60 additions and 17 deletions

View file

@ -945,7 +945,7 @@ static void pl_taper_work(struct work_struct *work)
}
chip->charge_type = pval.intval;
if (pval.intval == QTI_POWER_SUPPLY_CHARGE_TYPE_TAPER) {
if (pval.intval == POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE) {
fcc_ua = get_client_vote(chip->fcc_votable,
TAPER_STEPPER_VOTER);
if (fcc_ua < 0) {
@ -1558,7 +1558,7 @@ static int pl_disable_vote_callback(struct votable *votable,
if (rc < 0) {
pr_err("Couldn't get batt charge type rc=%d\n", rc);
} else {
if (pval.intval == QTI_POWER_SUPPLY_CHARGE_TYPE_TAPER
if (pval.intval == POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE
&& !chip->taper_work_running) {
pl_dbg(chip, PR_PARALLEL,
"pl enabled in Taper scheduing work\n");
@ -1761,7 +1761,7 @@ static void handle_main_charge_type(struct pl_data *chip)
/* not fast/not taper state to disables parallel */
if ((pval.intval != POWER_SUPPLY_CHARGE_TYPE_FAST)
&& (pval.intval != QTI_POWER_SUPPLY_CHARGE_TYPE_TAPER)) {
&& (pval.intval != POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE)) {
vote(chip->pl_disable_votable, CHG_STATE_VOTER, true, 0);
chip->charge_type = pval.intval;
return;
@ -1769,7 +1769,7 @@ static void handle_main_charge_type(struct pl_data *chip)
/* handle taper charge entry */
if (chip->charge_type == POWER_SUPPLY_CHARGE_TYPE_FAST
&& (pval.intval == QTI_POWER_SUPPLY_CHARGE_TYPE_TAPER)) {
&& (pval.intval == POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE)) {
chip->charge_type = pval.intval;
if (!chip->taper_work_running) {
pl_dbg(chip, PR_PARALLEL, "taper entry scheduling work\n");
@ -1780,7 +1780,7 @@ static void handle_main_charge_type(struct pl_data *chip)
}
/* handle fast/taper charge entry */
if (pval.intval == QTI_POWER_SUPPLY_CHARGE_TYPE_TAPER
if (pval.intval == POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE
|| pval.intval == POWER_SUPPLY_CHARGE_TYPE_FAST) {
/*
* Undo parallel charging termination if entered taper in
@ -1895,7 +1895,7 @@ static void handle_parallel_in_taper(struct pl_data *chip)
* if parallel is seen in taper mode ever, that is an anomaly and
* we disable parallel charger
*/
if (pval.intval == QTI_POWER_SUPPLY_CHARGE_TYPE_TAPER) {
if (pval.intval == POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE) {
vote(chip->pl_disable_votable, PL_TAPER_EARLY_BAD_VOTER,
true, 0);
return;

View file

@ -1213,7 +1213,7 @@ static int get_time_to_full_locked(struct ttf *ttf, int *val)
pr_debug("TTF: i_cc2cv=%d\n", i_cc2cv);
/* if we are already in CV state then we can skip estimating CC */
if (charge_type == QTI_POWER_SUPPLY_CHARGE_TYPE_TAPER)
if (charge_type == POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE)
goto cv_estimate;
/* estimated SOC at the CC to CV transition */
@ -1343,14 +1343,14 @@ static int get_time_to_full_locked(struct ttf *ttf, int *val)
cv_estimate:
pr_debug("TTF: t_predicted_cc=%d\n", t_predicted);
if (charge_type == QTI_POWER_SUPPLY_CHARGE_TYPE_TAPER)
if (charge_type == POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE)
iterm = max(100, abs(iterm));
else
iterm = max(100, abs(iterm) + ttf->iterm_delta);
pr_debug("TTF: iterm=%d\n", iterm);
if (charge_type == QTI_POWER_SUPPLY_CHARGE_TYPE_TAPER)
if (charge_type == POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE)
tau = max(MILLI_UNIT, ibatt_avg * MILLI_UNIT / iterm);
else
tau = max(MILLI_UNIT, i_cc2cv * MILLI_UNIT / iterm);

View file

@ -869,6 +869,7 @@ static int smb5_usb_get_prop(struct power_supply *psy,
rc = smblib_get_prop_scope(chg, val);
break;
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
/* USB uses this to set SDP current */
val->intval = get_client_vote(chg->usb_icl_votable,
USB_PSY_VOTER);
break;
@ -1072,6 +1073,7 @@ static int smb5_dc_get_prop(struct power_supply *psy,
switch (psp) {
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
/* For DC, INPUT_CURRENT_LIMIT equates to INPUT_SUSPEND */
val->intval = get_effective_result(chg->dc_suspend_votable);
break;
case POWER_SUPPLY_PROP_PRESENT:
@ -1209,6 +1211,7 @@ static int smb5_batt_get_prop(struct power_supply *psy,
rc = smblib_get_prop_batt_present(chg, pval);
break;
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
/* For battery, INPUT_CURRENT_LIMIT equates to INPUT_SUSPEND */
rc = smblib_get_prop_input_current_limit_usb(chg, pval);
break;
case POWER_SUPPLY_PROP_CHARGE_TYPE:

View file

@ -260,6 +260,9 @@ int smb5_iio_get_prop(struct smb_charger *chg, int channel, int *val)
case PSY_IIO_FCC_STEPPER_ENABLE:
*val = chg->fcc_stepper_enable;
break;
case PSY_IIO_TYPEC_ACCESSORY_MODE:
rc = smblib_get_usb_prop_typec_accessory_mode(chg, val);
break;
default:
pr_err("get prop %d is not supported\n", channel);
rc = -EINVAL;

View file

@ -199,6 +199,7 @@ static const struct smb5_iio_prop_channels smb5_chans_pmic[] = {
SMB5_CHAN_ACTIVITY("battery_recharge_soc", RECHARGE_SOC)
SMB5_CHAN_ACTIVITY("battery_force_recharge", FORCE_RECHARGE)
SMB5_CHAN_ACTIVITY("battery_fcc_stepper_enable", FCC_STEPPER_ENABLE)
SMB5_CHAN_INDEX("usb_typec_accessory_mode", TYPEC_ACCESSORY_MODE)
};
struct iio_channel **get_ext_channels(struct device *dev,

View file

@ -13,6 +13,7 @@
#include <dt-bindings/iio/qti_power_supply_iio.h>
#include <linux/pmic-voter.h>
#include <linux/ktime.h>
#include <linux/usb/typec.h>
#include "smb5-lib.h"
#include "smb5-reg.h"
#include "schgm-flash.h"
@ -2224,7 +2225,7 @@ int smblib_get_prop_batt_charge_type(struct smb_charger *chg,
val->intval = POWER_SUPPLY_CHARGE_TYPE_FAST;
break;
case TAPER_CHARGE:
val->intval = QTI_POWER_SUPPLY_CHARGE_TYPE_TAPER;
val->intval = POWER_SUPPLY_CHARGE_TYPE_ADAPTIVE;
break;
default:
val->intval = POWER_SUPPLY_CHARGE_TYPE_NONE;
@ -3087,8 +3088,10 @@ int smblib_get_prop_voltage_wls_output(struct smb_charger *chg,
if (!chg->wls_psy) {
chg->wls_psy = power_supply_get_by_name("wireless");
if (!chg->wls_psy)
return -ENODEV;
if (!chg->wls_psy) {
val->intval = -EINVAL;
return 0;
}
}
rc = power_supply_get_property(chg->wls_psy,
@ -3193,8 +3196,10 @@ int smblib_get_prop_dc_voltage_now(struct smb_charger *chg,
if (!chg->wls_psy) {
chg->wls_psy = power_supply_get_by_name("wireless");
if (!chg->wls_psy)
return -ENODEV;
if (!chg->wls_psy) {
val->intval = -EINVAL;
return 0;
}
}
rc = power_supply_get_property(chg->wls_psy,
@ -3838,6 +3843,31 @@ inline int smblib_get_usb_prop_typec_mode(struct smb_charger *chg,
return 0;
}
inline int smblib_get_usb_prop_typec_accessory_mode(struct smb_charger *chg,
int *val)
{
if (chg->connector_type == QTI_POWER_SUPPLY_CONNECTOR_MICRO_USB) {
*val = TYPEC_ACCESSORY_NONE;
return 0;
}
switch (chg->typec_mode) {
case QTI_POWER_SUPPLY_TYPEC_NONE:
*val = TYPEC_ACCESSORY_NONE;
break;
case QTI_POWER_SUPPLY_TYPEC_SINK_AUDIO_ADAPTER:
*val = TYPEC_ACCESSORY_AUDIO;
break;
case QTI_POWER_SUPPLY_TYPEC_SINK_DEBUG_ACCESSORY:
*val = TYPEC_ACCESSORY_DEBUG;
break;
default:
*val = -EINVAL;
}
return 0;
}
int smblib_get_prop_typec_power_role(struct smb_charger *chg, int *val)
{
int rc = 0;
@ -3895,8 +3925,10 @@ int smblib_get_prop_typec_select_rp(struct smb_charger *chg,
int rc, rp;
u8 stat;
if (!typec_in_src_mode(chg))
return -ENODATA;
if (!typec_in_src_mode(chg)) {
*val = -EINVAL;
return 0;
}
rc = smblib_read(chg, TYPE_C_CURRSRC_CFG_REG, &stat);
if (rc < 0) {

View file

@ -741,6 +741,8 @@ int smblib_get_prop_usb_current_now(struct smb_charger *chg,
union power_supply_propval *val);
int smblib_get_usb_prop_typec_mode(struct smb_charger *chg,
int *val);
int smblib_get_usb_prop_typec_accessory_mode(struct smb_charger *chg,
int *val);
int smblib_get_prop_typec_cc_orientation(struct smb_charger *chg,
int *val);
int smblib_get_prop_scope(struct smb_charger *chg,

View file

@ -119,4 +119,7 @@
#define PSY_IIO_SCALE_MODE_EN 0x61
#define PSY_IIO_BATT_AGE_LEVEL 0x62
#define PSY_IIO_FG_TYPE 0x63
#define PSY_IIO_TYPEC_ACCESSORY_MODE 0x64
#endif /* __QTI_POWER_SUPPLY_IIO_H__ */

View file

@ -6,7 +6,6 @@
#ifndef __QTI_POWER_SUPPLY_H_
#define __QTI_POWER_SUPPLY_H_
#define QTI_POWER_SUPPLY_CHARGE_TYPE_TAPER 7
#define QTI_POWER_SUPPLY_TYPE_USB_HVDCP 20
#define QTI_POWER_SUPPLY_TYPE_USB_HVDCP_3 21
#define QTI_POWER_SUPPLY_TYPE_USB_HVDCP_3P5 22