summaryrefslogtreecommitdiff
path: root/common/usb_common.c
diff options
context:
space:
mode:
authorParth Malkan <parthmalkan@google.com>2021-08-10 21:54:59 +0000
committerCommit Bot <commit-bot@chromium.org>2021-09-24 22:54:51 +0000
commit06d89b033065d9c96f4a6e53129b22b912fae224 (patch)
tree34c7038c6fe35b915db34d42aa7112be5a5e095f /common/usb_common.c
parentd4938b281fede972db577180efb791a47c47140b (diff)
downloadchrome-ec-06d89b033065d9c96f4a6e53129b22b912fae224.tar.gz
SSFC: Framework to support two charger sources
Many platforms have requirements to support more than one charge source (eg. pirika). It can't be supported by just enabling two different CONFIGS as that can lead to conflicts. Eg.USD_PD_VBUS_DETECT_TCPC vs USB_PD_VBUS_DETECT_DISCHARGE. This change provides a framework that supports two different charger sources in the same build. Please see the CL for relevant logs. BRANCH=None BUG=b:194375840 TEST=make -j buildall Signed-off-by: Parth Malkan <parthmalkan@google.com> Change-Id: I309cc5930233983e615d90a4290fc749abf7aa2d Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3088232 Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'common/usb_common.c')
-rw-r--r--common/usb_common.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/common/usb_common.c b/common/usb_common.c
index 2515caf287..786bd118cf 100644
--- a/common/usb_common.c
+++ b/common/usb_common.c
@@ -25,6 +25,7 @@
#include "usb_mux.h"
#include "usb_pd.h"
#include "usb_pd_dpm.h"
+#include "usb_pd_flags.h"
#include "usb_pd_tcpm.h"
#include "usbc_ocp.h"
#include "usbc_ppc.h"
@@ -851,12 +852,17 @@ void pd_set_vbus_discharge(int port, int enable)
mutex_lock(&discharge_lock[port]);
enable &= !board_vbus_source_enabled(port);
- if (IS_ENABLED(CONFIG_USB_PD_DISCHARGE_GPIO))
+ if (get_usb_pd_discharge() == USB_PD_DISCHARGE_GPIO) {
gpio_discharge_vbus(port, enable);
- else if (IS_ENABLED(CONFIG_USB_PD_DISCHARGE_TCPC))
+ } else if (get_usb_pd_discharge() == USB_PD_DISCHARGE_TCPC) {
+#ifdef CONFIG_USB_PD_DISCHARGE_PPC
tcpc_discharge_vbus(port, enable);
- else if (IS_ENABLED(CONFIG_USB_PD_DISCHARGE_PPC))
+#endif
+ } else if (get_usb_pd_discharge() == USB_PD_DISCHARGE_PPC) {
+#ifdef CONFIG_USB_PD_DISCHARGE_PPC
ppc_discharge_vbus(port, enable);
+#endif
+ }
mutex_unlock(&discharge_lock[port]);
}
@@ -884,6 +890,10 @@ void pd_deferred_resume(int port)
}
#endif /* CONFIG_USB_PD_TCPM_TCPCI */
+__overridable int pd_snk_is_vbus_provided(int port)
+{
+ return EC_SUCCESS;
+}
/*
* Check the specified Vbus level
@@ -893,8 +903,10 @@ void pd_deferred_resume(int port)
*/
__overridable bool pd_check_vbus_level(int port, enum vbus_level level)
{
- if (IS_ENABLED(CONFIG_USB_PD_VBUS_DETECT_TCPC))
+ if (IS_ENABLED(CONFIG_USB_PD_VBUS_DETECT_TCPC) &&
+ (get_usb_pd_vbus_detect() == USB_PD_VBUS_DETECT_TCPC)) {
return tcpm_check_vbus_level(port, level);
+ }
else if (level == VBUS_PRESENT)
return pd_snk_is_vbus_provided(port);
else