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

Commit 223d73fb authored by Umang Agrawal's avatar Umang Agrawal Committed by Guru Das Srinagesh
Browse files

power: smb5: Modify SMB1390 temperature read mechanism



Currently SMB1390 temperature is read directly from the ADC channel.
But direct ADC channel read may return inaccurate value in case SMB_EN
pin is low.

Modify SMB1390 temperature read mechanism to extract temperature
value directly from the charge pump power supply.

Change-Id: Icf9dd2b353acb0ad7daf2c5bffa4d8caec06ea9c
Signed-off-by: default avatarUmang Agrawal <uagrawal@codeaurora.org>
parent bf18e756
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -2343,19 +2343,28 @@ static int smblib_update_thermal_readings(struct smb_charger *chg)
	}

	if (chg->sec_chg_selected == POWER_SUPPLY_CHARGER_SEC_CP) {
		rc = smblib_read_iio_channel(chg, chg->iio.smb_temp_chan,
					DIV_FACTOR_DECIDEGC, &chg->smb_temp);
		if (rc < 0) {
			smblib_err(chg, "Couldn't read SMB TEMP channel, rc=%d\n",
		if (!chg->cp_psy)
			chg->cp_psy =
				power_supply_get_by_name("charge_pump_master");
		if (chg->cp_psy) {
			rc = power_supply_get_property(chg->cp_psy,
				POWER_SUPPLY_PROP_CP_DIE_TEMP, &pval);
			if (rc < 0) {
				smblib_err(chg, "Couldn't get smb1390 charger temp, rc=%d\n",
					rc);
				return rc;
			}
			chg->smb_temp = pval.intval;
		} else {
			smblib_dbg(chg, PR_MISC, "Coudln't find cp_psy\n");
			chg->smb_temp = -ENODATA;
		}
	} else if (chg->pl.psy && chg->sec_chg_selected ==
					POWER_SUPPLY_CHARGER_SEC_PL) {
		rc = power_supply_get_property(chg->pl.psy,
				POWER_SUPPLY_PROP_CHARGER_TEMP, &pval);
		if (rc < 0) {
			smblib_err(chg, "Couldn't get smb charger temp, rc=%d\n",
			smblib_err(chg, "Couldn't get smb1355 charger temp, rc=%d\n",
					rc);
			return rc;
		}
+1 −0
Original line number Diff line number Diff line
@@ -322,6 +322,7 @@ struct smb_charger {
	struct power_supply		*usb_main_psy;
	struct power_supply		*usb_port_psy;
	struct power_supply		*wls_psy;
	struct power_supply		*cp_psy;
	enum power_supply_type		real_charger_type;

	/* notifiers */