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

Commit d743371a authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "power: battery: handle charging termination at lower float voltage"

parents 3dadb717 b26a6137
Loading
Loading
Loading
Loading
+37 −11
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ struct pl_data {
	struct notifier_block	nb;
	bool			pl_disable;
	int			taper_entry_fv;
	u32			float_voltage_uv;
};

struct pl_data *the_chip;
@@ -819,6 +820,17 @@ static void fcc_stepper_work(struct work_struct *work)
	vote(chip->pl_awake_votable, FCC_STEPPER_VOTER, false, 0);
}

static bool is_batt_available(struct pl_data *chip)
{
	if (!chip->batt_psy)
		chip->batt_psy = power_supply_get_by_name("battery");

	if (!chip->batt_psy)
		return false;

	return true;
}

#define PARALLEL_FLOAT_VOLTAGE_DELTA_UV 50000
static int pl_fv_vote_callback(struct votable *votable, void *data,
			int fv_uv, const char *client)
@@ -852,6 +864,31 @@ static int pl_fv_vote_callback(struct votable *votable, void *data,
		}
	}

	/*
	 * check for termination at reduced float voltage and re-trigger
	 * charging if new float voltage is above last FV.
	 */
	if ((chip->float_voltage_uv < fv_uv) && is_batt_available(chip)) {
		rc = power_supply_get_property(chip->batt_psy,
				POWER_SUPPLY_PROP_STATUS, &pval);
		if (rc < 0) {
			pr_err("Couldn't get battery status rc=%d\n", rc);
		} else {
			if (pval.intval == POWER_SUPPLY_STATUS_FULL) {
				pr_debug("re-triggering charging\n");
				pval.intval = 1;
				rc = power_supply_set_property(chip->batt_psy,
					POWER_SUPPLY_PROP_RECHARGE_SOC,
					&pval);
				if (rc < 0)
					pr_err("Couldn't set force recharge rc=%d\n",
							rc);
			}
		}
	}

	chip->float_voltage_uv = fv_uv;

	return 0;
}

@@ -957,17 +994,6 @@ static bool is_main_available(struct pl_data *chip)
	return !!chip->main_psy;
}

static bool is_batt_available(struct pl_data *chip)
{
	if (!chip->batt_psy)
		chip->batt_psy = power_supply_get_by_name("battery");

	if (!chip->batt_psy)
		return false;

	return true;
}

static int pl_disable_vote_callback(struct votable *votable,
		void *data, int pl_disable, const char *client)
{