diff --git a/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c b/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c index f8695f5a58f4..b8366783c4b1 100644 --- a/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c +++ b/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c @@ -185,6 +185,7 @@ struct bq2589x { /*mmi qc3p*/ bool mmi_qc3p_rerun_done; + bool mmi_qc3p_wa; int mmi_qc3p_power; struct bq2589x_iio iio; @@ -1573,6 +1574,7 @@ static int bq2589x_rerun_apsd_if_required(struct bq2589x *bq) bq2589x_force_dpdm(bq); + bq->pulse_cnt = 0; bq->typec_apsd_rerun_done = true; dev_info(bq->dev,"rerun apsd done\n"); @@ -1821,6 +1823,7 @@ static int bq2589x_detected_qc3p_hvdcp(struct bq2589x *bq, int *charger_type) dev_err(bq->dev, "qc3p voltage is invalid, rerun qc3p detect\n"); if (!bq->mmi_qc3p_rerun_done) { bq->mmi_qc3p_rerun_done = true; + bq->mmi_qc3p_wa = true; dp_val = 0x0<mmi_qc3p_rerun_done) { bq->mmi_qc3p_rerun_done = true; + bq->mmi_qc3p_wa = true; dp_val = 0x0<mmi_qc3p_wa) { + if (bq->vbus_type != BQ2589X_VBUS_USB_DCP) { + pr_err("BQ2589x charger type fix to DCP to workaroud BC1.2 rerun fail \n"); + bq->vbus_type = BQ2589X_VBUS_USB_DCP; + } + } +#endif + switch (bq->vbus_type) { case BQ2589X_VBUS_MAXC: dev_info(bq->dev, "%s:HVDCP adapter plugged in\n", __func__); @@ -2253,6 +2266,7 @@ static void bq2589x_adapter_out_func(struct bq2589x *bq) #endif #endif bq->pulse_cnt = 0; + bq->mmi_qc3p_wa = false; bq->mmi_qc3p_rerun_done = false; bq->typec_apsd_rerun_done = false; bq->chg_dev->noti.apsd_done = false;