mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 21:59:12 -04:00
charge: resolve sc85xx charge icon dont disappear
There are 2 cases 1.SC85XX reverse voltage from battery to VBUS through sc8551 mosfet parasitic diode. this case vbus voltage is less than battery voltage 2. SC85XX reverse voltae from battery to VBUS through sc8551 working mosfet. this case vbus is about 2:1 battery voltage Refer to https://gerrit.mot.com/#/c/1852409/ Change-Id: Icc80bd63f20f27f294100aabeae3267544ba0fc5 Signed-off-by: chailu1 <chailu1@lenovo.com> Reviewed-on: https://gerrit.mot.com/2007936 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Haijian Ma <mahj8@motorola.com> Reviewed-by: Huosheng Liao <liaohs@motorola.com> Submit-Approved: Jira Key
This commit is contained in:
parent
e15fbca94d
commit
dc475e8c19
4 changed files with 50 additions and 0 deletions
|
|
@ -778,6 +778,49 @@ static int get_prop_charger_present(struct mmi_charger_manager *chg,
|
|||
return rc;
|
||||
}
|
||||
|
||||
#define REV_CP_THRESH_UV 4400000
|
||||
#define CP_IBUS_THRESH_MA 20
|
||||
#define IBAT_THRESH_UA 10000
|
||||
#define REV_CP_DOUBLE_THRESH_UV 100000
|
||||
bool mmi_is_cable_plugout(struct mmi_charger_manager *chip)
|
||||
{
|
||||
struct mmi_cp_policy_dev *chrg_list = &g_chrg_list;
|
||||
int vbus_volt, ibatt_curr, ibus_curr, vbatt_volt;
|
||||
bool cp_chrg_enable, cp_sw_en;
|
||||
|
||||
if (chip->extrn_sense) {
|
||||
ibatt_curr = chrg_list->chrg_dev[CP_MASTER]->charger_data.ibatt_curr;
|
||||
ibatt_curr *= 1000;
|
||||
vbatt_volt = chrg_list->chrg_dev[CP_MASTER]->charger_data.vbatt_volt;
|
||||
vbatt_volt *= 1000;
|
||||
} else {
|
||||
ibatt_curr= chrg_list->chrg_dev[PMIC_SW]->charger_data.ibatt_curr;
|
||||
vbatt_volt = chrg_list->chrg_dev[PMIC_SW]->charger_data.vbatt_volt;
|
||||
}
|
||||
vbus_volt = chrg_list->chrg_dev[PMIC_SW]->charger_data.vbus_volt;
|
||||
ibus_curr = chrg_list->chrg_dev[CP_MASTER]->charger_data.ibus_curr;
|
||||
cp_sw_en = chrg_list->chrg_dev[CP_MASTER]->charger_error.chrg_err_type & (1<< MMI_CP_SWITCH_BIT);
|
||||
cp_chrg_enable = chrg_list->chrg_dev[CP_MASTER]->charger_enabled;
|
||||
mmi_chrg_info(chip, "ibat:%d, vbat:%d, vbus:%d, ibus:%d, cp_chg_en:%d, cp_sw_en:%d\n",
|
||||
ibatt_curr, vbatt_volt, vbus_volt, ibus_curr, cp_chrg_enable, cp_sw_en);
|
||||
|
||||
if (!cp_chrg_enable ||ibus_curr > CP_IBUS_THRESH_MA || ibatt_curr > IBAT_THRESH_UA)
|
||||
return false;
|
||||
|
||||
if (vbatt_volt >= vbus_volt
|
||||
&& vbus_volt < REV_CP_THRESH_UV) {
|
||||
mmi_chrg_info(chip, "cable plug out: cp reverse\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
if (cp_sw_en && vbus_volt < 2 * vbatt_volt - REV_CP_DOUBLE_THRESH_UV) {
|
||||
mmi_chrg_info(chip, "cable plug out: cp double reverse\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
#define WEAK_CHRG_THRSH 450
|
||||
#define TURBO_CHRG_THRSH 2500
|
||||
#define TURBO_30W_CHRG_THRSH_UW 25000000
|
||||
|
|
|
|||
|
|
@ -316,6 +316,7 @@ extern void mmi_update_all_charger_status(struct mmi_charger_manager *chip);
|
|||
extern void mmi_update_all_charger_error(struct mmi_charger_manager *chip);
|
||||
extern void mmi_dump_charger_error(struct mmi_charger_manager *chip,
|
||||
struct mmi_charger_device *chrg_dev);
|
||||
extern bool mmi_is_cable_plugout(struct mmi_charger_manager *chip);
|
||||
extern ssize_t mmi_get_factory_image_mode(void);
|
||||
extern ssize_t mmi_set_factory_image_mode(int mode);
|
||||
extern ssize_t mmi_get_factory_charge_upper(void);
|
||||
|
|
|
|||
|
|
@ -376,6 +376,9 @@ void mmi_chrg_sm_work_func(struct work_struct *work)
|
|||
mmi_chrg_info(chip, "battery temp %d\n", batt_temp);
|
||||
mmi_chrg_info(chip, "battery capacity %d\n", batt_soc);
|
||||
|
||||
if (vbus_pres && mmi_is_cable_plugout(chip))
|
||||
vbus_pres = 0;
|
||||
|
||||
if (vbus_pres &&
|
||||
(sm_state == PM_STATE_PPS_TUNNING_CURR
|
||||
|| sm_state == PM_STATE_PPS_TUNNING_VOLT
|
||||
|
|
|
|||
|
|
@ -364,6 +364,9 @@ void mmi_qc3p_chrg_sm_work_func(struct work_struct *work)
|
|||
mmi_chrg_info(chip, "battery temp %d\n", batt_temp);
|
||||
mmi_chrg_info(chip, "battery capacity %d\n", batt_soc);
|
||||
|
||||
if (vbus_pres && mmi_is_cable_plugout(chip))
|
||||
vbus_pres = 0;
|
||||
|
||||
if (vbus_pres &&
|
||||
(qc3p_sm_state == PM_QC3P_STATE_TUNNING_VOLT
|
||||
|| qc3p_sm_state == PM_QC3P_STATE_CP_CC_LOOP
|
||||
|
|
|
|||
Loading…
Reference in a new issue