Loading drivers/power/supply/qcom/qpnp-smb5.c +7 −3 Original line number Diff line number Diff line Loading @@ -2119,14 +2119,18 @@ static int smb5_configure_typec(struct smb_charger *chg) return rc; } val = EN_TRY_SNK_BIT; /* PMI632 doesn't support try snk */ if (chg->chg_param.smb_version == PMI632_SUBTYPE) val = 0; /* enable try.snk and clear force sink for DRP mode */ rc = smblib_masked_write(chg, TYPE_C_MODE_CFG_REG, EN_TRY_SNK_BIT | EN_SNK_ONLY_BIT, EN_TRY_SNK_BIT); val); if (rc < 0) { dev_err(chg->dev, "Couldn't configure TYPE_C_MODE_CFG_REG rc=%d\n", rc); "Couldn't configure TYPE_C_MODE_CFG_REG rc=%d\n", rc); return rc; } chg->typec_try_mode |= EN_TRY_SNK_BIT; Loading drivers/power/supply/qcom/smb5-lib.c +27 −15 Original line number Diff line number Diff line Loading @@ -5877,23 +5877,26 @@ static int typec_partner_register(struct smb_charger *chg) { int typec_mode, rc = 0; if (!chg->typec_port) return 0; mutex_lock(&chg->typec_lock); if (chg->typec_partner && chg->pr_swap_in_progress) return 0; if (!chg->typec_port || chg->pr_swap_in_progress) goto unlock; if (!chg->typec_partner) { if (chg->sink_src_mode == AUDIO_ACCESS_MODE) chg->typec_partner_desc.accessory = TYPEC_ACCESSORY_AUDIO; chg->typec_partner_desc.accessory = TYPEC_ACCESSORY_AUDIO; else chg->typec_partner_desc.accessory = TYPEC_ACCESSORY_NONE; chg->typec_partner_desc.accessory = TYPEC_ACCESSORY_NONE; chg->typec_partner = typec_register_partner(chg->typec_port, &chg->typec_partner_desc); if (IS_ERR(chg->typec_partner)) { rc = PTR_ERR(chg->typec_partner); pr_err("failed to register typec_partner rc=%d\n", rc); return rc; goto unlock; } } typec_mode = smblib_get_prop_typec_mode(chg); Loading @@ -5907,16 +5910,22 @@ static int typec_partner_register(struct smb_charger *chg) typec_set_pwr_role(chg->typec_port, TYPEC_SOURCE); } unlock: mutex_unlock(&chg->typec_lock); return rc; } static void typec_partner_unregister(struct smb_charger *chg) { mutex_lock(&chg->typec_lock); if (chg->typec_partner && !chg->pr_swap_in_progress) { smblib_dbg(chg, PR_MISC, "Un-registering typeC partner\n"); typec_unregister_partner(chg->typec_partner); chg->typec_partner = NULL; } mutex_unlock(&chg->typec_lock); } static const char * const dr_mode_text[] = { Loading Loading @@ -6455,10 +6464,13 @@ irqreturn_t typec_attach_detach_irq_handler(int irq, void *data) * swap is not in progress, to ensure forced sink or src * mode configuration is reset properly. */ mutex_lock(&chg->typec_lock); if (chg->typec_port && !chg->pr_swap_in_progress) smblib_force_dr_mode(chg, TYPEC_PORT_DRP); mutex_unlock(&chg->typec_lock); if (chg->lpd_stage == LPD_STAGE_FLOAT_CANCEL) schedule_delayed_work(&chg->lpd_detach_work, msecs_to_jiffies(1000)); Loading Loading
drivers/power/supply/qcom/qpnp-smb5.c +7 −3 Original line number Diff line number Diff line Loading @@ -2119,14 +2119,18 @@ static int smb5_configure_typec(struct smb_charger *chg) return rc; } val = EN_TRY_SNK_BIT; /* PMI632 doesn't support try snk */ if (chg->chg_param.smb_version == PMI632_SUBTYPE) val = 0; /* enable try.snk and clear force sink for DRP mode */ rc = smblib_masked_write(chg, TYPE_C_MODE_CFG_REG, EN_TRY_SNK_BIT | EN_SNK_ONLY_BIT, EN_TRY_SNK_BIT); val); if (rc < 0) { dev_err(chg->dev, "Couldn't configure TYPE_C_MODE_CFG_REG rc=%d\n", rc); "Couldn't configure TYPE_C_MODE_CFG_REG rc=%d\n", rc); return rc; } chg->typec_try_mode |= EN_TRY_SNK_BIT; Loading
drivers/power/supply/qcom/smb5-lib.c +27 −15 Original line number Diff line number Diff line Loading @@ -5877,23 +5877,26 @@ static int typec_partner_register(struct smb_charger *chg) { int typec_mode, rc = 0; if (!chg->typec_port) return 0; mutex_lock(&chg->typec_lock); if (chg->typec_partner && chg->pr_swap_in_progress) return 0; if (!chg->typec_port || chg->pr_swap_in_progress) goto unlock; if (!chg->typec_partner) { if (chg->sink_src_mode == AUDIO_ACCESS_MODE) chg->typec_partner_desc.accessory = TYPEC_ACCESSORY_AUDIO; chg->typec_partner_desc.accessory = TYPEC_ACCESSORY_AUDIO; else chg->typec_partner_desc.accessory = TYPEC_ACCESSORY_NONE; chg->typec_partner_desc.accessory = TYPEC_ACCESSORY_NONE; chg->typec_partner = typec_register_partner(chg->typec_port, &chg->typec_partner_desc); if (IS_ERR(chg->typec_partner)) { rc = PTR_ERR(chg->typec_partner); pr_err("failed to register typec_partner rc=%d\n", rc); return rc; goto unlock; } } typec_mode = smblib_get_prop_typec_mode(chg); Loading @@ -5907,16 +5910,22 @@ static int typec_partner_register(struct smb_charger *chg) typec_set_pwr_role(chg->typec_port, TYPEC_SOURCE); } unlock: mutex_unlock(&chg->typec_lock); return rc; } static void typec_partner_unregister(struct smb_charger *chg) { mutex_lock(&chg->typec_lock); if (chg->typec_partner && !chg->pr_swap_in_progress) { smblib_dbg(chg, PR_MISC, "Un-registering typeC partner\n"); typec_unregister_partner(chg->typec_partner); chg->typec_partner = NULL; } mutex_unlock(&chg->typec_lock); } static const char * const dr_mode_text[] = { Loading Loading @@ -6455,10 +6464,13 @@ irqreturn_t typec_attach_detach_irq_handler(int irq, void *data) * swap is not in progress, to ensure forced sink or src * mode configuration is reset properly. */ mutex_lock(&chg->typec_lock); if (chg->typec_port && !chg->pr_swap_in_progress) smblib_force_dr_mode(chg, TYPEC_PORT_DRP); mutex_unlock(&chg->typec_lock); if (chg->lpd_stage == LPD_STAGE_FLOAT_CANCEL) schedule_delayed_work(&chg->lpd_detach_work, msecs_to_jiffies(1000)); Loading