power: wait 30 seconds to determine weak

Wait 30 seconds from a charge mode change event
before checking if the charge mode is weak in order
to prevent false positives.

Change-Id: Ibe816a310bf73e75f43d61dcb3969fa62e87ca3d
Signed-off-by: Ryan Lattrel <ryanl@motorola.com>
Reviewed-on: https://gerrit.mot.com/1380576
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Kenneth Kessler <kennykessler@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
Ryan Lattrel 2019-07-02 16:54:57 -05:00
commit a766f64559

View file

@ -138,6 +138,8 @@ enum {
#define DEMO_MODE_VOLTAGE 4000
#define WARM_TEMP 45
#define COOL_TEMP 0
#define WEAK_CHARGER_WAIT 30000
#define EVENT_WEAK_CHARGER_WAIT 0
#define HEARTBEAT_DELAY_MS 60000
#define HEARTBEAT_DUAL_DELAY_MS 10000
@ -300,6 +302,7 @@ struct smb_mmi_charger {
struct power_supply *max_flip_psy;
struct notifier_block mmi_psy_notifier;
struct delayed_work heartbeat_work;
struct delayed_work weakcharger_work;
struct votable *chg_dis_votable;
struct votable *fcc_votable;
@ -318,6 +321,7 @@ struct smb_mmi_charger {
bool factory_kill_armed;
int gen_log_rate_s;
bool demo_mode_usb_suspend;
unsigned long flags;
/* Charge Profile */
struct mmi_sm_params sm_param[3];
@ -1606,6 +1610,20 @@ static void mmi_chrg_input_config(struct smb_mmi_charger *chg,
mmi_chrg_usb_vin_config(chg, stat->usb_mv);
}
static void mmi_weakcharger_work(struct work_struct *work)
{
struct smb_mmi_charger *chip = container_of(work,
struct smb_mmi_charger,
weakcharger_work.work);
set_bit(EVENT_WEAK_CHARGER_WAIT, &chip->flags);
cancel_delayed_work(&chip->heartbeat_work);
schedule_delayed_work(&chip->heartbeat_work,
msecs_to_jiffies(100));
mmi_dbg(chip, "SMBMMI: Weak timer expired\n");
}
#define WEAK_CHRG_THRSH 450
#define TURBO_CHRG_THRSH 2500
void mmi_chrg_rate_check(struct smb_mmi_charger *chg)
@ -1654,16 +1672,24 @@ void mmi_chrg_rate_check(struct smb_mmi_charger *chg)
mmi_dbg(chg, "SMBMMI: cm %d, cs %d\n", chrg_cm_ma, chrg_cs_ma);
if (chrg_cm_ma >= TURBO_CHRG_THRSH)
chg->charger_rate = POWER_SUPPLY_CHARGE_RATE_TURBO;
else if ((chrg_cm_ma > WEAK_CHRG_THRSH) && (chrg_cs_ma < WEAK_CHRG_THRSH))
else if ((chrg_cm_ma > WEAK_CHRG_THRSH) &&
(chrg_cs_ma < WEAK_CHRG_THRSH) &&
test_bit(EVENT_WEAK_CHARGER_WAIT, &chg->flags))
chg->charger_rate = POWER_SUPPLY_CHARGE_RATE_WEAK;
else if (prev_chg_rate == POWER_SUPPLY_CHARGE_RATE_NONE)
chg->charger_rate = POWER_SUPPLY_CHARGE_RATE_NORMAL;
end_rate_check:
if (prev_chg_rate != chg->charger_rate)
if (prev_chg_rate != chg->charger_rate) {
clear_bit(EVENT_WEAK_CHARGER_WAIT, &chg->flags);
cancel_delayed_work(&chg->weakcharger_work);
if(chg->charger_rate == POWER_SUPPLY_CHARGE_RATE_NORMAL)
schedule_delayed_work(&chg->weakcharger_work,
msecs_to_jiffies(WEAK_CHARGER_WAIT));
mmi_info(chg, "%s Charger Detected\n",
charge_rate[chg->charger_rate]);
}
}
#define TAPER_COUNT 2
@ -3505,6 +3531,7 @@ static int smb_mmi_probe(struct platform_device *pdev)
parse_mmi_dt(chip);
INIT_DELAYED_WORK(&chip->heartbeat_work, mmi_heartbeat_work);
INIT_DELAYED_WORK(&chip->weakcharger_work, mmi_weakcharger_work);
wakeup_source_init(&chip->smb_mmi_hb_wake_source,
"smb_mmi_hb_wake");
alarm_init(&chip->heartbeat_alarm, ALARM_BOOTTIME,