From 77d1c0a0e90208c2aacf935be036e603fa4b8b97 Mon Sep 17 00:00:00 2001 From: longc104 Date: Tue, 24 May 2022 17:37:55 +0800 Subject: [PATCH] rt9471 not charge 3min during a complete charging test rt9471 charge state is chg done when charge pump quit set rt9471 charge state eoc reset Change-Id: I1828cdb2df7a625205807bb295bd9ada51551237 Signed-off-by: longc104 Reviewed-on: https://gerrit.mot.com/2278315 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Qiong Xie Reviewed-by: Wang Wang Submit-Approved: Jira Key --- drivers/power/rt9471_chg_mmi/rt9471_charger.c | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/drivers/power/rt9471_chg_mmi/rt9471_charger.c b/drivers/power/rt9471_chg_mmi/rt9471_charger.c index 1fb78fbdb63b..70f46d93b698 100644 --- a/drivers/power/rt9471_chg_mmi/rt9471_charger.c +++ b/drivers/power/rt9471_chg_mmi/rt9471_charger.c @@ -810,6 +810,12 @@ static int __rt9471_enable_safe_tmr(struct rt9471_chip *chip, bool en) (chip, RT9471_REG_CHGTIMER, RT9471_SAFETMR_EN_MASK); } +static int __rt9471_eoc_rst(struct rt9471_chip *chip) +{ + dev_info(chip->dev, "%s\n", __func__); + return rt9471_set_bit(chip, RT9471_REG_EOC, RT9471_EOC_RST_MASK); +} + static int __rt9471_enable_te(struct rt9471_chip *chip, bool en) { dev_info(chip->dev, "%s en = %d\n", __func__, en); @@ -2467,8 +2473,35 @@ static int rt9471_set_ichg(struct charger_device *chg_dev, u32 uA) static int rt9471_enable_te(struct charger_device *chg_dev, bool en) { struct rt9471_chip *chip = dev_get_drvdata(&chg_dev->dev); + int ret = 0; - return __rt9471_enable_te(chip, en); + if (en) { + ret = __rt9471_eoc_rst(chip); + if (ret < 0) { + dev_notice(chip->dev, "%s __rt9471_eoc_rst fail(%d)\n", __func__, ret); + return ret; + } + + ret = __rt9471_enable_te(chip, en); + if (ret < 0) { + dev_notice(chip->dev, "%s __rt9471_enable_te fail(%d)\n", __func__, ret); + return ret; + } + } else { + ret = __rt9471_enable_te(chip, en); + if (ret < 0) { + dev_notice(chip->dev, "%s __rt9471_enable_te fail(%d)\n", __func__, ret); + return ret; + } + + ret = __rt9471_eoc_rst(chip); + if (ret < 0) { + dev_notice(chip->dev, "%s __rt9471_eoc_rst fail(%d)\n", __func__, ret); + return ret; + } + } + + return ret; } static int rt9471_enable_otg(struct charger_device *chg_dev, bool en)