From b111dc0500fc2831590d9867cfdd458bb399bd1a Mon Sep 17 00:00:00 2001 From: Yonghua Yan Date: Thu, 7 Jul 2022 21:31:02 +0800 Subject: [PATCH] Monitor fg psy event once get the psy name The fg psy may be created later than sgm4154x charger probe and the fg psy event will be missing according to current psy filter condition in psy notify call. In order to fix this, use the fg psy name directly for psy check, and not check the fg psy pointer. Change-Id: I6ca888864045c0f523bfbef9f30411567214d995 Signed-off-by: Yonghua Yan Reviewed-on: https://gerrit.mot.com/2326012 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Jianqi Yang Submit-Approved: Jira Key --- .../sgm4154x_charger_lite.c | 22 +++++++++++-------- .../sgm4154x_charger_lite.h | 1 + 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/drivers/power/sgm4154x_charger_lite/sgm4154x_charger_lite.c b/drivers/power/sgm4154x_charger_lite/sgm4154x_charger_lite.c index e3666fd2fa4a..fbf246f478d8 100644 --- a/drivers/power/sgm4154x_charger_lite/sgm4154x_charger_lite.c +++ b/drivers/power/sgm4154x_charger_lite/sgm4154x_charger_lite.c @@ -2685,17 +2685,20 @@ static int sgm4154x_mmi_charger_init(struct sgm_mmi_charger *chg) const char *df_sn = NULL; struct mmi_charger_driver *driver; - if (!chg->fg_psy) { - const char *fg_psy_name = "fg_battery"; - rc = device_property_read_string(chg->sgm->dev, + if (!chg->fg_psy && !chg->fg_psy_name) { + chg->fg_psy_name = "fg_battery"; + device_property_read_string(chg->sgm->dev, "mmi,fg-psy-name", - &fg_psy_name); - chg->fg_psy = power_supply_get_by_name(fg_psy_name); + &chg->fg_psy_name); + } + + if (!chg->fg_psy) { + chg->fg_psy = power_supply_get_by_name(chg->fg_psy_name); if (!chg->fg_psy) { - pr_err("No %s power supply found\n", fg_psy_name); + pr_err("No %s power supply found\n", chg->fg_psy_name); return -ENODEV; } - pr_info("%s power supply is found\n", fg_psy_name); + pr_info("%s power supply is found\n", chg->fg_psy_name); } if (chg->driver) { @@ -2854,6 +2857,7 @@ static int sgm4154x_psy_notifier_call(struct notifier_block *nb, struct sgm4154x_device *sgm = container_of(nb, struct sgm4154x_device, psy_nb); struct power_supply *psy = v; + struct sgm_mmi_charger *chg = NULL; if (!sgm) { pr_err("called before sgm valid!\n"); @@ -2863,9 +2867,9 @@ static int sgm4154x_psy_notifier_call(struct notifier_block *nb, if (!psy || val != PSY_EVENT_PROP_CHANGED) return NOTIFY_OK; + chg = sgm->mmi_charger; if ((sgm->usb && !strcmp(psy->desc->name, sgm->usb->desc->name)) || - (sgm->mmi_charger && sgm->mmi_charger->fg_psy && - !strcmp(psy->desc->name, sgm->mmi_charger->fg_psy->desc->name))) { + (chg && chg->fg_psy_name && !strcmp(psy->desc->name, chg->fg_psy_name))) { cancel_delayed_work(&sgm->charge_detect_delayed_work); schedule_delayed_work(&sgm->charge_detect_delayed_work, msecs_to_jiffies(0)); diff --git a/drivers/power/sgm4154x_charger_lite/sgm4154x_charger_lite.h b/drivers/power/sgm4154x_charger_lite/sgm4154x_charger_lite.h index 379aed7292a4..5edc4517fa85 100644 --- a/drivers/power/sgm4154x_charger_lite/sgm4154x_charger_lite.h +++ b/drivers/power/sgm4154x_charger_lite/sgm4154x_charger_lite.h @@ -285,6 +285,7 @@ struct sgm_mmi_charger { struct mmi_charger_constraint constraint; struct mmi_charger_driver *driver; u32 chrg_taper_cnt; + const char *fg_psy_name; struct power_supply *fg_psy; int ichg_polority;