summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAseda Aboagye <aaboagye@google.com>2021-03-29 20:23:32 -0700
committerCommit Bot <commit-bot@chromium.org>2021-03-30 17:49:54 +0000
commitf7fbc629f0655229cc7ffdadfb18c9e13118e3d2 (patch)
treec8e128e53f3a15dd3b0c83871de39b01dcb09223
parent6810f49dfeb4f41cf53952192d74c71c7ab15e99 (diff)
downloadchrome-ec-f7fbc629f0655229cc7ffdadfb18c9e13118e3d2.tar.gz
dedede/raa489000: Disable ASGATE from READY state
On the boards which use the RAA489000, we keep the ADC enabled while giving VBUS control to the charger side. This can cause a situation where VBUS is not quite zero volts when a charger is removed. This commit uses the charger side registers to control the ASGATE when selecting our active charge port. This is done in addition to the existing implementation which uses the TCPCI registers to control ASGATE. When we place the parts into low power mode, we move the VBUS control from the TCPC side of the IC to the charger side. It should be safe to issue both commands as if the TCPC side has control, the IC ignores the setting from the charger side registers. BUG=b:183220414 BRANCH=dedede TEST=Build and flash madoo, plug in charger to port, unplug, verify that VBUS falls to < 200mV and decays from there. Signed-off-by: Aseda Aboagye <aaboagye@google.com> Change-Id: I8e8c8cc32575d18c9d3d1210ed3c5cf69ad5ca4b Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2793058 Tested-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: Diana Z <dzigterman@chromium.org> Commit-Queue: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r--board/blipper/board.c5
-rw-r--r--board/boten/board.c5
-rw-r--r--board/galtic/board.c19
-rw-r--r--board/madoo/board.c8
-rw-r--r--board/magolor/board.c8
-rw-r--r--board/metaknight/board.c8
-rw-r--r--board/sasuke/board.c8
-rw-r--r--board/sasukette/board.c9
-rw-r--r--board/storo/board.c9
-rw-r--r--board/waddledoo/board.c8
10 files changed, 62 insertions, 25 deletions
diff --git a/board/blipper/board.c b/board/blipper/board.c
index fc9e2306f1..5e6cb866ff 100644
--- a/board/blipper/board.c
+++ b/board/blipper/board.c
@@ -316,7 +316,7 @@ int board_set_active_charge_port(int port)
if (port == CHARGE_PORT_NONE) {
tcpc_write(0, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW);
-
+ raa489000_enable_asgate(0, false);
return EC_SUCCESS;
}
@@ -327,7 +327,8 @@ int board_set_active_charge_port(int port)
}
/* Enable requested charge port. */
- if (tcpc_write(0, TCPC_REG_COMMAND,
+ if (raa489000_enable_asgate(port, true) ||
+ tcpc_write(0, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_HIGH)) {
CPRINTUSB("p%d: sink path enable failed.", port);
return EC_ERROR_UNKNOWN;
diff --git a/board/boten/board.c b/board/boten/board.c
index a544377aa7..c69c014b8b 100644
--- a/board/boten/board.c
+++ b/board/boten/board.c
@@ -308,7 +308,7 @@ int board_set_active_charge_port(int port)
if (port == CHARGE_PORT_NONE) {
tcpc_write(0, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW);
-
+ raa489000_enable_asgate(0, false);
return EC_SUCCESS;
}
@@ -319,7 +319,8 @@ int board_set_active_charge_port(int port)
}
/* Enable requested charge port. */
- if (tcpc_write(0, TCPC_REG_COMMAND,
+ if (raa489000_enable_asgate(port, true) ||
+ tcpc_write(0, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_HIGH)) {
CPRINTUSB("p%d: sink path enable failed.", port);
return EC_ERROR_UNKNOWN;
diff --git a/board/galtic/board.c b/board/galtic/board.c
index 5e8f5f5714..85195851fb 100644
--- a/board/galtic/board.c
+++ b/board/galtic/board.c
@@ -516,13 +516,16 @@ int board_set_active_charge_port(int port)
/* Disable all ports. */
if (port == CHARGE_PORT_NONE) {
- for (i = 0; i < board_get_usb_pd_port_count(); i++)
+ for (i = 0; i < board_get_usb_pd_port_count(); i++) {
tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW);
+ raa489000_enable_asgate(i, false);
+ }
+
return EC_SUCCESS;
}
- /* Check is port is sourcing VBUS. */
+ /* Check if port is sourcing VBUS. */
if (board_is_sourcing_vbus(port)) {
CPRINTS("Skip enable p%d", port);
return EC_ERROR_INVAL;
@@ -539,18 +542,20 @@ int board_set_active_charge_port(int port)
if (tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW))
CPRINTS("p%d: sink path disable failed.", i);
+ raa489000_enable_asgate(i, false);
}
/*
- * Stop the charger IC from switching while charging ports. Otherwise,
- * we can overcurrent the adapter we's switching to. (crbug.com/926056)
+ * Stop the charger IC from switching while changing ports. Otherwise,
+ * we can overcurrent the adapter we're switching to. (crbug.com/926056)
*/
if (old_port != CHARGE_PORT_NONE)
charger_discharge_on_ac(1);
- /* Enable requested charge port. */
- if (tcpc_write(port, TCPC_REG_COMMAND,
- TCPC_REG_COMMAND_SNK_CTRL_HIGH)) {
+ /* Enable requested charge port. */
+ if (raa489000_enable_asgate(port, true) ||
+ tcpc_write(port, TCPC_REG_COMMAND,
+ TCPC_REG_COMMAND_SNK_CTRL_HIGH)) {
CPRINTS("p%d: sink path enable failed.", port);
charger_discharge_on_ac(0);
return EC_ERROR_UNKNOWN;
diff --git a/board/madoo/board.c b/board/madoo/board.c
index 62724bde05..1e1ee9b348 100644
--- a/board/madoo/board.c
+++ b/board/madoo/board.c
@@ -266,9 +266,11 @@ int board_set_active_charge_port(int port)
/* Disable all ports. */
if (port == CHARGE_PORT_NONE) {
- for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++)
+ for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) {
tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW);
+ raa489000_enable_asgate(i, false);
+ }
return EC_SUCCESS;
}
@@ -290,6 +292,7 @@ int board_set_active_charge_port(int port)
if (tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW))
CPRINTS("p%d: sink path disable failed.", i);
+ raa489000_enable_asgate(i, false);
}
/*
@@ -300,7 +303,8 @@ int board_set_active_charge_port(int port)
charger_discharge_on_ac(1);
/* Enable requested charge port. */
- if (tcpc_write(port, TCPC_REG_COMMAND,
+ if (raa489000_enable_asgate(port, true) ||
+ tcpc_write(port, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_HIGH)) {
CPRINTS("p%d: sink path enable failed.", port);
charger_discharge_on_ac(0);
diff --git a/board/magolor/board.c b/board/magolor/board.c
index f1fca86f90..a64b7781be 100644
--- a/board/magolor/board.c
+++ b/board/magolor/board.c
@@ -420,9 +420,11 @@ int board_set_active_charge_port(int port)
/* Disable all ports. */
if (port == CHARGE_PORT_NONE) {
- for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++)
+ for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++) {
tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW);
+ raa489000_enable_asgate(i, false);
+ }
return EC_SUCCESS;
}
@@ -444,6 +446,7 @@ int board_set_active_charge_port(int port)
if (tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW))
CPRINTS("p%d: sink path disable failed.", i);
+ raa489000_enable_asgate(i, false);
}
/*
@@ -454,7 +457,8 @@ int board_set_active_charge_port(int port)
charger_discharge_on_ac(1);
/* Enable requested charge port. */
- if (tcpc_write(port, TCPC_REG_COMMAND,
+ if (raa489000_enable_asgate(port, true) ||
+ tcpc_write(port, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_HIGH)) {
CPRINTS("p%d: sink path enable failed.", port);
charger_discharge_on_ac(0);
diff --git a/board/metaknight/board.c b/board/metaknight/board.c
index 9f307af8b2..e4fee336f0 100644
--- a/board/metaknight/board.c
+++ b/board/metaknight/board.c
@@ -339,9 +339,11 @@ int board_set_active_charge_port(int port)
/* Disable all ports. */
if (port == CHARGE_PORT_NONE) {
- for (i = 0; i < board_get_usb_pd_port_count(); i++)
+ for (i = 0; i < board_get_usb_pd_port_count(); i++) {
tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW);
+ raa489000_enable_asgate(i, false);
+ }
return EC_SUCCESS;
}
@@ -363,6 +365,7 @@ int board_set_active_charge_port(int port)
if (tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW))
CPRINTS("p%d: sink path disable failed.", i);
+ raa489000_enable_asgate(i, false);
}
/*
@@ -373,7 +376,8 @@ int board_set_active_charge_port(int port)
charger_discharge_on_ac(1);
/* Enable requested charge port. */
- if (tcpc_write(port, TCPC_REG_COMMAND,
+ if (raa489000_enable_asgate(port, true) ||
+ tcpc_write(port, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_HIGH)) {
CPRINTS("p%d: sink path enable failed.", port);
charger_discharge_on_ac(0);
diff --git a/board/sasuke/board.c b/board/sasuke/board.c
index ef6d0effae..7e96204f11 100644
--- a/board/sasuke/board.c
+++ b/board/sasuke/board.c
@@ -337,9 +337,11 @@ int board_set_active_charge_port(int port)
/* Disable all ports. */
if (port == CHARGE_PORT_NONE) {
- for (i = 0; i < board_get_usb_pd_port_count(); i++)
+ for (i = 0; i < board_get_usb_pd_port_count(); i++) {
tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW);
+ raa489000_enable_asgate(i, false);
+ }
return EC_SUCCESS;
}
@@ -361,6 +363,7 @@ int board_set_active_charge_port(int port)
if (tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW))
CPRINTS("p%d: sink path disable failed.", i);
+ raa489000_enable_asgate(i, false);
}
/*
@@ -371,7 +374,8 @@ int board_set_active_charge_port(int port)
charger_discharge_on_ac(1);
/* Enable requested charge port. */
- if (tcpc_write(port, TCPC_REG_COMMAND,
+ if (raa489000_enable_asgate(port, true) ||
+ tcpc_write(port, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_HIGH)) {
CPRINTS("p%d: sink path enable failed.", port);
charger_discharge_on_ac(0);
diff --git a/board/sasukette/board.c b/board/sasukette/board.c
index d9471fbcaf..76824d6ab1 100644
--- a/board/sasukette/board.c
+++ b/board/sasukette/board.c
@@ -282,9 +282,12 @@ int board_set_active_charge_port(int port)
/* Disable all ports. */
if (port == CHARGE_PORT_NONE) {
- for (i = 0; i < board_get_usb_pd_port_count(); i++)
+ for (i = 0; i < board_get_usb_pd_port_count(); i++) {
tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW);
+ raa489000_enable_asgate(i, false);
+ }
+
return EC_SUCCESS;
}
@@ -305,6 +308,7 @@ int board_set_active_charge_port(int port)
if (tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW))
CPRINTS("p%d: sink path disable failed.", i);
+ raa489000_enable_asgate(i, false);
}
/*
@@ -315,7 +319,8 @@ int board_set_active_charge_port(int port)
charger_discharge_on_ac(1);
/* Enable requested charge port. */
- if (tcpc_write(port, TCPC_REG_COMMAND,
+ if (raa489000_enable_asgate(port, true) ||
+ tcpc_write(port, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_HIGH)) {
CPRINTS("p%d: sink path enable failed.", port);
charger_discharge_on_ac(0);
diff --git a/board/storo/board.c b/board/storo/board.c
index 3a3e7ab53d..7de876beee 100644
--- a/board/storo/board.c
+++ b/board/storo/board.c
@@ -387,9 +387,12 @@ int board_set_active_charge_port(int port)
/* Disable all ports. */
if (port == CHARGE_PORT_NONE) {
- for (i = 0; i < board_get_usb_pd_port_count(); i++)
+ for (i = 0; i < board_get_usb_pd_port_count(); i++) {
tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW);
+ raa489000_enable_asgate(i, false);
+ }
+
return EC_SUCCESS;
}
@@ -410,6 +413,7 @@ int board_set_active_charge_port(int port)
if (tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW))
CPRINTS("p%d: sink path disable failed.", i);
+ raa489000_enable_asgate(i, false);
}
/*
@@ -420,7 +424,8 @@ int board_set_active_charge_port(int port)
charger_discharge_on_ac(1);
/* Enable requested charge port. */
- if (tcpc_write(port, TCPC_REG_COMMAND,
+ if (raa489000_enable_asgate(port, true) ||
+ tcpc_write(port, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_HIGH)) {
CPRINTS("p%d: sink path enable failed.", port);
charger_discharge_on_ac(0);
diff --git a/board/waddledoo/board.c b/board/waddledoo/board.c
index bea0774a3d..a7e76e6525 100644
--- a/board/waddledoo/board.c
+++ b/board/waddledoo/board.c
@@ -344,9 +344,11 @@ int board_set_active_charge_port(int port)
/* Disable all ports. */
if (port == CHARGE_PORT_NONE) {
- for (i = 0; i < board_get_usb_pd_port_count(); i++)
+ for (i = 0; i < board_get_usb_pd_port_count(); i++) {
tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW);
+ raa489000_enable_asgate(i, false);
+ }
return EC_SUCCESS;
}
@@ -368,6 +370,7 @@ int board_set_active_charge_port(int port)
if (tcpc_write(i, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_LOW))
CPRINTS("p%d: sink path disable failed.", i);
+ raa489000_enable_asgate(i, false);
}
/*
@@ -378,7 +381,8 @@ int board_set_active_charge_port(int port)
charger_discharge_on_ac(1);
/* Enable requested charge port. */
- if (tcpc_write(port, TCPC_REG_COMMAND,
+ if (raa489000_enable_asgate(port, true) ||
+ tcpc_write(port, TCPC_REG_COMMAND,
TCPC_REG_COMMAND_SNK_CTRL_HIGH)) {
CPRINTS("p%d: sink path enable failed.", port);
charger_discharge_on_ac(0);