summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--common/usb_pd_protocol.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c
index 7952f12589..c2735863f1 100644
--- a/common/usb_pd_protocol.c
+++ b/common/usb_pd_protocol.c
@@ -5,6 +5,7 @@
#include "adc.h"
#include "board.h"
+#include "chipset.h"
#include "common.h"
#include "console.h"
#include "crc.h"
@@ -1499,6 +1500,19 @@ static void dual_role_force_sink(void)
CPRINTS("chipset -> S5, force dual-role port to sink");
}
DECLARE_HOOK(HOOK_CHIPSET_SHUTDOWN, dual_role_force_sink, HOOK_PRIO_DEFAULT);
+
+#ifdef HAS_TASK_CHIPSET
+static void dual_role_init(void)
+{
+ if (chipset_in_state(CHIPSET_STATE_ANY_OFF))
+ dual_role_force_sink();
+ else if (chipset_in_state(CHIPSET_STATE_SUSPEND))
+ dual_role_off();
+ else /* CHIPSET_STATE_ON */
+ dual_role_on();
+}
+DECLARE_HOOK(HOOK_INIT, dual_role_init, HOOK_PRIO_DEFAULT);
+#endif /* HAS_TASK_CHIPSET */
#endif /* CONFIG_USB_PD_DUAL_ROLE */
#ifdef CONFIG_COMMON_RUNTIME