Loading drivers/power/supply/qcom/smb5-lib.c +37 −0 Original line number Diff line number Diff line Loading @@ -6787,6 +6787,33 @@ int smblib_force_dr_mode(struct smb_charger *chg, int mode) return rc; } static int smblib_role_switch_failure(struct smb_charger *chg, int mode) { int rc = 0; union power_supply_propval pval = {0, }; if (!chg->use_extcon) return 0; rc = smblib_get_prop_usb_present(chg, &pval); if (rc < 0) { pr_err("Couldn't get usb presence status rc=%d\n", rc); return rc; } if (pval.intval) { if (mode == DUAL_ROLE_PROP_MODE_DFP) smblib_notify_device_mode(chg, true); } else { if (mode == DUAL_ROLE_PROP_MODE_UFP) smblib_notify_usb_host(chg, true); } smblib_dbg(chg, PR_MISC, "Role reversal is failed for %s, notify usb", mode ? "DFP" : "UFP"); return rc; } static void smblib_dual_role_check_work(struct work_struct *work) { struct smb_charger *chg = container_of(work, struct smb_charger, Loading @@ -6804,6 +6831,11 @@ static void smblib_dual_role_check_work(struct work_struct *work) DUAL_ROLE_PROP_MODE_NONE); if (rc < 0) pr_err("Failed to set DRP mode, rc=%d\n", rc); rc = smblib_role_switch_failure(chg, DUAL_ROLE_PROP_MODE_UFP); if (rc < 0) pr_err("Failed to role switch rc=%d\n", rc); } chg->pr_swap_in_progress = false; break; Loading @@ -6816,6 +6848,11 @@ static void smblib_dual_role_check_work(struct work_struct *work) DUAL_ROLE_PROP_MODE_NONE); if (rc < 0) pr_err("Failed to set DRP mode, rc=%d\n", rc); rc = smblib_role_switch_failure(chg, DUAL_ROLE_PROP_MODE_DFP); if (rc < 0) pr_err("Failed to role switch rc=%d\n", rc); } chg->pr_swap_in_progress = false; break; Loading Loading
drivers/power/supply/qcom/smb5-lib.c +37 −0 Original line number Diff line number Diff line Loading @@ -6787,6 +6787,33 @@ int smblib_force_dr_mode(struct smb_charger *chg, int mode) return rc; } static int smblib_role_switch_failure(struct smb_charger *chg, int mode) { int rc = 0; union power_supply_propval pval = {0, }; if (!chg->use_extcon) return 0; rc = smblib_get_prop_usb_present(chg, &pval); if (rc < 0) { pr_err("Couldn't get usb presence status rc=%d\n", rc); return rc; } if (pval.intval) { if (mode == DUAL_ROLE_PROP_MODE_DFP) smblib_notify_device_mode(chg, true); } else { if (mode == DUAL_ROLE_PROP_MODE_UFP) smblib_notify_usb_host(chg, true); } smblib_dbg(chg, PR_MISC, "Role reversal is failed for %s, notify usb", mode ? "DFP" : "UFP"); return rc; } static void smblib_dual_role_check_work(struct work_struct *work) { struct smb_charger *chg = container_of(work, struct smb_charger, Loading @@ -6804,6 +6831,11 @@ static void smblib_dual_role_check_work(struct work_struct *work) DUAL_ROLE_PROP_MODE_NONE); if (rc < 0) pr_err("Failed to set DRP mode, rc=%d\n", rc); rc = smblib_role_switch_failure(chg, DUAL_ROLE_PROP_MODE_UFP); if (rc < 0) pr_err("Failed to role switch rc=%d\n", rc); } chg->pr_swap_in_progress = false; break; Loading @@ -6816,6 +6848,11 @@ static void smblib_dual_role_check_work(struct work_struct *work) DUAL_ROLE_PROP_MODE_NONE); if (rc < 0) pr_err("Failed to set DRP mode, rc=%d\n", rc); rc = smblib_role_switch_failure(chg, DUAL_ROLE_PROP_MODE_DFP); if (rc < 0) pr_err("Failed to role switch rc=%d\n", rc); } chg->pr_swap_in_progress = false; break; Loading