From a459581244c62a158660fc6abbf368504050fee2 Mon Sep 17 00:00:00 2001 From: Kavya Nunna Date: Mon, 28 Jun 2021 18:19:06 +0530 Subject: [PATCH 1/2] include: dt-bindings: Add iio-property for clear soh Add iio property for clear soh to update userspace on first profile load. Change-Id: I7a9c2cf886ad7da76f6156c3ac12828bf37fe78a Signed-off-by: Kavya Nunna --- include/dt-bindings/iio/qti_power_supply_iio.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/dt-bindings/iio/qti_power_supply_iio.h b/include/dt-bindings/iio/qti_power_supply_iio.h index c48865098c6a..84611eb3bcc6 100644 --- a/include/dt-bindings/iio/qti_power_supply_iio.h +++ b/include/dt-bindings/iio/qti_power_supply_iio.h @@ -151,4 +151,7 @@ /* USB */ #define PSY_IIO_MOISTURE_DETECTION_EN 0x7b + +/* BMS */ +#define PSY_IIO_CLEAR_SOH 0x7c #endif /* __QTI_POWER_SUPPLY_IIO_H__ */ From c0b667d58c3d7fddb170da328cadc4485037295d Mon Sep 17 00:00:00 2001 From: Kavya Nunna Date: Mon, 28 Jun 2021 18:26:09 +0530 Subject: [PATCH 2/2] power: qpnp-qg: Add support to clear soh upon first profile load When the battery profile is loaded first time, update the clear soh property so that soh algorithm can clear stored parameters. Change-Id: Idfc25c589f8422b76768229e52dab7d670c6b231 Signed-off-by: Kavya Nunna --- drivers/power/supply/qcom/qg-core.h | 3 ++- drivers/power/supply/qcom/qg-iio.h | 3 ++- drivers/power/supply/qcom/qpnp-qg.c | 8 ++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/power/supply/qcom/qg-core.h b/drivers/power/supply/qcom/qg-core.h index b0909d23c20c..2796e16c2a11 100644 --- a/drivers/power/supply/qcom/qg-core.h +++ b/drivers/power/supply/qcom/qg-core.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved. */ #ifndef __QG_CORE_H__ @@ -154,6 +154,7 @@ struct qpnp_qg { bool fvss_active; bool tcss_active; bool bass_active; + bool first_profile_load; int charge_status; int charge_type; int chg_iterm_ma; diff --git a/drivers/power/supply/qcom/qg-iio.h b/drivers/power/supply/qcom/qg-iio.h index 46e2232cd74f..b1ee2c4ea3f5 100644 --- a/drivers/power/supply/qcom/qg-iio.h +++ b/drivers/power/supply/qcom/qg-iio.h @@ -1,6 +1,6 @@ /* SPDX-License-Identifier: GPL-2.0-only */ /* - * Copyright (c) 2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2020-2021 The Linux Foundation. All rights reserved. */ #ifndef __QG_IIO_H @@ -91,6 +91,7 @@ static const struct qg_iio_channels qg_iio_psy_channels[] = { QG_CHAN_RES("esr_actual", PSY_IIO_ESR_ACTUAL) QG_CHAN_RES("esr_nominal", PSY_IIO_ESR_NOMINAL) QG_CHAN_INDEX("soh", PSY_IIO_SOH) + QG_CHAN_INDEX("clear_soh", PSY_IIO_CLEAR_SOH) QG_CHAN_ENERGY("cc_soc", PSY_IIO_CC_SOC) QG_CHAN_ACT("fg_reset", PSY_IIO_FG_RESET) QG_CHAN_VOLT("voltage_avg", PSY_IIO_VOLTAGE_AVG) diff --git a/drivers/power/supply/qcom/qpnp-qg.c b/drivers/power/supply/qcom/qpnp-qg.c index 96526b23a1c6..4c8839273140 100644 --- a/drivers/power/supply/qcom/qpnp-qg.c +++ b/drivers/power/supply/qcom/qpnp-qg.c @@ -2135,6 +2135,9 @@ static int qg_iio_write_raw(struct iio_dev *indio_dev, if (chip->sp) soh_profile_update(chip->sp, chip->soh); break; + case PSY_IIO_CLEAR_SOH: + chip->first_profile_load = val1; + break; case PSY_IIO_ESR_ACTUAL: chip->esr_actual = val1; break; @@ -2260,6 +2263,9 @@ static int qg_iio_read_raw(struct iio_dev *indio_dev, case PSY_IIO_SOH: *val1 = chip->soh; break; + case PSY_IIO_CLEAR_SOH: + *val1 = chip->first_profile_load; + break; case PSY_IIO_CC_SOC: rc = qg_get_cc_soc(chip, val1); break; @@ -3470,6 +3476,7 @@ static int qg_sanitize_sdam(struct qpnp_qg *chip) rc = qg_sdam_write(SDAM_MAGIC, SDAM_MAGIC_NUMBER); if (!rc) qg_dbg(chip, QG_DEBUG_PON, "First boot. SDAM initilized\n"); + chip->first_profile_load = true; } else { /* SDAM has invalid value */ rc = qg_sdam_clear(); @@ -3477,6 +3484,7 @@ static int qg_sanitize_sdam(struct qpnp_qg *chip) pr_err("SDAM uninitialized, SDAM reset\n"); rc = qg_sdam_write(SDAM_MAGIC, SDAM_MAGIC_NUMBER); } + chip->first_profile_load = true; } if (rc < 0)