summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--board/fruitpie/usb_pd_config.h14
-rw-r--r--board/plankton/usb_pd_config.h14
-rw-r--r--board/ryu/usb_pd_config.h14
-rw-r--r--board/samus_pd/usb_pd_config.h19
-rw-r--r--common/usb_pd_protocol.c4
5 files changed, 65 insertions, 0 deletions
diff --git a/board/fruitpie/usb_pd_config.h b/board/fruitpie/usb_pd_config.h
index 759ca21212..acf0f6f6ca 100644
--- a/board/fruitpie/usb_pd_config.h
+++ b/board/fruitpie/usb_pd_config.h
@@ -132,6 +132,20 @@ static inline void pd_set_host_mode(int port, int enable)
gpio_set_level(GPIO_CC_HOST, enable);
}
+/**
+ * Initialize various GPIOs and interfaces to safe state at start of pd_task.
+ *
+ * These include:
+ * VCONNs disabled.
+ *
+ * @param port USB-C port number
+ */
+static inline void pd_config_init(int port)
+{
+ gpio_set_level(GPIO_VCONN1_EN, 0);
+ gpio_set_level(GPIO_VCONN2_EN, 0);
+}
+
static inline int pd_adc_read(int port, int cc)
{
if (cc == 0)
diff --git a/board/plankton/usb_pd_config.h b/board/plankton/usb_pd_config.h
index 6fd5b9c48a..c1fefbcf7e 100644
--- a/board/plankton/usb_pd_config.h
+++ b/board/plankton/usb_pd_config.h
@@ -129,6 +129,20 @@ static inline void pd_set_host_mode(int port, int enable)
board_pd_set_host_mode(enable);
}
+/**
+ * Initialize various GPIOs and interfaces to safe state at start of pd_task.
+ *
+ * These include:
+ * VCONNs disabled.
+ *
+ * @param port USB-C port number
+ */
+static inline void pd_config_init(int port)
+{
+ gpio_set_level(GPIO_USB_CC1_VCONN_EN_L, 1);
+ gpio_set_level(GPIO_USB_CC2_VCONN_EN_L, 1);
+}
+
static inline int pd_adc_read(int port, int cc)
{
if (board_pd_fake_disconnected())
diff --git a/board/ryu/usb_pd_config.h b/board/ryu/usb_pd_config.h
index d5992e3335..f64f27b882 100644
--- a/board/ryu/usb_pd_config.h
+++ b/board/ryu/usb_pd_config.h
@@ -147,6 +147,20 @@ static inline void pd_set_host_mode(int port, int enable)
}
+/**
+ * Initialize various GPIOs and interfaces to safe state at start of pd_task.
+ *
+ * These include:
+ * VCONNs disabled.
+ *
+ * @param port USB-C port number
+ */
+static inline void pd_config_init(int port)
+{
+ gpio_set_level(GPIO_USBC_VCONN1_EN_L, 1);
+ gpio_set_level(GPIO_USBC_VCONN2_EN_L, 1);
+}
+
static inline int pd_adc_read(int port, int cc)
{
if (cc == 0)
diff --git a/board/samus_pd/usb_pd_config.h b/board/samus_pd/usb_pd_config.h
index a2e80aaabd..3fede784e2 100644
--- a/board/samus_pd/usb_pd_config.h
+++ b/board/samus_pd/usb_pd_config.h
@@ -224,6 +224,25 @@ static inline void pd_set_host_mode(int port, int enable)
}
}
+/**
+ * Initialize various GPIOs and interfaces to safe state at start of pd_task.
+ *
+ * These include:
+ * VCONNs disabled.
+ *
+ * @param port USB-C port number
+ */
+static inline void pd_config_init(int port)
+{
+ if (port == 0) {
+ gpio_set_level(GPIO_USB_C0_CC1_VCONN1_EN_L, 1);
+ gpio_set_level(GPIO_USB_C0_CC2_VCONN1_EN_L, 1);
+ } else {
+ gpio_set_level(GPIO_USB_C1_CC1_VCONN1_EN_L, 1);
+ gpio_set_level(GPIO_USB_C1_CC2_VCONN1_EN_L, 1);
+ }
+}
+
static inline int pd_adc_read(int port, int cc)
{
if (port == 0)
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c
index 18a217528b..40126aa8fe 100644
--- a/common/usb_pd_protocol.c
+++ b/common/usb_pd_protocol.c
@@ -1775,6 +1775,10 @@ void pd_task(void)
/* Initialize TX pins and put them in Hi-Z */
pd_tx_init();
+#if defined(CONFIG_USB_PD_DUAL_ROLE) && defined(CONFIG_USB_PD_ALT_MODE_DFP)
+ pd_config_init(port);
+#endif
+
/* Initialize PD protocol state variables for each port. */
pd[port].power_role = PD_ROLE_DEFAULT;
pd_set_data_role(port, PD_ROLE_DEFAULT);