diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2017-04-16 21:49:19 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-04-16 21:49:18 -0700 |
| commit | 0293b8a7d07a2ef84bd227b81f20b966af900c51 (patch) | |
| tree | af6aa21ba05218eb655a76db702ad422bda5f6cb | |
| parent | a16fc7b9707db3b9ffeedddab97d2ebd7c5a92be (diff) | |
| parent | dabce32c2471a9557ca4fb24b6eec4615ff6b10f (diff) | |
Merge "qcom: smb-lib: rerun APSD on insertion for micro USB mode"
| -rw-r--r-- | drivers/power/supply/qcom/smb-lib.c | 13 | ||||
| -rw-r--r-- | drivers/power/supply/qcom/smb-lib.h | 1 |
2 files changed, 14 insertions, 0 deletions
diff --git a/drivers/power/supply/qcom/smb-lib.c b/drivers/power/supply/qcom/smb-lib.c index 42833a2ebf06..e4ab41b1f16a 100644 --- a/drivers/power/supply/qcom/smb-lib.c +++ b/drivers/power/supply/qcom/smb-lib.c @@ -685,6 +685,7 @@ static void smblib_uusb_removal(struct smb_charger *chg) chg->voltage_max_uv = MICRO_5V; chg->usb_icl_delta_ua = 0; chg->pulse_cnt = 0; + chg->uusb_apsd_rerun_done = false; /* clear USB ICL vote for USB_PSY_VOTER */ rc = vote(chg->usb_icl_votable, USB_PSY_VOTER, false, 0); @@ -752,6 +753,7 @@ int smblib_rerun_apsd_if_required(struct smb_charger *chg) rc); } + chg->uusb_apsd_rerun_done = true; smblib_rerun_apsd(chg); return 0; @@ -3482,6 +3484,17 @@ irqreturn_t smblib_handle_usb_source_change(int irq, void *data) } smblib_dbg(chg, PR_REGISTER, "APSD_STATUS = 0x%02x\n", stat); + if (chg->micro_usb_mode && (stat & APSD_DTC_STATUS_DONE_BIT) + && !chg->uusb_apsd_rerun_done) { + /* + * Force re-run APSD to handle slow insertion related + * charger-mis-detection. + */ + chg->uusb_apsd_rerun_done = true; + smblib_rerun_apsd(chg); + return IRQ_HANDLED; + } + smblib_handle_apsd_done(chg, (bool)(stat & APSD_DTC_STATUS_DONE_BIT)); diff --git a/drivers/power/supply/qcom/smb-lib.h b/drivers/power/supply/qcom/smb-lib.h index 49b9d3da783c..4b277c4282cf 100644 --- a/drivers/power/supply/qcom/smb-lib.h +++ b/drivers/power/supply/qcom/smb-lib.h @@ -312,6 +312,7 @@ struct smb_charger { int vconn_attempts; int default_icl_ua; int otg_cl_ua; + bool uusb_apsd_rerun_done; /* workaround flag */ u32 wa_flags; |
