From ab148d38d5fe74b5e2984f192c14b186a1a0feff Mon Sep 17 00:00:00 2001 From: Yonghua Yan Date: Thu, 13 Jun 2019 18:07:10 +0800 Subject: [PATCH] power: charger presence bases on usb and pc_port online Typec mode is not a sufficient condition for USB charger presence detection, in the cases that typec mode is not source type. Here takes audio adapter with charger port support for example. It is reasonable to keep consistent with QC SMB charger driver charger presence report. Change-Id: I43b795d142aa75cbdd372b288d64c83b85075f3a Signed-off-by: Yonghua Yan Reviewed-on: https://gerrit.mot.com/1371201 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Huosheng Liao Reviewed-by: Kenneth Kessler Submit-Approved: Jira Key --- .../qpnp-smbcharger-mmi/qpnp-smbcharger-mmi.c | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/power/qpnp-smbcharger-mmi/qpnp-smbcharger-mmi.c b/drivers/power/qpnp-smbcharger-mmi/qpnp-smbcharger-mmi.c index 599499948803..f3f811865740 100644 --- a/drivers/power/qpnp-smbcharger-mmi/qpnp-smbcharger-mmi.c +++ b/drivers/power/qpnp-smbcharger-mmi/qpnp-smbcharger-mmi.c @@ -1516,27 +1516,27 @@ static int get_prop_charger_present(struct smb_mmi_charger *chg, union power_supply_propval *val) { int rc = -EINVAL; + bool chg_online = false; val->intval = 0; - if (chg->usb_psy) + if (chg->usb_psy) { rc = power_supply_get_property(chg->usb_psy, - POWER_SUPPLY_PROP_TYPEC_MODE, val); - if (rc < 0) { - mmi_err(chg, "Couldn't read TypeC Mode rc=%d\n", rc); - return rc; + POWER_SUPPLY_PROP_ONLINE, val); + if (rc < 0) + mmi_err(chg, "Couldn't read USB online rc=%d\n", rc); } + chg_online = !!val->intval; - switch (val->intval) { - case POWER_SUPPLY_TYPEC_SOURCE_DEFAULT: - case POWER_SUPPLY_TYPEC_SOURCE_MEDIUM: - case POWER_SUPPLY_TYPEC_SOURCE_HIGH: - val->intval = 1; - break; - default: - val->intval = 0; - break; + if (chg->pc_port_psy) { + rc = power_supply_get_property(chg->pc_port_psy, + POWER_SUPPLY_PROP_ONLINE, val); + if (rc < 0) + mmi_err(chg, "Couldn't read PC online rc=%d\n", rc); } + chg_online = chg_online || !!val->intval; + + val->intval = chg_online; return rc; }