Loading drivers/power/supply/power_supply_sysfs.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -396,6 +396,7 @@ static struct device_attribute power_supply_attrs[] = { POWER_SUPPLY_ATTR(therm_icl_limit), POWER_SUPPLY_ATTR(therm_icl_limit), POWER_SUPPLY_ATTR(dc_reset), POWER_SUPPLY_ATTR(dc_reset), POWER_SUPPLY_ATTR(scale_mode_en), POWER_SUPPLY_ATTR(scale_mode_en), POWER_SUPPLY_ATTR(voltage_max_limit), /* Charge pump properties */ /* Charge pump properties */ POWER_SUPPLY_ATTR(cp_status1), POWER_SUPPLY_ATTR(cp_status1), POWER_SUPPLY_ATTR(cp_status2), POWER_SUPPLY_ATTR(cp_status2), Loading drivers/power/supply/qcom/qpnp-smb5.c +15 −0 Original line number Original line Diff line number Diff line Loading @@ -639,6 +639,8 @@ static enum power_supply_property smb5_usb_props[] = { POWER_SUPPLY_PROP_CONNECTOR_TYPE, POWER_SUPPLY_PROP_CONNECTOR_TYPE, POWER_SUPPLY_PROP_CONNECTOR_HEALTH, POWER_SUPPLY_PROP_CONNECTOR_HEALTH, POWER_SUPPLY_PROP_VOLTAGE_MAX, POWER_SUPPLY_PROP_VOLTAGE_MAX, POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, POWER_SUPPLY_PROP_VOLTAGE_MAX_LIMIT, POWER_SUPPLY_PROP_SMB_EN_MODE, POWER_SUPPLY_PROP_SMB_EN_MODE, POWER_SUPPLY_PROP_SMB_EN_REASON, POWER_SUPPLY_PROP_SMB_EN_REASON, POWER_SUPPLY_PROP_SCOPE, POWER_SUPPLY_PROP_SCOPE, Loading Loading @@ -678,9 +680,18 @@ static int smb5_usb_get_prop(struct power_supply *psy, if (chg->real_charger_type == POWER_SUPPLY_TYPE_UNKNOWN) if (chg->real_charger_type == POWER_SUPPLY_TYPE_UNKNOWN) val->intval = 0; val->intval = 0; break; break; case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: rc = smblib_get_prop_usb_voltage_max_design(chg, val); break; case POWER_SUPPLY_PROP_VOLTAGE_MAX: case POWER_SUPPLY_PROP_VOLTAGE_MAX: rc = smblib_get_prop_usb_voltage_max(chg, val); rc = smblib_get_prop_usb_voltage_max(chg, val); break; break; case POWER_SUPPLY_PROP_VOLTAGE_MAX_LIMIT: if (chg->usbin_forced_max_uv) val->intval = chg->usbin_forced_max_uv; else smblib_get_prop_usb_voltage_max_design(chg, val); break; case POWER_SUPPLY_PROP_VOLTAGE_NOW: case POWER_SUPPLY_PROP_VOLTAGE_NOW: rc = smblib_get_prop_usb_voltage_now(chg, val); rc = smblib_get_prop_usb_voltage_now(chg, val); break; break; Loading Loading @@ -881,6 +892,9 @@ static int smb5_usb_set_prop(struct power_supply *psy, else else rc = -EINVAL; rc = -EINVAL; break; break; case POWER_SUPPLY_PROP_VOLTAGE_MAX_LIMIT: smblib_set_prop_usb_voltage_max_limit(chg, val); break; default: default: pr_err("set prop %d is not supported\n", psp); pr_err("set prop %d is not supported\n", psp); rc = -EINVAL; rc = -EINVAL; Loading @@ -897,6 +911,7 @@ static int smb5_usb_prop_is_writeable(struct power_supply *psy, case POWER_SUPPLY_PROP_CTM_CURRENT_MAX: case POWER_SUPPLY_PROP_CTM_CURRENT_MAX: case POWER_SUPPLY_PROP_CONNECTOR_HEALTH: case POWER_SUPPLY_PROP_CONNECTOR_HEALTH: case POWER_SUPPLY_PROP_THERM_ICL_LIMIT: case POWER_SUPPLY_PROP_THERM_ICL_LIMIT: case POWER_SUPPLY_PROP_VOLTAGE_MAX_LIMIT: return 1; return 1; default: default: break; break; Loading drivers/power/supply/qcom/smb1390-charger-psy.c +5 −1 Original line number Original line Diff line number Diff line Loading @@ -176,6 +176,7 @@ struct smb1390 { bool switcher_enabled; bool switcher_enabled; int die_temp; int die_temp; bool suspended; bool suspended; bool disabled; u32 debug_mask; u32 debug_mask; u32 min_ilim_ua; u32 min_ilim_ua; u32 max_temp_alarm_degc; u32 max_temp_alarm_degc; Loading Loading @@ -506,8 +507,10 @@ static int smb1390_disable_vote_cb(struct votable *votable, void *data, } } /* charging may have been disabled by ILIM; send uevent */ /* charging may have been disabled by ILIM; send uevent */ if (chip->cp_master_psy) if (chip->cp_master_psy && (disable != chip->disabled)) power_supply_changed(chip->cp_master_psy); power_supply_changed(chip->cp_master_psy); chip->disabled = disable; return rc; return rc; } } Loading Loading @@ -1151,6 +1154,7 @@ static int smb1390_probe(struct platform_device *pdev) mutex_init(&chip->die_chan_lock); mutex_init(&chip->die_chan_lock); chip->die_temp = -ENODATA; chip->die_temp = -ENODATA; chip->pmic_rev_id = pmic_rev_id; chip->pmic_rev_id = pmic_rev_id; chip->disabled = true; platform_set_drvdata(pdev, chip); platform_set_drvdata(pdev, chip); chip->regmap = dev_get_regmap(chip->dev->parent, NULL); chip->regmap = dev_get_regmap(chip->dev->parent, NULL); Loading drivers/power/supply/qcom/smb5-lib.c +65 −1 Original line number Original line Diff line number Diff line Loading @@ -1154,6 +1154,7 @@ static void smblib_uusb_removal(struct smb_charger *chg) chg->voltage_min_uv = MICRO_5V; chg->voltage_min_uv = MICRO_5V; chg->voltage_max_uv = MICRO_5V; chg->voltage_max_uv = MICRO_5V; chg->usbin_forced_max_uv = 0; chg->usb_icl_delta_ua = 0; chg->usb_icl_delta_ua = 0; chg->pulse_cnt = 0; chg->pulse_cnt = 0; chg->uusb_apsd_rerun_done = false; chg->uusb_apsd_rerun_done = false; Loading Loading @@ -3050,7 +3051,7 @@ int smblib_get_prop_usb_online(struct smb_charger *chg, return rc; return rc; } } int smblib_get_prop_usb_voltage_max(struct smb_charger *chg, int smblib_get_prop_usb_voltage_max_design(struct smb_charger *chg, union power_supply_propval *val) union power_supply_propval *val) { { switch (chg->real_charger_type) { switch (chg->real_charger_type) { Loading Loading @@ -3079,6 +3080,37 @@ int smblib_get_prop_usb_voltage_max(struct smb_charger *chg, return 0; return 0; } } int smblib_get_prop_usb_voltage_max(struct smb_charger *chg, union power_supply_propval *val) { switch (chg->real_charger_type) { case POWER_SUPPLY_TYPE_USB_HVDCP: if (chg->qc2_unsupported_voltage == QC2_NON_COMPLIANT_9V) { val->intval = MICRO_5V; break; } else if (chg->qc2_unsupported_voltage == QC2_NON_COMPLIANT_12V) { val->intval = MICRO_9V; break; } /* else, fallthrough */ case POWER_SUPPLY_TYPE_USB_HVDCP_3: if (chg->smb_version == PMI632_SUBTYPE) val->intval = MICRO_9V; else val->intval = MICRO_12V; break; case POWER_SUPPLY_TYPE_USB_PD: val->intval = chg->voltage_max_uv; break; default: val->intval = MICRO_5V; break; } return 0; } #define HVDCP3_STEP_UV 200000 #define HVDCP3_STEP_UV 200000 static int smblib_estimate_adaptor_voltage(struct smb_charger *chg, static int smblib_estimate_adaptor_voltage(struct smb_charger *chg, union power_supply_propval *val) union power_supply_propval *val) Loading Loading @@ -3901,6 +3933,32 @@ int smblib_set_prop_boost_current(struct smb_charger *chg, return rc; return rc; } } int smblib_set_prop_usb_voltage_max_limit(struct smb_charger *chg, const union power_supply_propval *val) { union power_supply_propval pval = {0, }; /* Exit if same value is re-configured */ if (val->intval == chg->usbin_forced_max_uv) return 0; smblib_get_prop_usb_voltage_max_design(chg, &pval); if (val->intval >= MICRO_5V && val->intval <= pval.intval) { chg->usbin_forced_max_uv = val->intval; smblib_dbg(chg, PR_MISC, "Max VBUS limit changed to: %d\n", val->intval); } else if (chg->usbin_forced_max_uv) { chg->usbin_forced_max_uv = 0; } else { return 0; } power_supply_changed(chg->usb_psy); return 0; } int smblib_set_prop_typec_power_role(struct smb_charger *chg, int smblib_set_prop_typec_power_role(struct smb_charger *chg, const union power_supply_propval *val) const union power_supply_propval *val) { { Loading Loading @@ -3969,6 +4027,9 @@ int smblib_set_prop_pd_voltage_min(struct smb_charger *chg, int rc, min_uv; int rc, min_uv; min_uv = min(val->intval, chg->voltage_max_uv); min_uv = min(val->intval, chg->voltage_max_uv); if (chg->voltage_min_uv == min_uv) return 0; rc = smblib_set_usb_pd_allowed_voltage(chg, min_uv, rc = smblib_set_usb_pd_allowed_voltage(chg, min_uv, chg->voltage_max_uv); chg->voltage_max_uv); if (rc < 0) { if (rc < 0) { Loading @@ -3989,6 +4050,8 @@ int smblib_set_prop_pd_voltage_max(struct smb_charger *chg, int rc, max_uv; int rc, max_uv; max_uv = max(val->intval, chg->voltage_min_uv); max_uv = max(val->intval, chg->voltage_min_uv); if (chg->voltage_max_uv == max_uv) return 0; rc = smblib_set_usb_pd_fsw(chg, max_uv); rc = smblib_set_usb_pd_fsw(chg, max_uv); if (rc < 0) { if (rc < 0) { Loading Loading @@ -5312,6 +5375,7 @@ static void typec_src_removal(struct smb_charger *chg) chg->usb_icl_delta_ua = 0; chg->usb_icl_delta_ua = 0; chg->voltage_min_uv = MICRO_5V; chg->voltage_min_uv = MICRO_5V; chg->voltage_max_uv = MICRO_5V; chg->voltage_max_uv = MICRO_5V; chg->usbin_forced_max_uv = 0; /* write back the default FLOAT charger configuration */ /* write back the default FLOAT charger configuration */ rc = smblib_masked_write(chg, USBIN_OPTIONS_2_CFG_REG, rc = smblib_masked_write(chg, USBIN_OPTIONS_2_CFG_REG, Loading drivers/power/supply/qcom/smb5-lib.h +5 −0 Original line number Original line Diff line number Diff line Loading @@ -518,6 +518,7 @@ struct smb_charger { int charge_full_cc; int charge_full_cc; int cc_soc_ref; int cc_soc_ref; int dr_mode; int dr_mode; int usbin_forced_max_uv; /* workaround flag */ /* workaround flag */ u32 wa_flags; u32 wa_flags; Loading Loading @@ -663,6 +664,10 @@ int smblib_get_prop_usb_suspend(struct smb_charger *chg, union power_supply_propval *val); union power_supply_propval *val); int smblib_get_prop_usb_voltage_max(struct smb_charger *chg, int smblib_get_prop_usb_voltage_max(struct smb_charger *chg, union power_supply_propval *val); union power_supply_propval *val); int smblib_get_prop_usb_voltage_max_design(struct smb_charger *chg, union power_supply_propval *val); int smblib_set_prop_usb_voltage_max_limit(struct smb_charger *chg, const union power_supply_propval *val); int smblib_get_prop_usb_voltage_now(struct smb_charger *chg, int smblib_get_prop_usb_voltage_now(struct smb_charger *chg, union power_supply_propval *val); union power_supply_propval *val); int smblib_get_prop_low_power(struct smb_charger *chg, int smblib_get_prop_low_power(struct smb_charger *chg, Loading Loading
drivers/power/supply/power_supply_sysfs.c +1 −0 Original line number Original line Diff line number Diff line Loading @@ -396,6 +396,7 @@ static struct device_attribute power_supply_attrs[] = { POWER_SUPPLY_ATTR(therm_icl_limit), POWER_SUPPLY_ATTR(therm_icl_limit), POWER_SUPPLY_ATTR(dc_reset), POWER_SUPPLY_ATTR(dc_reset), POWER_SUPPLY_ATTR(scale_mode_en), POWER_SUPPLY_ATTR(scale_mode_en), POWER_SUPPLY_ATTR(voltage_max_limit), /* Charge pump properties */ /* Charge pump properties */ POWER_SUPPLY_ATTR(cp_status1), POWER_SUPPLY_ATTR(cp_status1), POWER_SUPPLY_ATTR(cp_status2), POWER_SUPPLY_ATTR(cp_status2), Loading
drivers/power/supply/qcom/qpnp-smb5.c +15 −0 Original line number Original line Diff line number Diff line Loading @@ -639,6 +639,8 @@ static enum power_supply_property smb5_usb_props[] = { POWER_SUPPLY_PROP_CONNECTOR_TYPE, POWER_SUPPLY_PROP_CONNECTOR_TYPE, POWER_SUPPLY_PROP_CONNECTOR_HEALTH, POWER_SUPPLY_PROP_CONNECTOR_HEALTH, POWER_SUPPLY_PROP_VOLTAGE_MAX, POWER_SUPPLY_PROP_VOLTAGE_MAX, POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, POWER_SUPPLY_PROP_VOLTAGE_MAX_LIMIT, POWER_SUPPLY_PROP_SMB_EN_MODE, POWER_SUPPLY_PROP_SMB_EN_MODE, POWER_SUPPLY_PROP_SMB_EN_REASON, POWER_SUPPLY_PROP_SMB_EN_REASON, POWER_SUPPLY_PROP_SCOPE, POWER_SUPPLY_PROP_SCOPE, Loading Loading @@ -678,9 +680,18 @@ static int smb5_usb_get_prop(struct power_supply *psy, if (chg->real_charger_type == POWER_SUPPLY_TYPE_UNKNOWN) if (chg->real_charger_type == POWER_SUPPLY_TYPE_UNKNOWN) val->intval = 0; val->intval = 0; break; break; case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: rc = smblib_get_prop_usb_voltage_max_design(chg, val); break; case POWER_SUPPLY_PROP_VOLTAGE_MAX: case POWER_SUPPLY_PROP_VOLTAGE_MAX: rc = smblib_get_prop_usb_voltage_max(chg, val); rc = smblib_get_prop_usb_voltage_max(chg, val); break; break; case POWER_SUPPLY_PROP_VOLTAGE_MAX_LIMIT: if (chg->usbin_forced_max_uv) val->intval = chg->usbin_forced_max_uv; else smblib_get_prop_usb_voltage_max_design(chg, val); break; case POWER_SUPPLY_PROP_VOLTAGE_NOW: case POWER_SUPPLY_PROP_VOLTAGE_NOW: rc = smblib_get_prop_usb_voltage_now(chg, val); rc = smblib_get_prop_usb_voltage_now(chg, val); break; break; Loading Loading @@ -881,6 +892,9 @@ static int smb5_usb_set_prop(struct power_supply *psy, else else rc = -EINVAL; rc = -EINVAL; break; break; case POWER_SUPPLY_PROP_VOLTAGE_MAX_LIMIT: smblib_set_prop_usb_voltage_max_limit(chg, val); break; default: default: pr_err("set prop %d is not supported\n", psp); pr_err("set prop %d is not supported\n", psp); rc = -EINVAL; rc = -EINVAL; Loading @@ -897,6 +911,7 @@ static int smb5_usb_prop_is_writeable(struct power_supply *psy, case POWER_SUPPLY_PROP_CTM_CURRENT_MAX: case POWER_SUPPLY_PROP_CTM_CURRENT_MAX: case POWER_SUPPLY_PROP_CONNECTOR_HEALTH: case POWER_SUPPLY_PROP_CONNECTOR_HEALTH: case POWER_SUPPLY_PROP_THERM_ICL_LIMIT: case POWER_SUPPLY_PROP_THERM_ICL_LIMIT: case POWER_SUPPLY_PROP_VOLTAGE_MAX_LIMIT: return 1; return 1; default: default: break; break; Loading
drivers/power/supply/qcom/smb1390-charger-psy.c +5 −1 Original line number Original line Diff line number Diff line Loading @@ -176,6 +176,7 @@ struct smb1390 { bool switcher_enabled; bool switcher_enabled; int die_temp; int die_temp; bool suspended; bool suspended; bool disabled; u32 debug_mask; u32 debug_mask; u32 min_ilim_ua; u32 min_ilim_ua; u32 max_temp_alarm_degc; u32 max_temp_alarm_degc; Loading Loading @@ -506,8 +507,10 @@ static int smb1390_disable_vote_cb(struct votable *votable, void *data, } } /* charging may have been disabled by ILIM; send uevent */ /* charging may have been disabled by ILIM; send uevent */ if (chip->cp_master_psy) if (chip->cp_master_psy && (disable != chip->disabled)) power_supply_changed(chip->cp_master_psy); power_supply_changed(chip->cp_master_psy); chip->disabled = disable; return rc; return rc; } } Loading Loading @@ -1151,6 +1154,7 @@ static int smb1390_probe(struct platform_device *pdev) mutex_init(&chip->die_chan_lock); mutex_init(&chip->die_chan_lock); chip->die_temp = -ENODATA; chip->die_temp = -ENODATA; chip->pmic_rev_id = pmic_rev_id; chip->pmic_rev_id = pmic_rev_id; chip->disabled = true; platform_set_drvdata(pdev, chip); platform_set_drvdata(pdev, chip); chip->regmap = dev_get_regmap(chip->dev->parent, NULL); chip->regmap = dev_get_regmap(chip->dev->parent, NULL); Loading
drivers/power/supply/qcom/smb5-lib.c +65 −1 Original line number Original line Diff line number Diff line Loading @@ -1154,6 +1154,7 @@ static void smblib_uusb_removal(struct smb_charger *chg) chg->voltage_min_uv = MICRO_5V; chg->voltage_min_uv = MICRO_5V; chg->voltage_max_uv = MICRO_5V; chg->voltage_max_uv = MICRO_5V; chg->usbin_forced_max_uv = 0; chg->usb_icl_delta_ua = 0; chg->usb_icl_delta_ua = 0; chg->pulse_cnt = 0; chg->pulse_cnt = 0; chg->uusb_apsd_rerun_done = false; chg->uusb_apsd_rerun_done = false; Loading Loading @@ -3050,7 +3051,7 @@ int smblib_get_prop_usb_online(struct smb_charger *chg, return rc; return rc; } } int smblib_get_prop_usb_voltage_max(struct smb_charger *chg, int smblib_get_prop_usb_voltage_max_design(struct smb_charger *chg, union power_supply_propval *val) union power_supply_propval *val) { { switch (chg->real_charger_type) { switch (chg->real_charger_type) { Loading Loading @@ -3079,6 +3080,37 @@ int smblib_get_prop_usb_voltage_max(struct smb_charger *chg, return 0; return 0; } } int smblib_get_prop_usb_voltage_max(struct smb_charger *chg, union power_supply_propval *val) { switch (chg->real_charger_type) { case POWER_SUPPLY_TYPE_USB_HVDCP: if (chg->qc2_unsupported_voltage == QC2_NON_COMPLIANT_9V) { val->intval = MICRO_5V; break; } else if (chg->qc2_unsupported_voltage == QC2_NON_COMPLIANT_12V) { val->intval = MICRO_9V; break; } /* else, fallthrough */ case POWER_SUPPLY_TYPE_USB_HVDCP_3: if (chg->smb_version == PMI632_SUBTYPE) val->intval = MICRO_9V; else val->intval = MICRO_12V; break; case POWER_SUPPLY_TYPE_USB_PD: val->intval = chg->voltage_max_uv; break; default: val->intval = MICRO_5V; break; } return 0; } #define HVDCP3_STEP_UV 200000 #define HVDCP3_STEP_UV 200000 static int smblib_estimate_adaptor_voltage(struct smb_charger *chg, static int smblib_estimate_adaptor_voltage(struct smb_charger *chg, union power_supply_propval *val) union power_supply_propval *val) Loading Loading @@ -3901,6 +3933,32 @@ int smblib_set_prop_boost_current(struct smb_charger *chg, return rc; return rc; } } int smblib_set_prop_usb_voltage_max_limit(struct smb_charger *chg, const union power_supply_propval *val) { union power_supply_propval pval = {0, }; /* Exit if same value is re-configured */ if (val->intval == chg->usbin_forced_max_uv) return 0; smblib_get_prop_usb_voltage_max_design(chg, &pval); if (val->intval >= MICRO_5V && val->intval <= pval.intval) { chg->usbin_forced_max_uv = val->intval; smblib_dbg(chg, PR_MISC, "Max VBUS limit changed to: %d\n", val->intval); } else if (chg->usbin_forced_max_uv) { chg->usbin_forced_max_uv = 0; } else { return 0; } power_supply_changed(chg->usb_psy); return 0; } int smblib_set_prop_typec_power_role(struct smb_charger *chg, int smblib_set_prop_typec_power_role(struct smb_charger *chg, const union power_supply_propval *val) const union power_supply_propval *val) { { Loading Loading @@ -3969,6 +4027,9 @@ int smblib_set_prop_pd_voltage_min(struct smb_charger *chg, int rc, min_uv; int rc, min_uv; min_uv = min(val->intval, chg->voltage_max_uv); min_uv = min(val->intval, chg->voltage_max_uv); if (chg->voltage_min_uv == min_uv) return 0; rc = smblib_set_usb_pd_allowed_voltage(chg, min_uv, rc = smblib_set_usb_pd_allowed_voltage(chg, min_uv, chg->voltage_max_uv); chg->voltage_max_uv); if (rc < 0) { if (rc < 0) { Loading @@ -3989,6 +4050,8 @@ int smblib_set_prop_pd_voltage_max(struct smb_charger *chg, int rc, max_uv; int rc, max_uv; max_uv = max(val->intval, chg->voltage_min_uv); max_uv = max(val->intval, chg->voltage_min_uv); if (chg->voltage_max_uv == max_uv) return 0; rc = smblib_set_usb_pd_fsw(chg, max_uv); rc = smblib_set_usb_pd_fsw(chg, max_uv); if (rc < 0) { if (rc < 0) { Loading Loading @@ -5312,6 +5375,7 @@ static void typec_src_removal(struct smb_charger *chg) chg->usb_icl_delta_ua = 0; chg->usb_icl_delta_ua = 0; chg->voltage_min_uv = MICRO_5V; chg->voltage_min_uv = MICRO_5V; chg->voltage_max_uv = MICRO_5V; chg->voltage_max_uv = MICRO_5V; chg->usbin_forced_max_uv = 0; /* write back the default FLOAT charger configuration */ /* write back the default FLOAT charger configuration */ rc = smblib_masked_write(chg, USBIN_OPTIONS_2_CFG_REG, rc = smblib_masked_write(chg, USBIN_OPTIONS_2_CFG_REG, Loading
drivers/power/supply/qcom/smb5-lib.h +5 −0 Original line number Original line Diff line number Diff line Loading @@ -518,6 +518,7 @@ struct smb_charger { int charge_full_cc; int charge_full_cc; int cc_soc_ref; int cc_soc_ref; int dr_mode; int dr_mode; int usbin_forced_max_uv; /* workaround flag */ /* workaround flag */ u32 wa_flags; u32 wa_flags; Loading Loading @@ -663,6 +664,10 @@ int smblib_get_prop_usb_suspend(struct smb_charger *chg, union power_supply_propval *val); union power_supply_propval *val); int smblib_get_prop_usb_voltage_max(struct smb_charger *chg, int smblib_get_prop_usb_voltage_max(struct smb_charger *chg, union power_supply_propval *val); union power_supply_propval *val); int smblib_get_prop_usb_voltage_max_design(struct smb_charger *chg, union power_supply_propval *val); int smblib_set_prop_usb_voltage_max_limit(struct smb_charger *chg, const union power_supply_propval *val); int smblib_get_prop_usb_voltage_now(struct smb_charger *chg, int smblib_get_prop_usb_voltage_now(struct smb_charger *chg, union power_supply_propval *val); union power_supply_propval *val); int smblib_get_prop_low_power(struct smb_charger *chg, int smblib_get_prop_low_power(struct smb_charger *chg, Loading