diff options
author | Aseda Aboagye <aaboagye@google.com> | 2021-03-29 20:23:32 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2021-04-01 20:53:53 +0000 |
commit | f0486d8cde3001dc62038de7bc06a473f3d84b7c (patch) | |
tree | b2760fd377118e30e3028bf88a27282f664257fe /board | |
parent | 6c7bcced3a5b5e752ce8f85ce23648e178b72d5d (diff) | |
download | chrome-ec-f0486d8cde3001dc62038de7bc06a473f3d84b7c.tar.gz |
Reland "dedede/raa489000: Disable ASGATE from READY state"
This is a reland of f7fbc629f0655229cc7ffdadfb18c9e13118e3d2
Original change's description:
> 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>
Bug: b:183220414
Change-Id: I36db53f3e13ba848308cd7e0c94a1b5a3551c600
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2797549
Reviewed-by: Diana Z <dzigterman@chromium.org>
Commit-Queue: Aseda Aboagye <aaboagye@chromium.org>
Tested-by: Aseda Aboagye <aaboagye@chromium.org>
Diffstat (limited to 'board')
-rw-r--r-- | board/blipper/board.c | 5 | ||||
-rw-r--r-- | board/boten/board.c | 5 | ||||
-rw-r--r-- | board/galtic/board.c | 19 | ||||
-rw-r--r-- | board/madoo/board.c | 8 | ||||
-rw-r--r-- | board/magolor/board.c | 8 | ||||
-rw-r--r-- | board/metaknight/board.c | 8 | ||||
-rw-r--r-- | board/sasuke/board.c | 8 | ||||
-rw-r--r-- | board/sasukette/board.c | 9 | ||||
-rw-r--r-- | board/storo/board.c | 9 | ||||
-rw-r--r-- | board/waddledoo/board.c | 8 |
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 c529e10bd1..3ce70ac9d3 100644 --- a/board/sasukette/board.c +++ b/board/sasukette/board.c @@ -283,9 +283,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; } @@ -306,6 +309,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); } /* @@ -316,7 +320,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 1478095a53..32826d2a3f 100644 --- a/board/storo/board.c +++ b/board/storo/board.c @@ -388,9 +388,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; } @@ -411,6 +414,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); } /* @@ -421,7 +425,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); |