From cc4f1a773dcae05e7790079246c8313dd660845a Mon Sep 17 00:00:00 2001 From: Haijian Ma Date: Fri, 20 May 2022 15:48:23 +0800 Subject: [PATCH] charging: add config charger mode to FG As mm8013 fg need charger mode info, so add config charger mode to FG Change-Id: I70758ccdc6ce0328cf4e7959782d77df7a282cf9 Signed-off-by: Haijian Ma Reviewed-on: https://gerrit.mot.com/2274890 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Yuecai Liu Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- .../mmi_discrete_charger_core.c | 34 +++++++++++++++++++ .../mmi_discrete_charger_core.h | 3 ++ 2 files changed, 37 insertions(+) diff --git a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c index 447488387246..dcfc1b7d5481 100644 --- a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c +++ b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c @@ -120,6 +120,9 @@ static int mmi_discrete_parse_dts(struct mmi_discrete_charger *chip) chip->pd_supported = of_property_read_bool(node, "mmi,usb-pd-supported"); + /*mm8013 fg need charging mode info*/ + chip->chgmod_to_fg = of_property_read_bool(node, "mmi,cfg-chgmod-to-fg"); + return 0; } @@ -1198,6 +1201,35 @@ static void mmi_discrete_config_charger_output(struct mmi_discrete_charger *chip } } +enum { + MMI_CHARGER_MODE_FFC = 0, + MMI_CHARGER_MODE_NORMAL, + MMI_CHARGER_MODE_USB, +}; + +#define TURBO_CHRG_FFC_THRSH_MW 25000 + +static void mmi_discrete_config_chgmod_to_fg(struct mmi_discrete_charger *chip) +{ + union power_supply_propval val; + int rc = 0; + + if (!chip->bms_psy || !chip->chgmod_to_fg) + return; + + if (chip->chg_info.chrg_pmax_mw > TURBO_CHRG_FFC_THRSH_MW) { + val.intval = MMI_CHARGER_MODE_FFC; + } else if (chip->chg_info.chrg_type == POWER_SUPPLY_TYPE_USB) { + val.intval = MMI_CHARGER_MODE_USB; + } else { + val.intval = MMI_CHARGER_MODE_NORMAL; + } + + rc = power_supply_set_property(chip->bms_psy, POWER_SUPPLY_PROP_TYPE, &val); + mmi_dbg(chip, "%s config charger mode to fg\n", rc? "Can't" : "success"); + +} + static void mmi_discrete_charger_work(struct work_struct *work) { struct mmi_discrete_charger *chip = container_of(work, @@ -1213,6 +1245,8 @@ static void mmi_discrete_charger_work(struct work_struct *work) mmi_discrete_config_charger_input(chip); mmi_discrete_config_charger_output(chip); + mmi_discrete_config_chgmod_to_fg(chip); + mmi_info(chip, "FV=%d, FCC=%d, CHGDIS=%d, USBICL=%d, USBDIS=%d\n", get_effective_result(chip->fv_votable), get_effective_result(chip->fcc_votable), diff --git a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.h b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.h index a39ff6ffded3..50d7315f4582 100644 --- a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.h +++ b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.h @@ -125,6 +125,9 @@ struct mmi_discrete_charger { int *thermal_mitigation; int typec_mode; bool use_extcon; + + /*FG*/ + bool chgmod_to_fg; }; int mmi_discrete_otg_enable(struct mmi_discrete_charger *chip, bool en);