summaryrefslogtreecommitdiff
path: root/baseboard/honeybuns
diff options
context:
space:
mode:
authorScott Collyer <scollyer@google.com>2021-06-05 22:59:05 -0700
committerCommit Bot <commit-bot@chromium.org>2021-06-16 06:56:56 +0000
commitb1af8c3689ecc265092f034d6ce8ee715d2614d8 (patch)
tree09cc72a66b8b8301e8af7b8fda16aa23e2387c80 /baseboard/honeybuns
parentadb8ca2325f4768251d3e6584ecd7b3841419571 (diff)
downloadchrome-ec-b1af8c3689ecc265092f034d6ce8ee715d2614d8.tar.gz
gingerbread: VBUS on/off and detect for port C1
This CL adds gingerbread specific functions to control and detect VBUS for port C1. This port does not have a PPC, but port C0 does which means PPC related configs are defined. A NULL PPC driver is added so any calls into PPC functions from common code will be correctly handled by the check for NULL functions. The functions which are needed are related to controlling and dectecting VBUS presence. BUG=b:159330563 BRANCH=quiche TEST=verfied that C1 attaches as a SRC/DFP [10.367330 C1: PE_SRC_Ready] [10.368772 C1: Attempting to enter DP mode] [10.374422 C1: PE_VDM_Request_DPM] [10.401563 C1: PE_SRC_Ready] [10.408082 C1: PE_VDM_Request_DPM] [10.435540 C1: PE_SRC_Ready] [10.436511 pin_mode: 4, mf: 0, mux: 2] [10.442645 C1: PE_VDM_Request_DPM] [10.470346 C1: Entered DP mode] [10.470480 C1: PE_SRC_Ready] > > pd 1 state Port C1 CC2, Enable - Role: SRC-DFP-VC TC State: Attached.SRC, Signed-off-by: Scott Collyer <scollyer@google.com> Change-Id: I3027b2904592063294f0258da5e153db15ae0d6e Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2949953 Commit-Queue: Scott Collyer <scollyer@chromium.org> Tested-by: Scott Collyer <scollyer@chromium.org> Reviewed-by: Diana Z <dzigterman@chromium.org>
Diffstat (limited to 'baseboard/honeybuns')
-rw-r--r--baseboard/honeybuns/baseboard.h25
-rw-r--r--baseboard/honeybuns/usb_pd_policy.c29
-rw-r--r--baseboard/honeybuns/usbc_support.c36
3 files changed, 81 insertions, 9 deletions
diff --git a/baseboard/honeybuns/baseboard.h b/baseboard/honeybuns/baseboard.h
index 137f6b5df4..9608e4ebd3 100644
--- a/baseboard/honeybuns/baseboard.h
+++ b/baseboard/honeybuns/baseboard.h
@@ -288,6 +288,31 @@ void baseboard_usbc_usb3_enable_interrupts(int enable);
*/
void baseboard_usbc_usb3_irq(void);
+/**
+ * Determine if VBUS is present or not.
+ *
+ * @param port: The Type-C port number.
+ * @return 1 if VBUS is present, 0 if not.
+ */
+int c1_ps8805_is_vbus_present(int port);
+
+/**
+ * Is the port sourcing Vbus?
+ *
+ * @param port: The Type-C port number.
+ * @return 1 if sourcing Vbus, 0 if not.
+ */
+int c1_ps8805_is_sourcing_vbus(int port);
+
+/**
+ * Turn on/off VBUS for port C1
+ *
+ * @param port: The Type-C port number.
+ * @param enable: 1: Turn on VBUS, 0: turn off VBUS.
+ * @return EC_SUCCESS on success, error otherwise.
+ */
+int c1_ps8805_vbus_source_enable(int port, int enable);
+
#endif /* !__ASSEMBLER__ */
#endif /* __CROS_EC_BASEBOARD_H */
diff --git a/baseboard/honeybuns/usb_pd_policy.c b/baseboard/honeybuns/usb_pd_policy.c
index 869f334bcd..07a284a1af 100644
--- a/baseboard/honeybuns/usb_pd_policy.c
+++ b/baseboard/honeybuns/usb_pd_policy.c
@@ -163,10 +163,15 @@ void pd_power_supply_reset(int port)
if (port < 0 || port >= CONFIG_USB_PD_PORT_MAX_COUNT)
return;
- prev_en = ppc_is_sourcing_vbus(port);
-
- /* Disable VBUS via PPC. */
- ppc_vbus_source_enable(port, 0);
+ if (IS_ENABLED(BOARD_C1_NO_PPC) && port) {
+ prev_en = c1_ps8805_is_sourcing_vbus(port);
+ /* Disable VBUS via PPC. */
+ c1_ps8805_vbus_source_enable(port, 0);
+ } else {
+ prev_en = ppc_is_sourcing_vbus(port);
+ /* Disable VBUS via PPC. */
+ ppc_vbus_source_enable(port, 0);
+ }
/* Enable discharge if we were previously sourcing 5V */
if (prev_en)
@@ -202,7 +207,11 @@ int pd_set_power_supply_ready(int port)
* left enabled as there is a switch (either PPC or discrete) to turn
* VBUS on/off on the wire.
*/
- rv = ppc_vbus_source_enable(port, 1);
+ if (IS_ENABLED(BOARD_C1_NO_PPC) && port)
+ rv = c1_ps8805_vbus_source_enable(port, 1);
+ else
+ rv = ppc_vbus_source_enable(port, 1);
+
if (rv)
return rv;
@@ -289,12 +298,18 @@ void pd_transition_voltage(int idx)
int pd_snk_is_vbus_provided(int port)
{
- return ppc_is_vbus_present(port);
+ if (IS_ENABLED(BOARD_C1_NO_PPC) && port)
+ return c1_ps8805_is_vbus_present(port);
+ else
+ return ppc_is_vbus_present(port);
}
int board_vbus_source_enabled(int port)
{
- return ppc_is_sourcing_vbus(port);
+ if (IS_ENABLED(BOARD_C1_NO_PPC) && port)
+ return c1_ps8805_is_sourcing_vbus(port);
+ else
+ return ppc_is_sourcing_vbus(port);
}
void pd_set_input_current_limit(int port, uint32_t max_ma,
diff --git a/baseboard/honeybuns/usbc_support.c b/baseboard/honeybuns/usbc_support.c
index 80915048ab..efad5704e7 100644
--- a/baseboard/honeybuns/usbc_support.c
+++ b/baseboard/honeybuns/usbc_support.c
@@ -7,6 +7,8 @@
#include "common.h"
#include "console.h"
+#include "driver/tcpm/tcpci.h"
+#include "driver/tcpm/ps8xxx.h"
#include "sn5s330.h"
#include "hooks.h"
#include "i2c.h"
@@ -300,7 +302,36 @@ int baseboard_usbc_init(int port)
return rv;
}
-#if defined(GPIO_USBC_UF_ATTACHED_SRC) && defined(SECTION_IS_RW)
+#ifdef SECTION_IS_RW
+int c1_ps8805_is_vbus_present(int port)
+{
+ int vbus;
+
+ vbus = tcpm_check_vbus_level(port, VBUS_PRESENT);
+
+ return vbus;
+}
+
+int c1_ps8805_is_sourcing_vbus(int port)
+{
+ int rv;
+ int level;
+
+ rv = ps8805_gpio_get_level(port, PS8805_GPIO_1, &level);
+ if (rv)
+ return 0;
+
+ return level;
+}
+
+
+int c1_ps8805_vbus_source_enable(int port, int enable)
+{
+
+ return ps8805_gpio_set_level(port, PS8805_GPIO_1, enable);
+}
+
+#ifdef GPIO_USBC_UF_ATTACHED_SRC
static int ppc_ocp_count;
static void baseboard_usb3_manage_vbus(void)
@@ -438,5 +469,6 @@ void baseboard_usbc_usb3_irq(void)
hook_call_deferred(&baseboard_usbc_usb3_handle_interrupt_data, 0);
}
-#endif /* defined(GPIO_USBC_UF_ATTACHED_SRC) && defined(SECTION_IS_RW) */
+#endif /* defined(GPIO_USBC_UF_ATTACHED_SRC) */
+#endif /* defined(SECTION_IS_RW) */