Loading drivers/power/supply/power_supply_sysfs.c +1 −0 Original line number Diff line number Diff line Loading @@ -368,6 +368,7 @@ static struct device_attribute power_supply_attrs[] = { POWER_SUPPLY_ATTR(batt_full_current), POWER_SUPPLY_ATTR(recharge_soc), POWER_SUPPLY_ATTR(hvdcp_opti_allowed), POWER_SUPPLY_ATTR(smb_en_mode), /* Local extensions of type int64_t */ POWER_SUPPLY_ATTR(charge_counter_ext), /* Properties of type `const char *' */ Loading drivers/power/supply/qcom/qpnp-smb5.c +11 −6 Original line number Diff line number Diff line Loading @@ -286,6 +286,13 @@ static int smb5_parse_dt(struct smb5 *chip) of_property_read_u32(node, "qcom,sec-charger-config", &chip->dt.sec_charger_config); chg->sec_cp_present = chip->dt.sec_charger_config == POWER_SUPPLY_CHARGER_SEC_CP || chip->dt.sec_charger_config == POWER_SUPPLY_CHARGER_SEC_CP_PL; chg->sec_pl_present = chip->dt.sec_charger_config == POWER_SUPPLY_CHARGER_SEC_PL || chip->dt.sec_charger_config == POWER_SUPPLY_CHARGER_SEC_CP_PL; chg->step_chg_enabled = of_property_read_bool(node, "qcom,step-charging-enable"); Loading Loading @@ -461,6 +468,7 @@ static enum power_supply_property smb5_usb_props[] = { POWER_SUPPLY_PROP_SDP_CURRENT_MAX, POWER_SUPPLY_PROP_CONNECTOR_TYPE, POWER_SUPPLY_PROP_VOLTAGE_MAX, POWER_SUPPLY_PROP_SMB_EN_MODE, POWER_SUPPLY_PROP_SCOPE, }; Loading Loading @@ -580,6 +588,9 @@ static int smb5_usb_get_prop(struct power_supply *psy, : chg->otg_present ? POWER_SUPPLY_SCOPE_SYSTEM : POWER_SUPPLY_SCOPE_UNKNOWN; break; case POWER_SUPPLY_PROP_SMB_EN_MODE: val->intval = chg->sec_chg_selected; break; default: pr_err("get prop %d is not supported in usb\n", psp); rc = -EINVAL; Loading Loading @@ -1466,12 +1477,6 @@ static int smb5_init_hw(struct smb5 *chip) smblib_get_charge_param(chg, &chg->param.usb_icl, &chg->default_icl_ua); chg->sec_cp_present = chip->dt.sec_charger_config == SEC_CHG_CP_ONLY || chip->dt.sec_charger_config == SEC_CHG_CP_AND_PL; chg->sec_pl_present = chip->dt.sec_charger_config == SEC_CHG_PL_ONLY || chip->dt.sec_charger_config == SEC_CHG_CP_AND_PL; /* Use SW based VBUS control, disable HW autonomous mode */ rc = smblib_masked_write(chg, USBIN_OPTIONS_1_CFG_REG, HVDCP_AUTH_ALG_EN_CFG_BIT | HVDCP_AUTONOMOUS_MODE_EN_CFG_BIT, Loading drivers/power/supply/qcom/smb5-lib.c +21 −16 Original line number Diff line number Diff line Loading @@ -117,8 +117,7 @@ int smblib_get_jeita_cc_delta(struct smb_charger *chg, int *cc_delta_ua) return 0; } static int smblib_select_sec_charger(struct smb_charger *chg, enum sec_charger_type sec_chg) static int smblib_select_sec_charger(struct smb_charger *chg, int sec_chg) { int rc; Loading @@ -126,7 +125,7 @@ static int smblib_select_sec_charger(struct smb_charger *chg, return 0; switch (sec_chg) { case SEC_CHG_CP: case POWER_SUPPLY_CHARGER_SEC_CP: /* select Charge Pump instead of slave charger */ rc = smblib_masked_write(chg, MISC_SMB_CFG_REG, SMB_EN_SEL_BIT, SMB_EN_SEL_BIT); Loading @@ -143,7 +142,7 @@ static int smblib_select_sec_charger(struct smb_charger *chg, return rc; } break; case SEC_CHG_PL: case POWER_SUPPLY_CHARGER_SEC_PL: /* select slave charger instead of Charge Pump */ rc = smblib_masked_write(chg, MISC_SMB_CFG_REG, SMB_EN_SEL_BIT, 0); Loading @@ -160,7 +159,7 @@ static int smblib_select_sec_charger(struct smb_charger *chg, return rc; } break; case SEC_CHG_NONE: case POWER_SUPPLY_CHARGER_SEC_NONE: default: /* SW override, disabling secondary charger(s) */ rc = smblib_write(chg, MISC_SMB_EN_CMD_REG, Loading Loading @@ -2452,8 +2451,10 @@ int smblib_set_prop_pd_active(struct smb_charger *chg, * For PPS, Charge Pump is preferred over parallel charger if * present. */ if (chg->pd_active == 2 && chg->sec_cp_present) { rc = smblib_select_sec_charger(chg, SEC_CHG_CP); if (chg->pd_active == POWER_SUPPLY_PD_PPS_ACTIVE && chg->sec_cp_present) { rc = smblib_select_sec_charger(chg, POWER_SUPPLY_CHARGER_SEC_CP); if (rc < 0) dev_err(chg->dev, "Couldn't enable secondary charger rc=%d\n", rc); Loading @@ -2464,7 +2465,8 @@ int smblib_set_prop_pd_active(struct smb_charger *chg, vote(chg->usb_irq_enable_votable, PD_VOTER, false, 0); rc = smblib_select_sec_charger(chg, chg->sec_pl_present ? SEC_CHG_PL : SEC_CHG_NONE); chg->sec_pl_present ? POWER_SUPPLY_CHARGER_SEC_PL : POWER_SUPPLY_CHARGER_SEC_NONE); if (rc < 0) dev_err(chg->dev, "Couldn't enable secondary charger rc=%d\n", Loading Loading @@ -3004,7 +3006,8 @@ static void smblib_handle_hvdcp_3p0_auth_done(struct smb_charger *chg, /* for QC3, switch to CP if present */ if ((apsd_result->bit & QC_3P0_BIT) && chg->sec_cp_present) { rc = smblib_select_sec_charger(chg, SEC_CHG_CP); rc = smblib_select_sec_charger(chg, POWER_SUPPLY_CHARGER_SEC_CP); if (rc < 0) dev_err(chg->dev, "Couldn't enable secondary chargers rc=%d\n", rc); Loading Loading @@ -3264,7 +3267,8 @@ static void typec_src_removal(struct smb_charger *chg) struct storm_watch *wdata; rc = smblib_select_sec_charger(chg, chg->sec_pl_present ? SEC_CHG_PL : SEC_CHG_NONE); chg->sec_pl_present ? POWER_SUPPLY_CHARGER_SEC_PL : POWER_SUPPLY_CHARGER_SEC_NONE); if (rc < 0) dev_err(chg->dev, "Couldn't disable secondary charger rc=%d\n", rc); Loading Loading @@ -3699,10 +3703,10 @@ static void pl_update_work(struct work_struct *work) struct smb_charger *chg = container_of(work, struct smb_charger, pl_update_work); if (chg->sec_chg_selected == SEC_CHG_CP) if (chg->sec_chg_selected == POWER_SUPPLY_CHARGER_SEC_CP) return; smblib_select_sec_charger(chg, SEC_CHG_PL); smblib_select_sec_charger(chg, POWER_SUPPLY_CHARGER_SEC_PL); } static void clear_hdc_work(struct work_struct *work) Loading Loading @@ -3959,7 +3963,7 @@ int smblib_init(struct smb_charger *chg) chg->fake_batt_status = -EINVAL; chg->sink_src_mode = UNATTACHED_MODE; chg->jeita_configured = false; chg->sec_chg_selected = SEC_CHG_NONE; chg->sec_chg_selected = POWER_SUPPLY_CHARGER_SEC_NONE; switch (chg->mode) { case PARALLEL_MASTER: Loading Loading @@ -3989,9 +3993,10 @@ int smblib_init(struct smb_charger *chg) if (chg->sec_pl_present) { chg->pl.psy = power_supply_get_by_name("parallel"); if (chg->pl.psy && chg->sec_chg_selected != SEC_CHG_CP) { rc = smblib_select_sec_charger(chg, SEC_CHG_PL); if (chg->sec_chg_selected != POWER_SUPPLY_CHARGER_SEC_CP && chg->pl.psy) { rc = smblib_select_sec_charger(chg, POWER_SUPPLY_CHARGER_SEC_PL); if (rc < 0) { smblib_err(chg, "Couldn't config pl charger rc=%d\n", rc); Loading drivers/power/supply/qcom/smb5-lib.h +0 −13 Original line number Diff line number Diff line Loading @@ -78,19 +78,6 @@ enum smb_mode { NUM_MODES, }; enum sec_charger_config { MAIN_STANDALONE = 0, SEC_CHG_CP_ONLY, SEC_CHG_PL_ONLY, SEC_CHG_CP_AND_PL, }; enum sec_charger_type { SEC_CHG_NONE = 0, SEC_CHG_CP, SEC_CHG_PL, }; enum sink_src_mode { SINK_MODE, SRC_MODE, Loading include/linux/power_supply.h +8 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,13 @@ enum { POWER_SUPPLY_PL_USBMID_USBMID, }; enum { POWER_SUPPLY_CHARGER_SEC_NONE = 0, POWER_SUPPLY_CHARGER_SEC_CP, POWER_SUPPLY_CHARGER_SEC_PL, POWER_SUPPLY_CHARGER_SEC_CP_PL, }; enum { POWER_SUPPLY_CONNECTOR_TYPEC, POWER_SUPPLY_CONNECTOR_MICRO_USB, Loading Loading @@ -287,6 +294,7 @@ enum power_supply_property { POWER_SUPPLY_PROP_BATT_FULL_CURRENT, POWER_SUPPLY_PROP_RECHARGE_SOC, POWER_SUPPLY_PROP_HVDCP_OPTI_ALLOWED, POWER_SUPPLY_PROP_SMB_EN_MODE, /* Local extensions of type int64_t */ POWER_SUPPLY_PROP_CHARGE_COUNTER_EXT, /* Properties of type `const char *' */ Loading Loading
drivers/power/supply/power_supply_sysfs.c +1 −0 Original line number Diff line number Diff line Loading @@ -368,6 +368,7 @@ static struct device_attribute power_supply_attrs[] = { POWER_SUPPLY_ATTR(batt_full_current), POWER_SUPPLY_ATTR(recharge_soc), POWER_SUPPLY_ATTR(hvdcp_opti_allowed), POWER_SUPPLY_ATTR(smb_en_mode), /* Local extensions of type int64_t */ POWER_SUPPLY_ATTR(charge_counter_ext), /* Properties of type `const char *' */ Loading
drivers/power/supply/qcom/qpnp-smb5.c +11 −6 Original line number Diff line number Diff line Loading @@ -286,6 +286,13 @@ static int smb5_parse_dt(struct smb5 *chip) of_property_read_u32(node, "qcom,sec-charger-config", &chip->dt.sec_charger_config); chg->sec_cp_present = chip->dt.sec_charger_config == POWER_SUPPLY_CHARGER_SEC_CP || chip->dt.sec_charger_config == POWER_SUPPLY_CHARGER_SEC_CP_PL; chg->sec_pl_present = chip->dt.sec_charger_config == POWER_SUPPLY_CHARGER_SEC_PL || chip->dt.sec_charger_config == POWER_SUPPLY_CHARGER_SEC_CP_PL; chg->step_chg_enabled = of_property_read_bool(node, "qcom,step-charging-enable"); Loading Loading @@ -461,6 +468,7 @@ static enum power_supply_property smb5_usb_props[] = { POWER_SUPPLY_PROP_SDP_CURRENT_MAX, POWER_SUPPLY_PROP_CONNECTOR_TYPE, POWER_SUPPLY_PROP_VOLTAGE_MAX, POWER_SUPPLY_PROP_SMB_EN_MODE, POWER_SUPPLY_PROP_SCOPE, }; Loading Loading @@ -580,6 +588,9 @@ static int smb5_usb_get_prop(struct power_supply *psy, : chg->otg_present ? POWER_SUPPLY_SCOPE_SYSTEM : POWER_SUPPLY_SCOPE_UNKNOWN; break; case POWER_SUPPLY_PROP_SMB_EN_MODE: val->intval = chg->sec_chg_selected; break; default: pr_err("get prop %d is not supported in usb\n", psp); rc = -EINVAL; Loading Loading @@ -1466,12 +1477,6 @@ static int smb5_init_hw(struct smb5 *chip) smblib_get_charge_param(chg, &chg->param.usb_icl, &chg->default_icl_ua); chg->sec_cp_present = chip->dt.sec_charger_config == SEC_CHG_CP_ONLY || chip->dt.sec_charger_config == SEC_CHG_CP_AND_PL; chg->sec_pl_present = chip->dt.sec_charger_config == SEC_CHG_PL_ONLY || chip->dt.sec_charger_config == SEC_CHG_CP_AND_PL; /* Use SW based VBUS control, disable HW autonomous mode */ rc = smblib_masked_write(chg, USBIN_OPTIONS_1_CFG_REG, HVDCP_AUTH_ALG_EN_CFG_BIT | HVDCP_AUTONOMOUS_MODE_EN_CFG_BIT, Loading
drivers/power/supply/qcom/smb5-lib.c +21 −16 Original line number Diff line number Diff line Loading @@ -117,8 +117,7 @@ int smblib_get_jeita_cc_delta(struct smb_charger *chg, int *cc_delta_ua) return 0; } static int smblib_select_sec_charger(struct smb_charger *chg, enum sec_charger_type sec_chg) static int smblib_select_sec_charger(struct smb_charger *chg, int sec_chg) { int rc; Loading @@ -126,7 +125,7 @@ static int smblib_select_sec_charger(struct smb_charger *chg, return 0; switch (sec_chg) { case SEC_CHG_CP: case POWER_SUPPLY_CHARGER_SEC_CP: /* select Charge Pump instead of slave charger */ rc = smblib_masked_write(chg, MISC_SMB_CFG_REG, SMB_EN_SEL_BIT, SMB_EN_SEL_BIT); Loading @@ -143,7 +142,7 @@ static int smblib_select_sec_charger(struct smb_charger *chg, return rc; } break; case SEC_CHG_PL: case POWER_SUPPLY_CHARGER_SEC_PL: /* select slave charger instead of Charge Pump */ rc = smblib_masked_write(chg, MISC_SMB_CFG_REG, SMB_EN_SEL_BIT, 0); Loading @@ -160,7 +159,7 @@ static int smblib_select_sec_charger(struct smb_charger *chg, return rc; } break; case SEC_CHG_NONE: case POWER_SUPPLY_CHARGER_SEC_NONE: default: /* SW override, disabling secondary charger(s) */ rc = smblib_write(chg, MISC_SMB_EN_CMD_REG, Loading Loading @@ -2452,8 +2451,10 @@ int smblib_set_prop_pd_active(struct smb_charger *chg, * For PPS, Charge Pump is preferred over parallel charger if * present. */ if (chg->pd_active == 2 && chg->sec_cp_present) { rc = smblib_select_sec_charger(chg, SEC_CHG_CP); if (chg->pd_active == POWER_SUPPLY_PD_PPS_ACTIVE && chg->sec_cp_present) { rc = smblib_select_sec_charger(chg, POWER_SUPPLY_CHARGER_SEC_CP); if (rc < 0) dev_err(chg->dev, "Couldn't enable secondary charger rc=%d\n", rc); Loading @@ -2464,7 +2465,8 @@ int smblib_set_prop_pd_active(struct smb_charger *chg, vote(chg->usb_irq_enable_votable, PD_VOTER, false, 0); rc = smblib_select_sec_charger(chg, chg->sec_pl_present ? SEC_CHG_PL : SEC_CHG_NONE); chg->sec_pl_present ? POWER_SUPPLY_CHARGER_SEC_PL : POWER_SUPPLY_CHARGER_SEC_NONE); if (rc < 0) dev_err(chg->dev, "Couldn't enable secondary charger rc=%d\n", Loading Loading @@ -3004,7 +3006,8 @@ static void smblib_handle_hvdcp_3p0_auth_done(struct smb_charger *chg, /* for QC3, switch to CP if present */ if ((apsd_result->bit & QC_3P0_BIT) && chg->sec_cp_present) { rc = smblib_select_sec_charger(chg, SEC_CHG_CP); rc = smblib_select_sec_charger(chg, POWER_SUPPLY_CHARGER_SEC_CP); if (rc < 0) dev_err(chg->dev, "Couldn't enable secondary chargers rc=%d\n", rc); Loading Loading @@ -3264,7 +3267,8 @@ static void typec_src_removal(struct smb_charger *chg) struct storm_watch *wdata; rc = smblib_select_sec_charger(chg, chg->sec_pl_present ? SEC_CHG_PL : SEC_CHG_NONE); chg->sec_pl_present ? POWER_SUPPLY_CHARGER_SEC_PL : POWER_SUPPLY_CHARGER_SEC_NONE); if (rc < 0) dev_err(chg->dev, "Couldn't disable secondary charger rc=%d\n", rc); Loading Loading @@ -3699,10 +3703,10 @@ static void pl_update_work(struct work_struct *work) struct smb_charger *chg = container_of(work, struct smb_charger, pl_update_work); if (chg->sec_chg_selected == SEC_CHG_CP) if (chg->sec_chg_selected == POWER_SUPPLY_CHARGER_SEC_CP) return; smblib_select_sec_charger(chg, SEC_CHG_PL); smblib_select_sec_charger(chg, POWER_SUPPLY_CHARGER_SEC_PL); } static void clear_hdc_work(struct work_struct *work) Loading Loading @@ -3959,7 +3963,7 @@ int smblib_init(struct smb_charger *chg) chg->fake_batt_status = -EINVAL; chg->sink_src_mode = UNATTACHED_MODE; chg->jeita_configured = false; chg->sec_chg_selected = SEC_CHG_NONE; chg->sec_chg_selected = POWER_SUPPLY_CHARGER_SEC_NONE; switch (chg->mode) { case PARALLEL_MASTER: Loading Loading @@ -3989,9 +3993,10 @@ int smblib_init(struct smb_charger *chg) if (chg->sec_pl_present) { chg->pl.psy = power_supply_get_by_name("parallel"); if (chg->pl.psy && chg->sec_chg_selected != SEC_CHG_CP) { rc = smblib_select_sec_charger(chg, SEC_CHG_PL); if (chg->sec_chg_selected != POWER_SUPPLY_CHARGER_SEC_CP && chg->pl.psy) { rc = smblib_select_sec_charger(chg, POWER_SUPPLY_CHARGER_SEC_PL); if (rc < 0) { smblib_err(chg, "Couldn't config pl charger rc=%d\n", rc); Loading
drivers/power/supply/qcom/smb5-lib.h +0 −13 Original line number Diff line number Diff line Loading @@ -78,19 +78,6 @@ enum smb_mode { NUM_MODES, }; enum sec_charger_config { MAIN_STANDALONE = 0, SEC_CHG_CP_ONLY, SEC_CHG_PL_ONLY, SEC_CHG_CP_AND_PL, }; enum sec_charger_type { SEC_CHG_NONE = 0, SEC_CHG_CP, SEC_CHG_PL, }; enum sink_src_mode { SINK_MODE, SRC_MODE, Loading
include/linux/power_supply.h +8 −0 Original line number Diff line number Diff line Loading @@ -115,6 +115,13 @@ enum { POWER_SUPPLY_PL_USBMID_USBMID, }; enum { POWER_SUPPLY_CHARGER_SEC_NONE = 0, POWER_SUPPLY_CHARGER_SEC_CP, POWER_SUPPLY_CHARGER_SEC_PL, POWER_SUPPLY_CHARGER_SEC_CP_PL, }; enum { POWER_SUPPLY_CONNECTOR_TYPEC, POWER_SUPPLY_CONNECTOR_MICRO_USB, Loading Loading @@ -287,6 +294,7 @@ enum power_supply_property { POWER_SUPPLY_PROP_BATT_FULL_CURRENT, POWER_SUPPLY_PROP_RECHARGE_SOC, POWER_SUPPLY_PROP_HVDCP_OPTI_ALLOWED, POWER_SUPPLY_PROP_SMB_EN_MODE, /* Local extensions of type int64_t */ POWER_SUPPLY_PROP_CHARGE_COUNTER_EXT, /* Properties of type `const char *' */ Loading