diff options
author | Wai-Hong Tam <waihong@google.com> | 2019-06-26 09:50:59 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2019-07-23 17:22:03 +0000 |
commit | 978add22f0c63984644653ab98630ae2931214e3 (patch) | |
tree | d13ab69f83bf7fb545bad4fd2f17d11f0d8fb723 | |
parent | c36216efdf4ae6876273855067cf849a9776b97c (diff) | |
download | chrome-ec-978add22f0c63984644653ab98630ae2931214e3.tar.gz |
servo_v4: Support command to limit the max_voltage
firmware_PDVbusRequest forces servo v4 to different max_voltage
limits to verify the PD negotiation. Add the firmware support for it.
The console command usbc_action is the same as Plankton. So the test
side doesn't need any change.
BRANCH=servo
BUG=b:134700685
TEST=Tried usbc_action command and ran firmware_PDVbusRequest passed.
Change-Id: I5f05d73d9a2f92fe26514285e7c251e9fa27aba8
Signed-off-by: Wai-Hong Tam <waihong@google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1686221
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
(cherry picked from commit 167648267e5307b497ca64948f3bd79ac0327eb0)
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1686281
-rw-r--r-- | board/servo_v4/usb_pd_policy.c | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/board/servo_v4/usb_pd_policy.c b/board/servo_v4/usb_pd_policy.c index 9a781c6534..26c2c23d28 100644 --- a/board/servo_v4/usb_pd_policy.c +++ b/board/servo_v4/usb_pd_policy.c @@ -110,10 +110,15 @@ static int cc_pull_stored = TYPEC_CC_RD; */ #define MAX_MV_RED_BLUE 9000 +static int user_limited_max_mv = 20000; + static uint32_t max_supported_voltage(void) { - return board_get_version() >= BOARD_VERSION_BLACK ? + int board_max_mv = board_get_version() >= BOARD_VERSION_BLACK ? PD_MAX_VOLTAGE_MV : MAX_MV_RED_BLUE; + + return board_max_mv < user_limited_max_mv ? board_max_mv : + user_limited_max_mv; } static int charge_port_is_active(void) @@ -202,6 +207,7 @@ static void update_ports(void) if (pd_src_voltages_mv[i] > max_supported_voltage()) break; + /* Find the 'best' PDO <= voltage */ pdo_index = pd_find_pdo_index( CHG, pd_src_voltages_mv[i], &pdo); @@ -856,3 +862,43 @@ static int cmd_fake_disconnect(int argc, char *argv[]) } DECLARE_CONSOLE_COMMAND(fakedisconnect, cmd_fake_disconnect, "<delay_ms> <duration_ms>", NULL); +<<<<<<< HEAD (baf1eb servo_v4: Remove unnecessary init for GPIO MODULE_USB_PD) +======= + +static int cmd_usbc_action(int argc, char *argv[]) +{ + if (argc != 2) + return EC_ERROR_PARAM_COUNT; + + if (!strcasecmp(argv[1], "5v")) { + do_cc(CONFIG_SRC(cc_config)); + user_limited_max_mv = 5000; + update_ports(); + } else if (!strcasecmp(argv[1], "12v")) { + do_cc(CONFIG_SRC(cc_config)); + user_limited_max_mv = 12000; + update_ports(); + } else if (!strcasecmp(argv[1], "20v")) { + do_cc(CONFIG_SRC(cc_config)); + user_limited_max_mv = 20000; + update_ports(); + } else if (!strcasecmp(argv[1], "dev")) { + /* Set the limit back to original */ + user_limited_max_mv = 20000; + do_cc(CONFIG_PDSNK(cc_config)); + } else if (!strcasecmp(argv[1], "drp")) { + /* Toggle the DRP state, compatible with Plankton. */ + do_cc(cc_config ^ CC_ENABLE_DRP); + CPRINTF("DRP = %d, host_mode = %d\n", + !!(cc_config & CC_ENABLE_DRP), + !!(cc_config & CC_ALLOW_SRC)); + } else { + return EC_ERROR_PARAM1; + } + + return EC_SUCCESS; +} +DECLARE_CONSOLE_COMMAND(usbc_action, cmd_usbc_action, + "5v|12v|20v|dev|drp", + "Set Servo v4 type-C port state"); +>>>>>>> CHANGE (f3b961 servo_v4: Support command to limit the max_voltage) |