Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0b667d5 authored by Kavya Nunna's avatar Kavya Nunna Committed by Gerrit - the friendly Code Review server
Browse files

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: default avatarKavya Nunna <knunna@codeaurora.org>
parent a4595812
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
/* 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;
+2 −1
Original line number Diff line number Diff line
/* 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)
+8 −0
Original line number Diff line number Diff line
@@ -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)