diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2016-11-15 04:07:28 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-11-15 04:07:28 -0800 |
commit | 1f68dcac66d8a66216c960748191d34b5c528b50 (patch) | |
tree | ebf7307e8455bd719f17d07ea98fb68b02d44c62 | |
parent | 59c99dc4e4889754a10549178e2f00d8110442bc (diff) | |
parent | 8947aae10bf1b8738bb53852887ee1b233429a45 (diff) |
Merge "qcom-charger: WA for cc2 removal with medium and high rd"
-rw-r--r-- | drivers/power/qcom-charger/smb-lib.c | 22 | ||||
-rw-r--r-- | drivers/power/qcom-charger/smb-lib.h | 1 |
2 files changed, 23 insertions, 0 deletions
diff --git a/drivers/power/qcom-charger/smb-lib.c b/drivers/power/qcom-charger/smb-lib.c index 7d972103135d..9a697e2b81b9 100644 --- a/drivers/power/qcom-charger/smb-lib.c +++ b/drivers/power/qcom-charger/smb-lib.c @@ -2195,6 +2195,10 @@ static int smblib_cc2_sink_removal_enter(struct smb_charger *chg) chg->cc2_sink_detach_flag = CC2_SINK_STD; schedule_work(&chg->rdstd_cc2_detach_work); break; + case POWER_SUPPLY_TYPEC_SOURCE_MEDIUM: + case POWER_SUPPLY_TYPEC_SOURCE_HIGH: + chg->cc2_sink_detach_flag = CC2_SINK_MEDIUM_HIGH; + break; default: break; } @@ -2831,6 +2835,24 @@ static void smblib_handle_typec_debounce_done(struct smb_charger *chg, if (rc < 0) smblib_err(chg, "Couldn't get prop typec mode rc=%d\n", rc); + /* + * HW BUG - after cable is removed, medium or high rd reading + * falls to std. Use it for signal of typec cc detachment in + * software WA. + */ + if (chg->cc2_sink_detach_flag == CC2_SINK_MEDIUM_HIGH + && pval.intval == POWER_SUPPLY_TYPEC_SOURCE_DEFAULT) { + + chg->cc2_sink_detach_flag = CC2_SINK_WA_DONE; + + rc = smblib_masked_write(chg, + TYPE_C_INTRPT_ENB_SOFTWARE_CTRL_REG, + EXIT_SNK_BASED_ON_CC_BIT, 0); + if (rc < 0) + smblib_err(chg, "Couldn't get prop typec mode rc=%d\n", + rc); + } + smblib_dbg(chg, PR_INTERRUPT, "IRQ: debounce-done %s; Type-C %s detected\n", rising ? "rising" : "falling", smblib_typec_mode_name[pval.intval]); diff --git a/drivers/power/qcom-charger/smb-lib.h b/drivers/power/qcom-charger/smb-lib.h index 723cd39b3c9f..000fd2654c95 100644 --- a/drivers/power/qcom-charger/smb-lib.h +++ b/drivers/power/qcom-charger/smb-lib.h @@ -57,6 +57,7 @@ enum smb_mode { enum cc2_sink_type { CC2_SINK_NONE = 0, CC2_SINK_STD, + CC2_SINK_MEDIUM_HIGH, CC2_SINK_WA_DONE, }; |