summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-11-15 04:07:28 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2016-11-15 04:07:28 -0800
commit1f68dcac66d8a66216c960748191d34b5c528b50 (patch)
treeebf7307e8455bd719f17d07ea98fb68b02d44c62
parent59c99dc4e4889754a10549178e2f00d8110442bc (diff)
parent8947aae10bf1b8738bb53852887ee1b233429a45 (diff)
Merge "qcom-charger: WA for cc2 removal with medium and high rd"
-rw-r--r--drivers/power/qcom-charger/smb-lib.c22
-rw-r--r--drivers/power/qcom-charger/smb-lib.h1
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,
};