diff options
author | Aseda Aboagye <aaboagye@google.com> | 2021-03-29 20:23:32 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-03-30 17:49:54 +0000 |
commit | f7fbc629f0655229cc7ffdadfb18c9e13118e3d2 (patch) | |
tree | c8e128e53f3a15dd3b0c83871de39b01dcb09223 /board/metaknight | |
parent | 6810f49dfeb4f41cf53952192d74c71c7ab15e99 (diff) | |
download | chrome-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>
Diffstat (limited to 'board/metaknight')
-rw-r--r-- | board/metaknight/board.c | 8 |
1 files changed, 6 insertions, 2 deletions
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); |