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

Commit 1206b963 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "power: qpnp-fg-gen4: Add support to configure cutoff gain"

parents 2acd0f4c ec806dc9
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -381,6 +381,12 @@ First Level Node - FG Gen4 device
		    charging. Value has no unit. Allowed range is 62 to 15564
		    in micro units.

- qcom,ki-coeff-cutoff
	Usage:      optional
	Value type: <u32>
	Definition: ki coefficient value for cutoff integration gain. Value has
		    no unit. Allowed range is 62 to 15564 in micro units.

- qcom,ki-coeff-full-dischg
	Usage:      optional
	Value type: <prop-encoded-array>
+1 −0
Original line number Diff line number Diff line
@@ -213,6 +213,7 @@ enum fg_sram_param_id {
	FG_SRAM_KI_COEFF_MED_CHG,
	FG_SRAM_KI_COEFF_HI_CHG,
	FG_SRAM_KI_COEFF_FULL_SOC,
	FG_SRAM_KI_COEFF_CUTOFF,
	FG_SRAM_ESR_TIGHT_FILTER,
	FG_SRAM_ESR_BROAD_FILTER,
	FG_SRAM_SLOPE_LIMIT,
+26 −0
Original line number Diff line number Diff line
@@ -83,6 +83,8 @@
#define CUTOFF_CURR_OFFSET		0
#define CUTOFF_VOLT_WORD		20
#define CUTOFF_VOLT_OFFSET		0
#define KI_COEFF_CUTOFF_WORD		21
#define KI_COEFF_CUTOFF_OFFSET		0
#define SYS_TERM_CURR_WORD		22
#define SYS_TERM_CURR_OFFSET		0
#define VBATT_FULL_WORD			23
@@ -238,6 +240,7 @@ struct fg_dt_props {
	int	ki_coeff_low_chg;
	int	ki_coeff_med_chg;
	int	ki_coeff_hi_chg;
	int	ki_coeff_cutoff_gain;
	int	ki_coeff_full_soc_dischg[2];
	int	ki_coeff_soc[KI_COEFF_SOC_LEVELS];
	int	ki_coeff_low_dischg[KI_COEFF_SOC_LEVELS];
@@ -386,6 +389,8 @@ static struct fg_sram_param pm8150b_v1_sram_params[] = {
		1, 1000, 15625, 0, fg_encode_default, NULL),
	PARAM(DELTA_ESR_THR, DELTA_ESR_THR_WORD, DELTA_ESR_THR_OFFSET, 2, 1000,
		61036, 0, fg_encode_default, NULL),
	PARAM(KI_COEFF_CUTOFF, KI_COEFF_CUTOFF_WORD, KI_COEFF_CUTOFF_OFFSET,
		1, 1000, 61035, 0, fg_encode_default, NULL),
	PARAM(KI_COEFF_FULL_SOC, KI_COEFF_FULL_SOC_NORM_WORD,
		KI_COEFF_FULL_SOC_NORM_OFFSET, 1, 1000, 61035, 0,
		fg_encode_default, NULL),
@@ -482,6 +487,8 @@ static struct fg_sram_param pm8150b_v2_sram_params[] = {
		1, 1000, 15625, 0, fg_encode_default, NULL),
	PARAM(DELTA_ESR_THR, DELTA_ESR_THR_WORD, DELTA_ESR_THR_OFFSET, 2, 1000,
		61036, 0, fg_encode_default, NULL),
	PARAM(KI_COEFF_CUTOFF, KI_COEFF_CUTOFF_WORD, KI_COEFF_CUTOFF_OFFSET,
		1, 1000, 61035, 0, fg_encode_default, NULL),
	PARAM(KI_COEFF_FULL_SOC, KI_COEFF_FULL_SOC_NORM_WORD,
		KI_COEFF_FULL_SOC_NORM_OFFSET, 1, 1000, 61035, 0,
		fg_encode_default, NULL),
@@ -4930,6 +4937,21 @@ static int fg_gen4_hw_init(struct fg_gen4_chip *chip)
		}
	}

	if (chip->dt.ki_coeff_cutoff_gain != -EINVAL) {
		fg_encode(fg->sp, FG_SRAM_KI_COEFF_CUTOFF,
			  chip->dt.ki_coeff_cutoff_gain, &val);
		rc = fg_sram_write(fg,
			fg->sp[FG_SRAM_KI_COEFF_CUTOFF].addr_word,
			fg->sp[FG_SRAM_KI_COEFF_CUTOFF].addr_byte, &val,
			fg->sp[FG_SRAM_KI_COEFF_CUTOFF].len,
			FG_IMA_DEFAULT);
		if (rc < 0) {
			pr_err("Error in writing ki_coeff_cutoff_gain, rc=%d\n",
				rc);
			return rc;
		}
	}

	rc = fg_gen4_esr_calib_config(chip);
	if (rc < 0)
		return rc;
@@ -5018,6 +5040,10 @@ static int fg_parse_ki_coefficients(struct fg_dev *fg)
	of_property_read_u32(node, "qcom,ki-coeff-hi-chg",
		&chip->dt.ki_coeff_hi_chg);

	chip->dt.ki_coeff_cutoff_gain = -EINVAL;
	of_property_read_u32(node, "qcom,ki-coeff-cutoff",
		&chip->dt.ki_coeff_cutoff_gain);

	if (!of_find_property(node, "qcom,ki-coeff-soc-dischg", NULL) ||
		(!of_find_property(node, "qcom,ki-coeff-low-dischg", NULL) &&
		!of_find_property(node, "qcom,ki-coeff-med-dischg", NULL) &&