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

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

Merge "power: smb5-lib: add support for s/w based health of parallel charger"

parents 81570975 30485644
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -1302,7 +1302,7 @@ static int smb5_usb_main_get_prop(struct power_supply *psy,
		break;
	/* Use this property to report SMB health */
	case POWER_SUPPLY_PROP_HEALTH:
		val->intval = smblib_get_prop_smb_health(chg);
		rc = val->intval = smblib_get_prop_smb_health(chg);
		break;
	/* Use this property to report overheat status */
	case POWER_SUPPLY_PROP_HOT_TEMP:
@@ -1313,12 +1313,10 @@ static int smb5_usb_main_get_prop(struct power_supply *psy,
		rc = -EINVAL;
		break;
	}
	if (rc < 0) {
	if (rc < 0)
		pr_debug("Couldn't get prop %d rc = %d\n", psp, rc);
		return -ENODATA;
	}

	return 0;
	return rc;
}

static int smb5_usb_main_set_prop(struct power_supply *psy,
+8 −38
Original line number Diff line number Diff line
@@ -3953,7 +3953,6 @@ int smblib_get_pe_start(struct smb_charger *chg,
int smblib_get_prop_smb_health(struct smb_charger *chg)
{
	int rc;
	u8 stat;
	int input_present;
	union power_supply_propval prop = {0, };

@@ -3961,50 +3960,21 @@ int smblib_get_prop_smb_health(struct smb_charger *chg)
	if (rc < 0)
		return rc;

	if (input_present == INPUT_NOT_PRESENT)
	if ((input_present == INPUT_NOT_PRESENT) || (!is_cp_available(chg)))
		return POWER_SUPPLY_HEALTH_UNKNOWN;

	/*
	 * SMB health is used only for CP, report UNKNOWN if
	 * switcher is not enabled.
	 */
	if (is_cp_available(chg)) {
	rc = power_supply_get_property(chg->cp_psy,
			POWER_SUPPLY_PROP_CP_SWITCHER_EN, &prop);
		if (!rc && !prop.intval)
			return POWER_SUPPLY_HEALTH_UNKNOWN;
	}

	if (chg->wa_flags & SW_THERM_REGULATION_WA) {
		if (chg->smb_temp == -ENODATA)
			return POWER_SUPPLY_HEALTH_UNKNOWN;

		if (chg->smb_temp > SMB_TEMP_RST_THRESH)
			return POWER_SUPPLY_HEALTH_OVERHEAT;

		if (chg->smb_temp > SMB_TEMP_REG_H_THRESH)
			return POWER_SUPPLY_HEALTH_HOT;

		if (chg->smb_temp > SMB_TEMP_REG_L_THRESH)
			return POWER_SUPPLY_HEALTH_WARM;

		return POWER_SUPPLY_HEALTH_COOL;
	}

	rc = smblib_read(chg, SMB_TEMP_STATUS_REG, &stat);
	if (rc < 0) {
		smblib_err(chg, "Couldn't read SMB_TEMP_STATUS_REG, rc=%d\n",
				rc);
		return POWER_SUPPLY_HEALTH_UNKNOWN;
	}
				POWER_SUPPLY_PROP_CP_DIE_TEMP, &prop);
	if (rc < 0)
		return rc;

	if (stat & SMB_TEMP_RST_BIT)
	if (prop.intval > SMB_TEMP_RST_THRESH)
		return POWER_SUPPLY_HEALTH_OVERHEAT;

	if (stat & SMB_TEMP_UB_BIT)
	if (prop.intval > SMB_TEMP_REG_H_THRESH)
		return POWER_SUPPLY_HEALTH_HOT;

	if (stat & SMB_TEMP_LB_BIT)
	if (prop.intval > SMB_TEMP_REG_L_THRESH)
		return POWER_SUPPLY_HEALTH_WARM;

	return POWER_SUPPLY_HEALTH_COOL;