From f1eafbf79fdba1ef395fca407e934130dd6745a7 Mon Sep 17 00:00:00 2001 From: mahj8 Date: Wed, 12 Jan 2022 16:49:04 +0800 Subject: [PATCH] charging: report usb present when pd hard reset when in COM, pd will trigger hard reset to let source send source_cap. But pd hard reset will closed vbus and re-enable vbus by adaptor, so usb present will return 0 to let COM shutdown. But typec mode is always on, so use typec mode to workaround it. Change-Id: I7f39cfd81e6cf2607103579d3cab58102aaabc40 Signed-off-by: mahj8 Reviewed-on: https://gerrit.mot.com/2168221 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Lu Chai Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- .../mmi_discrete_charger/mmi_discrete_charger_core.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c index 9a245c2674e3..fbfec12418f5 100644 --- a/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c +++ b/drivers/power/mmi_discrete_charger/mmi_discrete_charger_core.c @@ -1365,6 +1365,15 @@ static int mmi_discrete_usb_get_prop(struct power_supply *psy, switch (psp) { case POWER_SUPPLY_PROP_PRESENT: + /*when in COM, pd will trigger hard reset to let source send source_cap. + *but pd hard reset will closed vbus and re-enable vbus by adaptor, so usb + *present will return 0 to let COM shutdown. Typec mode is always on.*/ + if (chip->typec_mode == MMI_POWER_SUPPLY_TYPEC_SOURCE_DEFAULT + || chip->typec_mode == MMI_POWER_SUPPLY_TYPEC_SOURCE_MEDIUM + || chip->typec_mode == MMI_POWER_SUPPLY_TYPEC_SOURCE_HIGH) { + val->intval = 1; + break; + } rc = get_prop_usb_present(chip, val); break; case POWER_SUPPLY_PROP_ONLINE: @@ -2069,7 +2078,6 @@ int mmi_discrete_config_pd_active(struct mmi_discrete_charger *chip, int val) static int mmi_discrete_usb_plugout(struct mmi_discrete_charger * chip) { chip->real_charger_type = POWER_SUPPLY_TYPE_UNKNOWN; - chip->typec_mode = MMI_POWER_SUPPLY_TYPEC_NONE; chip->pd_active = MMI_POWER_SUPPLY_PD_INACTIVE; if (chip->use_extcon) mmi_notify_device_mode(chip, false);