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

Commit d10ccf19 authored by Fenglin Wu's avatar Fenglin Wu
Browse files

power: qpnp-fg-gen3: Add property to set delay between RID and BMD



After reading RID through RRADC, some delay is required before enabling
BMD. This delay helps to discharge the voltage on BATT_ID which can
prevent premature trigger of battery missing irq. The delay time needed
may vary across devices depending on the capacitance existing on the
BATT_ID line, so make it configurable through devicetree.

CRs-Fixed: 2075660
Change-Id: I1f67ae521a94d9597a0e08cadc0d72966f4f3856
Signed-off-by: default avatarFenglin Wu <fenglinw@codeaurora.org>
parent 51c26627
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -385,6 +385,11 @@ First Level Node - FG Gen3 device
		    property "qcom,slope-limit-temp-threshold" to make dynamic
		    slope limit adjustment functional.

- qcom,fg-bmd-en-delay-ms
	Usage:      optional
	Value type: <u32>
	Definition: The delay in ms for FG to enable BMD after reading RID.

==========================================================
Second Level Nodes - Peripherals managed by FG Gen3 driver
==========================================================
+1 −0
Original line number Diff line number Diff line
@@ -278,6 +278,7 @@ struct fg_dt_props {
	int	slope_limit_temp;
	int	esr_pulse_thresh_ma;
	int	esr_meas_curr_ma;
	int	bmd_en_delay_ms;
	int	jeita_thresholds[NUM_JEITA_LEVELS];
	int	ki_coeff_soc[KI_COEFF_SOC_LEVELS];
	int	ki_coeff_med_dischg[KI_COEFF_SOC_LEVELS];
+10 −2
Original line number Diff line number Diff line
@@ -892,8 +892,8 @@ static int fg_get_batt_id(struct fg_chip *chip)
		goto out;
	}

	/* Wait for 200ms before enabling BMD again */
	msleep(200);
	/* Wait for BATT_ID to settle down before enabling BMD again */
	msleep(chip->dt.bmd_en_delay_ms);

	fg_dbg(chip, FG_STATUS, "batt_id: %d\n", batt_id);
	chip->batt_id_ohms = batt_id;
@@ -4036,6 +4036,7 @@ static int fg_parse_ki_coefficients(struct fg_chip *chip)
#define DEFAULT_ESR_CLAMP_MOHMS		20
#define DEFAULT_ESR_PULSE_THRESH_MA	110
#define DEFAULT_ESR_MEAS_CURR_MA	120
#define DEFAULT_BMD_EN_DELAY_MS	200
static int fg_parse_dt(struct fg_chip *chip)
{
	struct device_node *child, *revid_node, *node = chip->dev->of_node;
@@ -4382,6 +4383,13 @@ static int fg_parse_dt(struct fg_chip *chip)
			chip->dt.esr_meas_curr_ma = temp;
	}

	chip->dt.bmd_en_delay_ms = DEFAULT_BMD_EN_DELAY_MS;
	rc = of_property_read_u32(node, "qcom,fg-bmd-en-delay-ms", &temp);
	if (!rc) {
		if (temp > DEFAULT_BMD_EN_DELAY_MS)
			chip->dt.bmd_en_delay_ms = temp;
	}

	return 0;
}