Loading drivers/power/supply/qcom/qpnp-smb5.c +9 −0 Original line number Diff line number Diff line Loading @@ -1225,6 +1225,7 @@ static enum power_supply_property smb5_usb_main_props[] = { POWER_SUPPLY_PROP_FORCE_MAIN_ICL, POWER_SUPPLY_PROP_COMP_CLAMP_LEVEL, POWER_SUPPLY_PROP_HEALTH, POWER_SUPPLY_PROP_HOT_TEMP, }; static int smb5_usb_main_get_prop(struct power_supply *psy, Loading Loading @@ -1288,6 +1289,10 @@ static int smb5_usb_main_get_prop(struct power_supply *psy, case POWER_SUPPLY_PROP_HEALTH: val->intval = smblib_get_prop_smb_health(chg); break; /* Use this property to report overheat status */ case POWER_SUPPLY_PROP_HOT_TEMP: val->intval = chg->thermal_overheat; break; default: pr_debug("get prop %d is not supported in usb-main\n", psp); rc = -EINVAL; Loading Loading @@ -1383,6 +1388,9 @@ static int smb5_usb_main_set_prop(struct power_supply *psy, case POWER_SUPPLY_PROP_COMP_CLAMP_LEVEL: rc = smb5_set_prop_comp_clamp_level(chg, val); break; case POWER_SUPPLY_PROP_HOT_TEMP: rc = smblib_set_prop_thermal_overheat(chg, val->intval); break; default: pr_err("set prop %d is not supported\n", psp); rc = -EINVAL; Loading @@ -1403,6 +1411,7 @@ static int smb5_usb_main_prop_is_writeable(struct power_supply *psy, case POWER_SUPPLY_PROP_FORCE_MAIN_FCC: case POWER_SUPPLY_PROP_FORCE_MAIN_ICL: case POWER_SUPPLY_PROP_COMP_CLAMP_LEVEL: case POWER_SUPPLY_PROP_HOT_TEMP: rc = 1; break; default: Loading drivers/power/supply/qcom/smb5-lib.c +30 −0 Original line number Diff line number Diff line Loading @@ -4868,6 +4868,33 @@ int smblib_get_charge_current(struct smb_charger *chg, return 0; } #define IADP_OVERHEAT_UA 500000 int smblib_set_prop_thermal_overheat(struct smb_charger *chg, int therm_overheat) { int icl_ua = 0; if (chg->thermal_overheat == !!therm_overheat) return 0; /* Configure ICL to 500mA in case system health is Overheat */ if (therm_overheat) icl_ua = IADP_OVERHEAT_UA; if (!chg->cp_disable_votable) chg->cp_disable_votable = find_votable("CP_DISABLE"); if (chg->cp_disable_votable) { vote(chg->cp_disable_votable, OVERHEAT_LIMIT_VOTER, therm_overheat, 0); vote(chg->usb_icl_votable, OVERHEAT_LIMIT_VOTER, therm_overheat, icl_ua); } chg->thermal_overheat = !!therm_overheat; return 0; } /********************** * INTERRUPT HANDLERS * **********************/ Loading Loading @@ -5876,8 +5903,11 @@ static void typec_src_removal(struct smb_charger *chg) /* Reset all CC mode votes */ vote(chg->fcc_main_votable, MAIN_FCC_VOTER, false, 0); chg->adapter_cc_mode = 0; chg->thermal_overheat = 0; vote_override(chg->fcc_votable, CC_MODE_VOTER, false, 0); vote_override(chg->usb_icl_votable, CC_MODE_VOTER, false, 0); vote(chg->cp_disable_votable, OVERHEAT_LIMIT_VOTER, false, 0); vote(chg->usb_icl_votable, OVERHEAT_LIMIT_VOTER, false, 0); /* write back the default FLOAT charger configuration */ rc = smblib_masked_write(chg, USBIN_OPTIONS_2_CFG_REG, Loading drivers/power/supply/qcom/smb5-lib.h +4 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ enum print_reason { #define DCIN_AICL_VOTER "DCIN_AICL_VOTER" #define WLS_PL_CHARGING_VOTER "WLS_PL_CHARGING_VOTER" #define ICL_CHANGE_VOTER "ICL_CHANGE_VOTER" #define OVERHEAT_LIMIT_VOTER "OVERHEAT_LIMIT_VOTER" #define BOOST_BACK_STORM_COUNT 3 #define WEAK_CHG_STORM_COUNT 8 Loading Loading @@ -409,6 +410,7 @@ struct smb_charger { /* CC Mode */ int adapter_cc_mode; int thermal_overheat; /* regulators */ struct smb_regulator *vbus_vreg; Loading Loading @@ -745,6 +747,8 @@ int smblib_get_die_health(struct smb_charger *chg, union power_supply_propval *val); int smblib_get_prop_smb_health(struct smb_charger *chg); int smblib_get_prop_connector_health(struct smb_charger *chg); int smblib_set_prop_thermal_overheat(struct smb_charger *chg, int therm_overheat); int smblib_get_skin_temp_status(struct smb_charger *chg); int smblib_get_prop_vph_voltage_now(struct smb_charger *chg, union power_supply_propval *val); Loading Loading
drivers/power/supply/qcom/qpnp-smb5.c +9 −0 Original line number Diff line number Diff line Loading @@ -1225,6 +1225,7 @@ static enum power_supply_property smb5_usb_main_props[] = { POWER_SUPPLY_PROP_FORCE_MAIN_ICL, POWER_SUPPLY_PROP_COMP_CLAMP_LEVEL, POWER_SUPPLY_PROP_HEALTH, POWER_SUPPLY_PROP_HOT_TEMP, }; static int smb5_usb_main_get_prop(struct power_supply *psy, Loading Loading @@ -1288,6 +1289,10 @@ static int smb5_usb_main_get_prop(struct power_supply *psy, case POWER_SUPPLY_PROP_HEALTH: val->intval = smblib_get_prop_smb_health(chg); break; /* Use this property to report overheat status */ case POWER_SUPPLY_PROP_HOT_TEMP: val->intval = chg->thermal_overheat; break; default: pr_debug("get prop %d is not supported in usb-main\n", psp); rc = -EINVAL; Loading Loading @@ -1383,6 +1388,9 @@ static int smb5_usb_main_set_prop(struct power_supply *psy, case POWER_SUPPLY_PROP_COMP_CLAMP_LEVEL: rc = smb5_set_prop_comp_clamp_level(chg, val); break; case POWER_SUPPLY_PROP_HOT_TEMP: rc = smblib_set_prop_thermal_overheat(chg, val->intval); break; default: pr_err("set prop %d is not supported\n", psp); rc = -EINVAL; Loading @@ -1403,6 +1411,7 @@ static int smb5_usb_main_prop_is_writeable(struct power_supply *psy, case POWER_SUPPLY_PROP_FORCE_MAIN_FCC: case POWER_SUPPLY_PROP_FORCE_MAIN_ICL: case POWER_SUPPLY_PROP_COMP_CLAMP_LEVEL: case POWER_SUPPLY_PROP_HOT_TEMP: rc = 1; break; default: Loading
drivers/power/supply/qcom/smb5-lib.c +30 −0 Original line number Diff line number Diff line Loading @@ -4868,6 +4868,33 @@ int smblib_get_charge_current(struct smb_charger *chg, return 0; } #define IADP_OVERHEAT_UA 500000 int smblib_set_prop_thermal_overheat(struct smb_charger *chg, int therm_overheat) { int icl_ua = 0; if (chg->thermal_overheat == !!therm_overheat) return 0; /* Configure ICL to 500mA in case system health is Overheat */ if (therm_overheat) icl_ua = IADP_OVERHEAT_UA; if (!chg->cp_disable_votable) chg->cp_disable_votable = find_votable("CP_DISABLE"); if (chg->cp_disable_votable) { vote(chg->cp_disable_votable, OVERHEAT_LIMIT_VOTER, therm_overheat, 0); vote(chg->usb_icl_votable, OVERHEAT_LIMIT_VOTER, therm_overheat, icl_ua); } chg->thermal_overheat = !!therm_overheat; return 0; } /********************** * INTERRUPT HANDLERS * **********************/ Loading Loading @@ -5876,8 +5903,11 @@ static void typec_src_removal(struct smb_charger *chg) /* Reset all CC mode votes */ vote(chg->fcc_main_votable, MAIN_FCC_VOTER, false, 0); chg->adapter_cc_mode = 0; chg->thermal_overheat = 0; vote_override(chg->fcc_votable, CC_MODE_VOTER, false, 0); vote_override(chg->usb_icl_votable, CC_MODE_VOTER, false, 0); vote(chg->cp_disable_votable, OVERHEAT_LIMIT_VOTER, false, 0); vote(chg->usb_icl_votable, OVERHEAT_LIMIT_VOTER, false, 0); /* write back the default FLOAT charger configuration */ rc = smblib_masked_write(chg, USBIN_OPTIONS_2_CFG_REG, Loading
drivers/power/supply/qcom/smb5-lib.h +4 −0 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ enum print_reason { #define DCIN_AICL_VOTER "DCIN_AICL_VOTER" #define WLS_PL_CHARGING_VOTER "WLS_PL_CHARGING_VOTER" #define ICL_CHANGE_VOTER "ICL_CHANGE_VOTER" #define OVERHEAT_LIMIT_VOTER "OVERHEAT_LIMIT_VOTER" #define BOOST_BACK_STORM_COUNT 3 #define WEAK_CHG_STORM_COUNT 8 Loading Loading @@ -409,6 +410,7 @@ struct smb_charger { /* CC Mode */ int adapter_cc_mode; int thermal_overheat; /* regulators */ struct smb_regulator *vbus_vreg; Loading Loading @@ -745,6 +747,8 @@ int smblib_get_die_health(struct smb_charger *chg, union power_supply_propval *val); int smblib_get_prop_smb_health(struct smb_charger *chg); int smblib_get_prop_connector_health(struct smb_charger *chg); int smblib_set_prop_thermal_overheat(struct smb_charger *chg, int therm_overheat); int smblib_get_skin_temp_status(struct smb_charger *chg); int smblib_get_prop_vph_voltage_now(struct smb_charger *chg, union power_supply_propval *val); Loading