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

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

Merge "power: qpnp-qg: Add support for SMB-sensing for SMB1395/6"

parents cc779d02 39399514
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -66,6 +66,7 @@ struct qg_dt {
	bool			esr_disable;
	bool			esr_discharge_enable;
	bool			qg_ext_sense;
	bool			use_cp_iin_sns;
	bool			use_s7_ocv;
	bool			qg_sleep_config;
	bool			qg_fast_chg_cfg;
@@ -122,6 +123,7 @@ struct qpnp_qg {
	struct power_supply	*usb_psy;
	struct power_supply	*dc_psy;
	struct power_supply	*parallel_psy;
	struct power_supply	*cp_psy;
	struct qg_esr_data	esr_data[QG_MAX_ESR_COUNT];

	/* status variable */
+16 −1
Original line number Diff line number Diff line
@@ -307,7 +307,7 @@ bool is_input_present(struct qpnp_qg *chip)
	return is_usb_present(chip) || is_dc_present(chip);
}

static bool is_parallel_available(struct qpnp_qg *chip)
bool is_parallel_available(struct qpnp_qg *chip)
{
	if (chip->parallel_psy)
		return true;
@@ -319,6 +319,18 @@ static bool is_parallel_available(struct qpnp_qg *chip)
	return true;
}

bool is_cp_available(struct qpnp_qg *chip)
{
	if (chip->cp_psy)
		return true;

	chip->cp_psy = power_supply_get_by_name("charge_pump_master");
	if (!chip->cp_psy)
		return false;

	return true;
}

bool is_parallel_enabled(struct qpnp_qg *chip)
{
	union power_supply_propval pval = {0, };
@@ -326,6 +338,9 @@ bool is_parallel_enabled(struct qpnp_qg *chip)
	if (is_parallel_available(chip)) {
		power_supply_get_property(chip->parallel_psy,
			POWER_SUPPLY_PROP_CHARGING_ENABLED, &pval);
	} else if (is_cp_available(chip)) {
		power_supply_get_property(chip->cp_psy,
			POWER_SUPPLY_PROP_CP_ENABLE, &pval);
	}

	return pval.intval ? true : false;
+2 −0
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ bool is_usb_present(struct qpnp_qg *chip);
bool is_dc_present(struct qpnp_qg *chip);
bool is_input_present(struct qpnp_qg *chip);
bool is_parallel_enabled(struct qpnp_qg *chip);
bool is_cp_available(struct qpnp_qg *chip);
bool is_parallel_available(struct qpnp_qg *chip);
int qg_write_monotonic_soc(struct qpnp_qg *chip, int msoc);
int qg_get_battery_temp(struct qpnp_qg *chip, int *batt_temp);
int qg_get_battery_current(struct qpnp_qg *chip, int *ibat_ua);
+12 −6
Original line number Diff line number Diff line
@@ -2442,13 +2442,15 @@ static int qg_parallel_status_update(struct qpnp_qg *chip)
		"Parallel status changed Enabled=%d\n", parallel_enabled);

	mutex_lock(&chip->data_lock);

	/*
	 * Parallel charger uses the same external sense, hence do not
	 * enable SMB sensing if PMI632 is configured for external sense.
	 * dt.qg_ext_sense = Uses external rsense, if defined do not
	 *		     enable SMB sensing (for non-CP parallel charger).
	 * dt.cp_iin_sns = Uses CP IIN_SNS, enable SMB sensing (for CP charger).
	 */
	if (!chip->dt.qg_ext_sense)
		update_smb = true;
	if (is_cp_available(chip))
		update_smb = chip->dt.use_cp_iin_sns ? true : false;
	else if (is_parallel_available(chip))
		update_smb = chip->dt.qg_ext_sense ? false : true;

	rc = process_rt_fifo_data(chip, update_smb);
	if (rc < 0)
@@ -2699,7 +2701,8 @@ static int qg_notifier_cb(struct notifier_block *nb,
	if ((strcmp(psy->desc->name, "battery") == 0)
		|| (strcmp(psy->desc->name, "parallel") == 0)
		|| (strcmp(psy->desc->name, "usb") == 0)
		|| (strcmp(psy->desc->name, "dc") == 0)) {
		|| (strcmp(psy->desc->name, "dc") == 0)
		|| (strcmp(psy->desc->name, "charge_pump_master") == 0)) {
		/*
		 * We cannot vote for awake votable here as that takes
		 * a mutex lock and this is executed in an atomic context.
@@ -4340,6 +4343,9 @@ static int qg_parse_dt(struct qpnp_qg *chip)

	chip->dt.qg_ext_sense = of_property_read_bool(node, "qcom,qg-ext-sns");

	chip->dt.use_cp_iin_sns = of_property_read_bool(node,
							"qcom,use-cp-iin-sns");

	chip->dt.use_s7_ocv = of_property_read_bool(node, "qcom,qg-use-s7-ocv");

	rc = of_property_read_u32(node, "qcom,min-sleep-time-secs", &temp);