mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 05:39:54 -04:00
charging: sometime main charger can't recovery to max icl
when sometimes charger pump closed, but main charger don't recovery to max icl Change-Id: Id8032d310e41dabcd9be86b115a29c49ce0f17b8 Signed-off-by: mahj8 <mahj8@motorola.com> Reviewed-on: https://gerrit.mot.com/2200412 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Lei Chen <chenl18@motorola.com> Reviewed-by: Huosheng Liao <liaohs@motorola.com> Submit-Approved: Jira Key
This commit is contained in:
parent
150edacf11
commit
08435d13fe
4 changed files with 72 additions and 31 deletions
|
|
@ -1424,6 +1424,12 @@ static int mmi_discrete_usb_set_prop(struct power_supply *psy,
|
|||
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
|
||||
rc = set_prop_sdp_current_max(chip, val->intval);
|
||||
break;
|
||||
case POWER_SUPPLY_PROP_CURRENT_MAX:
|
||||
if (val->intval < 0) {
|
||||
vote(chip->usb_icl_votable, USER_VOTER, false, 0);
|
||||
} else
|
||||
vote(chip->usb_icl_votable, USER_VOTER, true, val->intval);
|
||||
break;
|
||||
default:
|
||||
pr_err("Set prop %d is not supported in usb psy\n",
|
||||
psp);
|
||||
|
|
@ -1439,6 +1445,7 @@ static int mmi_discrete_usb_prop_is_writeable(struct power_supply *psy,
|
|||
{
|
||||
switch (psp) {
|
||||
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
|
||||
case POWER_SUPPLY_PROP_CURRENT_MAX:
|
||||
return 1;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -1952,13 +1959,61 @@ int mmi_discrete_config_typec_mode(struct mmi_discrete_charger *chip, int val)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int mmi_discrete_get_hw_current_max(struct mmi_discrete_charger *chip, int *val)
|
||||
int mmi_discrete_get_hw_current_max(struct mmi_discrete_charger *chip, int *total_current_ua)
|
||||
{
|
||||
update_sw_icl_max(chip);
|
||||
*val = get_effective_result(chip->usb_icl_votable);
|
||||
mmi_dbg(chip, "get input current max :%d\n",
|
||||
*val);
|
||||
int current_ua = 0;
|
||||
|
||||
if (chip->pd_active) {
|
||||
*total_current_ua =
|
||||
get_client_vote_locked(chip->usb_icl_votable, PD_VOTER);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* QC 2.0/3.0 adapter */
|
||||
if (chip->real_charger_type == POWER_SUPPLY_TYPE_USB_HVDCP) {
|
||||
*total_current_ua = chip->hvdcp2_max_icl_ua;
|
||||
return 0;
|
||||
} else if (chip->real_charger_type == POWER_SUPPLY_TYPE_USB_HVDCP_3
|
||||
|| chip->real_charger_type == POWER_SUPPLY_TYPE_USB_HVDCP_3P5) {
|
||||
*total_current_ua = HVDCP_CURRENT_UA;
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (chip->typec_mode) {
|
||||
case MMI_POWER_SUPPLY_TYPEC_SOURCE_DEFAULT:
|
||||
switch (chip->real_charger_type) {
|
||||
case POWER_SUPPLY_TYPE_USB_CDP:
|
||||
current_ua = CDP_CURRENT_UA;
|
||||
break;
|
||||
case POWER_SUPPLY_TYPE_USB_DCP:
|
||||
current_ua = DCP_CURRENT_UA;
|
||||
break;
|
||||
case POWER_SUPPLY_TYPE_USB_FLOAT:
|
||||
case POWER_SUPPLY_TYPE_USB:
|
||||
current_ua = SDP_CURRENT_UA;
|
||||
break;
|
||||
default:
|
||||
current_ua = 0;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case MMI_POWER_SUPPLY_TYPEC_SOURCE_MEDIUM:
|
||||
current_ua = TYPEC_MEDIUM_CURRENT_UA;
|
||||
break;
|
||||
case MMI_POWER_SUPPLY_TYPEC_SOURCE_HIGH:
|
||||
current_ua = TYPEC_HIGH_CURRENT_UA;
|
||||
break;
|
||||
case MMI_POWER_SUPPLY_TYPEC_NON_COMPLIANT:
|
||||
case MMI_POWER_SUPPLY_TYPEC_NONE:
|
||||
default:
|
||||
current_ua = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
*total_current_ua = current_ua;
|
||||
|
||||
mmi_dbg(chip, "get input current max :%d\n",
|
||||
*total_current_ua);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -298,7 +298,7 @@ struct mmi_charger_manager {
|
|||
#define QC3P_INIT_VOLT_COMP 500000
|
||||
//For discrete main charger have no ibus adc capability
|
||||
#define CP_ENABLED_MAIN_INPUT_LIMIT 300*1000
|
||||
#define CP_DISABLED_MAIN_INPUT_LIMIT 3000*1000
|
||||
|
||||
extern void mmi_qc3p_chrg_sm_work_func(struct work_struct *work);
|
||||
extern struct mmi_cp_policy_dev g_chrg_list;
|
||||
extern const struct mmi_chrg_dev_ops dev_ops[];
|
||||
|
|
|
|||
|
|
@ -42,14 +42,10 @@ static int cp_enable_charging(struct mmi_charger_device *chrg, bool en)
|
|||
{
|
||||
int rc;
|
||||
struct mmi_charger_manager *chip = dev_get_drvdata(&chrg->dev);
|
||||
union power_supply_propval prop = {0,};
|
||||
|
||||
if (!chip)
|
||||
return -ENODEV;
|
||||
|
||||
if (!chip->charger_psy)
|
||||
return -ENODEV;
|
||||
|
||||
rc = mmi_charger_write_iio_chan(chip, CP_ENABLE, en);
|
||||
|
||||
if (!rc) {
|
||||
|
|
@ -61,17 +57,6 @@ static int cp_enable_charging(struct mmi_charger_device *chrg, bool en)
|
|||
if(rc)
|
||||
chrg_dev_info(chrg, "%s, enable termination fail\n",__func__);
|
||||
|
||||
if(chrg->charger_enabled) {
|
||||
prop.intval = CP_ENABLED_MAIN_INPUT_LIMIT;
|
||||
}else {
|
||||
prop.intval = CP_DISABLED_MAIN_INPUT_LIMIT;
|
||||
}
|
||||
|
||||
rc = power_supply_set_property(chip->charger_psy,
|
||||
POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT, &prop);
|
||||
if(rc)
|
||||
chrg_dev_info(chrg, "%s, set main charger input limit fail\n",__func__);
|
||||
|
||||
chrg_dev_info(chrg, "%s end, en:%d\n",__func__,en);
|
||||
return rc;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -120,13 +120,17 @@ static int qpnp_pmic_get_ibus(struct mmi_charger_device *chrg, u32 *uA)
|
|||
static int qpnp_pmic_set_charging_current(struct mmi_charger_device *chrg, u32 uA)
|
||||
{
|
||||
int rc;
|
||||
struct mmi_charger_manager *chip = dev_get_drvdata(&chrg->dev);
|
||||
union power_supply_propval prop = {0,};
|
||||
|
||||
if (!chrg->chrg_psy)
|
||||
if (!chip)
|
||||
return -ENODEV;
|
||||
|
||||
if (!chip->usb_psy)
|
||||
return -ENODEV;
|
||||
|
||||
prop.intval = uA;
|
||||
rc = power_supply_set_property(chrg->chrg_psy,
|
||||
rc = power_supply_set_property(chip->usb_psy,
|
||||
POWER_SUPPLY_PROP_CURRENT_MAX, &prop);
|
||||
// if (!rc)
|
||||
// chrg->charger_limited = true;
|
||||
|
|
@ -137,19 +141,16 @@ static int qpnp_pmic_set_charging_current(struct mmi_charger_device *chrg, u32 u
|
|||
static int qpnp_pmic_get_input_current_settled(struct mmi_charger_device *chrg, u32 *uA)
|
||||
{
|
||||
int rc = 0;
|
||||
union power_supply_propval prop = {0,};
|
||||
int value;
|
||||
struct mmi_charger_manager *chip = dev_get_drvdata(&chrg->dev);
|
||||
|
||||
if (!chip)
|
||||
return -ENODEV;
|
||||
|
||||
if (!chip->charger_psy)
|
||||
return -ENODEV;
|
||||
|
||||
rc = power_supply_get_property(chip->charger_psy,
|
||||
POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT, &prop);
|
||||
rc = mmi_charger_read_iio_chan(chip, SMB5_HW_CURRENT_MAX, &value);
|
||||
if (!rc)
|
||||
*uA = prop.intval;
|
||||
chrg->input_curr_setted = value;
|
||||
*uA = chrg->input_curr_setted;
|
||||
chrg_dev_info(chrg, "%s end, uA:%d\n",__func__,*uA);
|
||||
return rc;
|
||||
}
|
||||
|
|
@ -191,7 +192,7 @@ static int qpnp_pmic_update_charger_status(struct mmi_charger_device *chrg)
|
|||
if (!rc)
|
||||
chrg->charger_data.batt_temp = prop.intval / 10;
|
||||
|
||||
rc = power_supply_get_property(chip->cp_psy,
|
||||
rc = power_supply_get_property(chip->usb_psy,
|
||||
POWER_SUPPLY_PROP_VOLTAGE_NOW, &prop);
|
||||
if (!rc)
|
||||
chrg->charger_data.vbus_volt = prop.intval;
|
||||
|
|
|
|||
Loading…
Reference in a new issue