summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaveh Jalali <caveh@google.com>2017-08-24 02:15:36 -0700
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2017-09-07 06:53:54 +0000
commit584cef71e3ad9afd29330a79474b2550805f1212 (patch)
tree91dfaa4942da0ac35392ca3b5ea36eae10589d59
parent638d48044f0e47d9cf808ea8efe24d0bf5022023 (diff)
downloadchrome-ec-584cef71e3ad9afd29330a79474b2550805f1212.tar.gz
anx3429: force chip reset on PD_RESUME
we need to properly restart the anx3429 after a firmware update. simply initializing the chip doesn't seem to get it to reload its firmware - at least not the portion of the chip that implements the firmware version register. so, we explicitly power down and reset the chip before reinitializing it to force it to run the new firmware. the chip also needs a 10ms "off" time so the reset is properly seen by the chip, so i did a light refactoring of the code paths that reset the anx3429. TEST=used 2 different firmware blobs and verified it switches between them during software sync. BRANCH=none BUG=b:35586895 (cherry picked from commit c1e5671e561c82c9532cb29b17fc7cf4061ab20a) Reviewed-on: https://chromium-review.googlesource.com/631976 Change-Id: I321b5bc365b477c9b8754417b01fd03921fc648b Signed-off-by: Caveh Jalali <caveh@google.com> Reviewed-on: https://chromium-review.googlesource.com/644771 Reviewed-by: Shawn N <shawnn@chromium.org>
-rw-r--r--board/eve/board.c26
-rw-r--r--board/nasher/board.c57
-rw-r--r--board/pyro/board.c40
-rw-r--r--board/reef/board.c40
-rw-r--r--board/sand/board.c40
-rw-r--r--board/snappy/board.c58
-rw-r--r--common/usb_pd_protocol.c15
-rw-r--r--driver/tcpm/anx74xx.c2
-rw-r--r--driver/tcpm/anx74xx.h14
9 files changed, 190 insertions, 102 deletions
diff --git a/board/eve/board.c b/board/eve/board.c
index b240bbbe8e..4cc75b2717 100644
--- a/board/eve/board.c
+++ b/board/eve/board.c
@@ -153,30 +153,38 @@ struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_COUNT] = {
},
};
-/* called from anx74xx_set_power_mode() */
+/**
+ * Power on (or off) a single TCPC.
+ * minimum on/off delays are included.
+ *
+ * @param port Port number of TCPC.
+ * @param mode 0: power off, 1: power on.
+ */
void board_set_tcpc_power_mode(int port, int mode)
{
switch (port) {
case 0:
if (mode) {
gpio_set_level(GPIO_USB_C0_TCPC_PWR, 1);
- msleep(10);
+ msleep(ANX74XX_PWR_H_RST_H_DELAY_MS);
gpio_set_level(GPIO_USB_C0_PD_RST_L, 1);
} else {
gpio_set_level(GPIO_USB_C0_PD_RST_L, 0);
- msleep(1);
+ msleep(ANX74XX_RST_L_PWR_L_DELAY_MS);
gpio_set_level(GPIO_USB_C0_TCPC_PWR, 0);
+ msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS);
}
break;
case 1:
if (mode) {
gpio_set_level(GPIO_USB_C1_TCPC_PWR, 1);
- msleep(10);
+ msleep(ANX74XX_PWR_H_RST_H_DELAY_MS);
gpio_set_level(GPIO_USB_C1_PD_RST_L, 1);
} else {
gpio_set_level(GPIO_USB_C1_PD_RST_L, 0);
- msleep(1);
+ msleep(ANX74XX_RST_L_PWR_L_DELAY_MS);
gpio_set_level(GPIO_USB_C1_TCPC_PWR, 0);
+ msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS);
}
break;
}
@@ -197,15 +205,15 @@ void board_reset_pd_mcu(void)
/* Assert reset */
gpio_set_level(GPIO_USB_C0_PD_RST_L, 0);
gpio_set_level(GPIO_USB_C1_PD_RST_L, 0);
- msleep(1);
+ msleep(ANX74XX_RST_L_PWR_L_DELAY_MS);
/* Disable power */
gpio_set_level(GPIO_USB_C0_TCPC_PWR, 0);
gpio_set_level(GPIO_USB_C1_TCPC_PWR, 0);
- msleep(10);
+ msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS);
/* Enable power */
gpio_set_level(GPIO_USB_C0_TCPC_PWR, 1);
gpio_set_level(GPIO_USB_C1_TCPC_PWR, 1);
- msleep(10);
+ msleep(ANX74XX_PWR_H_RST_H_DELAY_MS);
/* Deassert reset */
gpio_set_level(GPIO_USB_C0_PD_RST_L, 1);
gpio_set_level(GPIO_USB_C1_PD_RST_L, 1);
@@ -826,5 +834,3 @@ struct motion_sensor_t motion_sensors[] = {
},
};
const unsigned int motion_sensor_count = ARRAY_SIZE(motion_sensors);
-
-
diff --git a/board/nasher/board.c b/board/nasher/board.c
index fbedbf8e19..d3b8c275f0 100644
--- a/board/nasher/board.c
+++ b/board/nasher/board.c
@@ -62,6 +62,8 @@
#define IN_PGOOD_PP3300 POWER_SIGNAL_MASK(X86_PGOOD_PP3300)
#define IN_PGOOD_PP5000 POWER_SIGNAL_MASK(X86_PGOOD_PP5000)
+#define USB_PD_PORT_ANX74XX 0
+
static void tcpc_alert_event(enum gpio_signal signal)
{
if ((signal == GPIO_USB_C0_PD_INT_ODL) &&
@@ -269,43 +271,62 @@ struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_COUNT] = {
}
};
-/* called from anx74xx_set_power_mode() */
+/**
+ * Power on (or off) a single TCPC.
+ * minimum on/off delays are included.
+ *
+ * @param port Port number of TCPC.
+ * @param mode 0: power off, 1: power on.
+ */
void board_set_tcpc_power_mode(int port, int mode)
{
- if (port == 0) {
- gpio_set_level(GPIO_USB_C0_PD_RST_L, mode);
- msleep(mode ? 10 : 1);
- gpio_set_level(GPIO_EN_USB_TCPC_PWR, mode);
+ if (port != USB_PD_PORT_ANX74XX)
+ return;
+
+ switch (mode) {
+ case ANX74XX_NORMAL_MODE:
+ gpio_set_level(GPIO_EN_USB_TCPC_PWR, 1);
+ msleep(ANX74XX_PWR_H_RST_H_DELAY_MS);
+ gpio_set_level(GPIO_USB_C0_PD_RST_L, 1);
+ break;
+ case ANX74XX_STANDBY_MODE:
+ gpio_set_level(GPIO_USB_C0_PD_RST_L, 0);
+ msleep(ANX74XX_RST_L_PWR_L_DELAY_MS);
+ gpio_set_level(GPIO_EN_USB_TCPC_PWR, 0);
+ msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS);
+ break;
+ default:
+ break;
}
}
/**
- * Reset PD MCU -- currently only called from handle_pending_reboot() in
- * common/power.c just before hard resetting the system. This logic is likely
- * not needed as the PP3300_A rail should be dropped on EC reset.
+ * Reset all system PD/TCPC MCUs -- currently only called from
+ * handle_pending_reboot() in common/power.c just before hard
+ * resetting the system. This logic is likely not needed as the
+ * PP3300_A rail should be dropped on EC reset.
*/
void board_reset_pd_mcu(void)
{
- /* Assert reset to TCPC1 */
+ /* Assert reset to TCPC1 (ps8751) */
gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 0);
- /* Assert reset to TCPC0 */
- board_set_tcpc_power_mode(0, 0);
+ /* Assert reset to TCPC0 (anx3429) */
+ gpio_set_level(GPIO_USB_C0_PD_RST_L, 0);
/* TCPC1 (ps8751) requires 1ms reset down assertion */
- msleep(1);
+ msleep(MAX(1, ANX74XX_RST_L_PWR_L_DELAY_MS));
/* Deassert reset to TCPC1 */
gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 1);
+ /* Disable TCPC0 power */
+ gpio_set_level(GPIO_EN_USB_TCPC_PWR, 0);
/*
- * TCPC0 requires 10ms reset/power down assertion
- * minus the 1ms for the TCPC1.
+ * anx3429 requires 10ms reset/power down assertion
*/
- msleep(9);
-
- /* Deassert reset to TCPC0 */
- board_set_tcpc_power_mode(0, 1);
+ msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS);
+ board_set_tcpc_power_mode(USB_PD_PORT_ANX74XX, 1);
}
#ifdef CONFIG_USB_PD_TCPC_FW_VERSION
diff --git a/board/pyro/board.c b/board/pyro/board.c
index 0cac3f1181..15a0b3c1e3 100644
--- a/board/pyro/board.c
+++ b/board/pyro/board.c
@@ -278,7 +278,13 @@ struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_COUNT] = {
}
};
-/* called from anx74xx_set_power_mode() */
+/**
+ * Power on (or off) a single TCPC.
+ * minimum on/off delays are included.
+ *
+ * @param port Port number of TCPC.
+ * @param mode 0: power off, 1: power on.
+ */
void board_set_tcpc_power_mode(int port, int mode)
{
if (port != USB_PD_PORT_ANX74XX)
@@ -287,13 +293,14 @@ void board_set_tcpc_power_mode(int port, int mode)
switch (mode) {
case ANX74XX_NORMAL_MODE:
gpio_set_level(GPIO_EN_USB_TCPC_PWR, 1);
- msleep(10);
+ msleep(ANX74XX_PWR_H_RST_H_DELAY_MS);
gpio_set_level(GPIO_USB_C0_PD_RST_L, 1);
break;
case ANX74XX_STANDBY_MODE:
gpio_set_level(GPIO_USB_C0_PD_RST_L, 0);
- msleep(1);
+ msleep(ANX74XX_RST_L_PWR_L_DELAY_MS);
gpio_set_level(GPIO_EN_USB_TCPC_PWR, 0);
+ msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS);
break;
default:
break;
@@ -301,32 +308,31 @@ void board_set_tcpc_power_mode(int port, int mode)
}
/**
- * Reset PD MCU -- currently only called from handle_pending_reboot() in
- * common/power.c just before hard resetting the system. This logic is likely
- * not needed as the PP3300_A rail should be dropped on EC reset.
+ * Reset all system PD/TCPC MCUs -- currently only called from
+ * handle_pending_reboot() in common/power.c just before hard
+ * resetting the system. This logic is likely not needed as the
+ * PP3300_A rail should be dropped on EC reset.
*/
void board_reset_pd_mcu(void)
{
- /* Assert reset to TCPC1 */
+ /* Assert reset to TCPC1 (ps8751) */
gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 0);
- /* Assert reset to TCPC0 */
- board_set_tcpc_power_mode(0, 0);
-
+ /* Assert reset to TCPC0 (anx3429) */
+ gpio_set_level(GPIO_USB_C0_PD_RST_L, 0);
/* TCPC1 (ps8751) requires 1ms reset down assertion */
- msleep(1);
+ msleep(MAX(1, ANX74XX_RST_L_PWR_L_DELAY_MS));
/* Deassert reset to TCPC1 */
gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 1);
+ /* Disable TCPC0 power */
+ gpio_set_level(GPIO_EN_USB_TCPC_PWR, 0);
/*
- * TCPC0 requires 10ms reset/power down assertion
- * minus the 1ms for the TCPC1.
+ * anx3429 requires 10ms reset/power down assertion
*/
- msleep(9);
-
- /* Deassert reset to TCPC0 */
- board_set_tcpc_power_mode(0, 1);
+ msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS);
+ board_set_tcpc_power_mode(USB_PD_PORT_ANX74XX, 1);
}
#ifdef CONFIG_USB_PD_TCPC_FW_VERSION
diff --git a/board/reef/board.c b/board/reef/board.c
index 0b8276a2c2..4d074b3af3 100644
--- a/board/reef/board.c
+++ b/board/reef/board.c
@@ -299,7 +299,13 @@ struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_COUNT] = {
}
};
-/* called from anx74xx_set_power_mode() */
+/**
+ * Power on (or off) a single TCPC.
+ * minimum on/off delays are included.
+ *
+ * @param port Port number of TCPC.
+ * @param mode 0: power off, 1: power on.
+ */
void board_set_tcpc_power_mode(int port, int mode)
{
if (port != USB_PD_PORT_ANX74XX)
@@ -308,13 +314,14 @@ void board_set_tcpc_power_mode(int port, int mode)
switch (mode) {
case ANX74XX_NORMAL_MODE:
gpio_set_level(GPIO_EN_USB_TCPC_PWR, 1);
- msleep(10);
+ msleep(ANX74XX_PWR_H_RST_H_DELAY_MS);
gpio_set_level(GPIO_USB_C0_PD_RST_L, 1);
break;
case ANX74XX_STANDBY_MODE:
gpio_set_level(GPIO_USB_C0_PD_RST_L, 0);
- msleep(1);
+ msleep(ANX74XX_RST_L_PWR_L_DELAY_MS);
gpio_set_level(GPIO_EN_USB_TCPC_PWR, 0);
+ msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS);
break;
default:
break;
@@ -322,32 +329,31 @@ void board_set_tcpc_power_mode(int port, int mode)
}
/**
- * Reset PD MCU -- currently only called from handle_pending_reboot() in
- * common/power.c just before hard resetting the system. This logic is likely
- * not needed as the PP3300_A rail should be dropped on EC reset.
+ * Reset all system PD/TCPC MCUs -- currently only called from
+ * handle_pending_reboot() in common/power.c just before hard
+ * resetting the system. This logic is likely not needed as the
+ * PP3300_A rail should be dropped on EC reset.
*/
void board_reset_pd_mcu(void)
{
- /* Assert reset to TCPC1 */
+ /* Assert reset to TCPC1 (ps8751) */
gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 0);
- /* Assert reset to TCPC0 */
- board_set_tcpc_power_mode(0, 0);
-
+ /* Assert reset to TCPC0 (anx3429) */
+ gpio_set_level(GPIO_USB_C0_PD_RST_L, 0);
/* TCPC1 (ps8751) requires 1ms reset down assertion */
- msleep(1);
+ msleep(MAX(1, ANX74XX_RST_L_PWR_L_DELAY_MS));
/* Deassert reset to TCPC1 */
gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 1);
+ /* Disable TCPC0 power */
+ gpio_set_level(GPIO_EN_USB_TCPC_PWR, 0);
/*
- * TCPC0 requires 10ms reset/power down assertion
- * minus the 1ms for the TCPC1.
+ * anx3429 requires 10ms reset/power down assertion
*/
- msleep(9);
-
- /* Deassert reset to TCPC0 */
- board_set_tcpc_power_mode(0, 1);
+ msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS);
+ board_set_tcpc_power_mode(USB_PD_PORT_ANX74XX, 1);
}
#ifdef CONFIG_USB_PD_TCPC_FW_VERSION
diff --git a/board/sand/board.c b/board/sand/board.c
index 605dfb2a0c..a4daffa4ab 100644
--- a/board/sand/board.c
+++ b/board/sand/board.c
@@ -242,7 +242,13 @@ struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_COUNT] = {
}
};
-/* called from anx74xx_set_power_mode() */
+/**
+ * Power on (or off) a single TCPC.
+ * minimum on/off delays are included.
+ *
+ * @param port Port number of TCPC.
+ * @param mode 0: power off, 1: power on.
+ */
void board_set_tcpc_power_mode(int port, int mode)
{
if (port != USB_PD_PORT_ANX74XX)
@@ -251,13 +257,14 @@ void board_set_tcpc_power_mode(int port, int mode)
switch (mode) {
case ANX74XX_NORMAL_MODE:
gpio_set_level(GPIO_EN_USB_TCPC_PWR, 1);
- msleep(10);
+ msleep(ANX74XX_PWR_H_RST_H_DELAY_MS);
gpio_set_level(GPIO_USB_C0_PD_RST_L, 1);
break;
case ANX74XX_STANDBY_MODE:
gpio_set_level(GPIO_USB_C0_PD_RST_L, 0);
- msleep(1);
+ msleep(ANX74XX_RST_L_PWR_L_DELAY_MS);
gpio_set_level(GPIO_EN_USB_TCPC_PWR, 0);
+ msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS);
break;
default:
break;
@@ -265,32 +272,31 @@ void board_set_tcpc_power_mode(int port, int mode)
}
/**
- * Reset PD MCU -- currently only called from handle_pending_reboot() in
- * common/power.c just before hard resetting the system. This logic is likely
- * not needed as the PP3300_A rail should be dropped on EC reset.
+ * Reset all system PD/TCPC MCUs -- currently only called from
+ * handle_pending_reboot() in common/power.c just before hard
+ * resetting the system. This logic is likely not needed as the
+ * PP3300_A rail should be dropped on EC reset.
*/
void board_reset_pd_mcu(void)
{
- /* Assert reset to TCPC1 */
+ /* Assert reset to TCPC1 (ps8751) */
gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 0);
- /* Assert reset to TCPC0 */
- board_set_tcpc_power_mode(0, 0);
-
+ /* Assert reset to TCPC0 (anx3429) */
+ gpio_set_level(GPIO_USB_C0_PD_RST_L, 0);
/* TCPC1 (ps8751) requires 1ms reset down assertion */
- msleep(1);
+ msleep(MAX(1, ANX74XX_RST_L_PWR_L_DELAY_MS));
/* Deassert reset to TCPC1 */
gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 1);
+ /* Disable TCPC0 power */
+ gpio_set_level(GPIO_EN_USB_TCPC_PWR, 0);
/*
- * TCPC0 requires 10ms reset/power down assertion
- * minus the 1ms for the TCPC1.
+ * anx3429 requires 10ms reset/power down assertion
*/
- msleep(9);
-
- /* Deassert reset to TCPC0 */
- board_set_tcpc_power_mode(0, 1);
+ msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS);
+ board_set_tcpc_power_mode(USB_PD_PORT_ANX74XX, 1);
}
#ifdef CONFIG_USB_PD_TCPC_FW_VERSION
diff --git a/board/snappy/board.c b/board/snappy/board.c
index 0641b96cdb..5a0cc52ee1 100644
--- a/board/snappy/board.c
+++ b/board/snappy/board.c
@@ -62,6 +62,8 @@
#define IN_PGOOD_PP3300 POWER_SIGNAL_MASK(X86_PGOOD_PP3300)
#define IN_PGOOD_PP5000 POWER_SIGNAL_MASK(X86_PGOOD_PP5000)
+#define USB_PD_PORT_ANX74XX 0
+
static void tcpc_alert_event(enum gpio_signal signal)
{
if ((signal == GPIO_USB_C0_PD_INT_ODL) &&
@@ -279,43 +281,61 @@ struct usb_mux usb_muxes[CONFIG_USB_PD_PORT_COUNT] = {
}
};
-/* called from anx74xx_set_power_mode() */
+/**
+ * Power on (or off) a single TCPC.
+ * minimum on/off delays are included.
+ *
+ * @param port Port number of TCPC.
+ * @param mode 0: power off, 1: power on.
+ */
void board_set_tcpc_power_mode(int port, int mode)
{
- if (port == 0) {
- gpio_set_level(GPIO_USB_C0_PD_RST_L, mode);
- msleep(mode ? 10 : 1);
- gpio_set_level(GPIO_EN_USB_TCPC_PWR, mode);
+ if (port != USB_PD_PORT_ANX74XX)
+ return;
+
+ switch (mode) {
+ case ANX74XX_NORMAL_MODE:
+ gpio_set_level(GPIO_EN_USB_TCPC_PWR, 1);
+ msleep(ANX74XX_PWR_H_RST_H_DELAY_MS);
+ gpio_set_level(GPIO_USB_C0_PD_RST_L, 1);
+ break;
+ case ANX74XX_STANDBY_MODE:
+ gpio_set_level(GPIO_USB_C0_PD_RST_L, 0);
+ msleep(ANX74XX_RST_L_PWR_L_DELAY_MS);
+ gpio_set_level(GPIO_EN_USB_TCPC_PWR, 0);
+ msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS);
+ break;
+ default:
+ break;
}
}
/**
- * Reset PD MCU -- currently only called from handle_pending_reboot() in
- * common/power.c just before hard resetting the system. This logic is likely
- * not needed as the PP3300_A rail should be dropped on EC reset.
+ * Reset all system PD/TCPC MCUs -- currently only called from
+ * handle_pending_reboot() in common/power.c just before hard
+ * resetting the system. This logic is likely not needed as the
+ * PP3300_A rail should be dropped on EC reset.
*/
void board_reset_pd_mcu(void)
{
- /* Assert reset to TCPC1 */
+ /* Assert reset to TCPC1 (ps8751) */
gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 0);
- /* Assert reset to TCPC0 */
- board_set_tcpc_power_mode(0, 0);
-
+ /* Assert reset to TCPC0 (anx3429) */
+ gpio_set_level(GPIO_USB_C0_PD_RST_L, 0);
/* TCPC1 (ps8751) requires 1ms reset down assertion */
- msleep(1);
+ msleep(MAX(1, ANX74XX_RST_L_PWR_L_DELAY_MS));
/* Deassert reset to TCPC1 */
gpio_set_level(GPIO_USB_C1_PD_RST_ODL, 1);
+ /* Disable TCPC0 power */
+ gpio_set_level(GPIO_EN_USB_TCPC_PWR, 0);
/*
- * TCPC0 requires 10ms reset/power down assertion
- * minus the 1ms for the TCPC1.
+ * anx3429 requires 10ms reset/power down assertion
*/
- msleep(9);
-
- /* Deassert reset to TCPC0 */
- board_set_tcpc_power_mode(0, 1);
+ msleep(ANX74XX_PWR_L_PWR_H_DELAY_MS);
+ board_set_tcpc_power_mode(USB_PD_PORT_ANX74XX, 1);
}
#ifdef CONFIG_USB_PD_TCPC_FW_VERSION
diff --git a/common/usb_pd_protocol.c b/common/usb_pd_protocol.c
index de7fb6806c..5883e09f63 100644
--- a/common/usb_pd_protocol.c
+++ b/common/usb_pd_protocol.c
@@ -1617,6 +1617,17 @@ static void pd_init_tasks(void)
}
#endif /* CONFIG_COMMON_RUNTIME */
+#ifndef CONFIG_USB_PD_TCPC
+static int pd_restart_tcpc(int port)
+{
+ if (board_set_tcpc_power_mode) {
+ /* force chip reset */
+ board_set_tcpc_power_mode(port, 0);
+ }
+ return tcpm_init(port);
+}
+#endif
+
void pd_task(void)
{
int head;
@@ -2289,9 +2300,9 @@ void pd_task(void)
CPRINTS("TCPC p%d resumed!", port);
#else
if (rstatus != EC_ERROR_UNIMPLEMENTED &&
- tcpm_init(port) != 0) {
+ pd_restart_tcpc(port) != 0) {
/* stay in PD_STATE_SUSPENDED */
- CPRINTS("TCPC p%d init failed!", port);
+ CPRINTS("TCPC p%d restart failed!", port);
break;
}
set_state(port, PD_DEFAULT_STATE);
diff --git a/driver/tcpm/anx74xx.c b/driver/tcpm/anx74xx.c
index 9d15cbce3e..89e5c56003 100644
--- a/driver/tcpm/anx74xx.c
+++ b/driver/tcpm/anx74xx.c
@@ -649,7 +649,7 @@ static int anx74xx_tcpm_set_cc(int port, int pull)
#if defined(CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE) && \
defined(CONFIG_USB_PD_TCPC_LOW_POWER)
-void anx74xx_handle_power_mode(int port, int mode)
+static void anx74xx_handle_power_mode(int port, int mode)
{
if (mode == ANX74XX_STANDBY_MODE) {
anx74xx_set_power_mode(port, mode);
diff --git a/driver/tcpm/anx74xx.h b/driver/tcpm/anx74xx.h
index 127af4e0b5..4760b724c6 100644
--- a/driver/tcpm/anx74xx.h
+++ b/driver/tcpm/anx74xx.h
@@ -182,13 +182,25 @@
#define BIT_VALUE_OF_SNK_CC_1_P_5 0x08
#define BIT_VALUE_OF_SNK_CC_3_P_0 0x0C
+/*
+ * RESETN low to PWR_EN low delay
+ */
+#define ANX74XX_RST_L_PWR_L_DELAY_MS 1
+/*
+ * minimum power off-to-on delay to reset chip
+ */
+#define ANX74XX_PWR_L_PWR_H_DELAY_MS 10
+/*
+ * parameter T4: PWR_EN high to RESETN high delay
+ */
+#define ANX74XX_PWR_H_RST_H_DELAY_MS 10
+
extern const struct tcpm_drv anx74xx_tcpm_drv;
extern const struct usb_mux_driver anx74xx_tcpm_usb_mux_driver;
void anx74xx_tcpc_set_vbus(int port, int enable);
void anx74xx_tcpc_update_hpd_status(int port, int hpd_lvl, int hpd_irq);
void anx74xx_tcpc_clear_hpd_status(int port);
int anx74xx_tcpc_get_fw_version(int port, int *version);
-void anx74xx_handle_power_mode(int port, int mode);
#ifdef CONFIG_CMD_I2C_STRESS_TEST_TCPC
extern struct i2c_stress_test_dev anx74xx_i2c_stress_test_dev;