mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-07 20:33:58 -04:00
Merge "power: supply: qcom: Update SMB5 charger properties for GKI compliance"
This commit is contained in:
commit
df5fbccdc6
9 changed files with 60 additions and 17 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue