From 061526fb7331b78ce0650ca4b61096ba3c26d79a Mon Sep 17 00:00:00 2001 From: xuwei9 Date: Thu, 13 Jan 2022 11:50:40 +0800 Subject: [PATCH] discrete:optimize charging enabled interface Consider the input suspend status to charging enabled interface. Change-Id: Ie49bc9f02cafdbc7471b06b6660c140970ca8ab8 Signed-off-by: xuwei9 Reviewed-on: https://gerrit.mot.com/2169116 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Wang Wang Submit-Approved: Jira Key --- .../mmi_discrete_charger_core.c | 25 +++++++++++++++++++ .../mmi_discrete_charger_core.h | 1 + .../mmi_discrete_charger_iio.c | 10 +++++--- 3 files changed, 33 insertions(+), 3 deletions(-) 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 fbfec12418f5..d951b0dcc5dc 100644 --- a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c +++ b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c @@ -1998,6 +1998,31 @@ int mmi_discrete_get_charging_enabled(struct mmi_discrete_charger *chip, bool *v return rc; } +int mmi_discrete_get_charger_suspend(struct mmi_discrete_charger *chip, bool *val) +{ + int i; + bool charger_suspend = false; + struct mmi_charger_cfg *cfg; + + if (!chip->chg_clients || !chip->chg_client_num) { + mmi_err(chip, "Invalid charger client\n"); + return -1; + } + + for (i = 0; i < chip->chg_client_num; i++) { + cfg = &chip->chg_clients[i].chg_cfg; + if (cfg->charger_suspend) { + charger_suspend = true; + break; + } + } + + *val = charger_suspend; + mmi_dbg(chip, "mmi_discrete_get_charger_suspend val:%d\n",*val); + + return 0; +} + int mmi_discrete_get_qc3p_power(struct mmi_discrete_charger *chip, int *val) { int rc = 0; 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 8843f777fa1f..d8b31add7a4e 100644 --- a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.h +++ b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.h @@ -141,5 +141,6 @@ int mmi_discrete_config_termination_enabled(struct mmi_discrete_charger *chip, i int mmi_discrete_get_qc3p_power(struct mmi_discrete_charger *chip, int *val); int mmi_discrete_get_pulse_cnt(struct mmi_discrete_charger *chip, int *count); int mmi_discrete_set_dp_dm(struct mmi_discrete_charger *chip, int val); +int mmi_discrete_get_charger_suspend(struct mmi_discrete_charger *chip, bool *val); #endif diff --git a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_iio.c b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_iio.c index 2a01d25a1bdd..31a35830b43b 100644 --- a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_iio.c +++ b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_iio.c @@ -64,7 +64,7 @@ static int mmi_discrete_iio_read_raw(struct iio_dev *indio_dev, { struct mmi_discrete_charger *chip = iio_priv(indio_dev); int rc = 0; - bool val_bool = false; + bool val_bool = false, val_suspend = false; *val1 = 0; switch (chan->channel) { @@ -75,8 +75,12 @@ static int mmi_discrete_iio_read_raw(struct iio_dev *indio_dev, rc = mmi_discrete_get_hw_current_max(chip, val1); break; case PSY_IIO_USB_CHARGING_ENABLED: - rc = mmi_discrete_get_charging_enabled(chip, &val_bool); - *val1 = val_bool?1:0; + mmi_discrete_get_charging_enabled(chip, &val_bool); + mmi_discrete_get_charger_suspend(chip, &val_suspend); + if(val_bool && !val_suspend) + *val1 = 1; + else + *val1 = 0; break; case PSY_IIO_MMI_QC3P_POWER: rc = mmi_discrete_get_qc3p_power(chip, val1);