diff options
author | Scott <scollyer@chromium.org> | 2017-02-28 19:16:22 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-03-01 09:31:28 -0800 |
commit | 6b52c9cf58cf4355dfd3b351b547582f280b8b83 (patch) | |
tree | 24804be07cfb17b8702c2f87dcba8f0285f0fb92 /board/eve/usb_pd_policy.c | |
parent | 1de54970e674b3b9fbf617b0c204db881c43091e (diff) | |
download | chrome-ec-6b52c9cf58cf4355dfd3b351b547582f280b8b83.tar.gz |
eve: Modify 1.5 vs 3.0 current limit setting for P1B boards
P1B adds 2 new GPIO signals to explicitly control the 1.5 vs 3.0
current limit selection. In addition, the use case for the 5V enable
gpio changes to on/off and no longer needs to be toggled between input
and output.
This change is tied to the board version so that the operation for P1
and older boards is unaffected.
BUG=chrome-os-partner:61431
BRANCH=none
TEST=Manual
Connected display adapter into C0 port and verified gpio signals:
1 USB_C0_5V_EN
0* USB_C1_5V_EN
1* EN_USB_C0_3A
0 EN_USB_C1_3A
Then connect another adapter to C1:
1 USB_C0_5V_EN
1* USB_C1_5V_EN
0* EN_USB_C0_3A
0 EN_USB_C1_3A
Remove adapter from C0:
0* USB_C0_5V_EN
1 USB_C1_5V_EN
0 EN_USB_C0_3A
1* EN_USB_C1_3A
Also tested P1 system to verify that the correct board version is read
and the signals match the expected value.
Change-Id: Iebab84304a33282c766b8963dba4a56052a295c7
Signed-off-by: Scott <scollyer@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/447866
Commit-Ready: Scott Collyer <scollyer@chromium.org>
Tested-by: Scott Collyer <scollyer@chromium.org>
Reviewed-by: Todd Broch <tbroch@chromium.org>
Diffstat (limited to 'board/eve/usb_pd_policy.c')
-rw-r--r-- | board/eve/usb_pd_policy.c | 44 |
1 files changed, 32 insertions, 12 deletions
diff --git a/board/eve/usb_pd_policy.c b/board/eve/usb_pd_policy.c index 112fc9d19d..5829aaff76 100644 --- a/board/eve/usb_pd_policy.c +++ b/board/eve/usb_pd_policy.c @@ -66,19 +66,39 @@ int board_vbus_source_enabled(int port) static void board_vbus_update_source_current(int port) { - enum gpio_signal gpio = port ? GPIO_USB_C1_5V_EN : GPIO_USB_C0_5V_EN; - int flags = (vbus_rp[port] == TYPEC_RP_1A5 && vbus_en[port]) ? - (GPIO_INPUT | GPIO_PULL_UP) : (GPIO_OUTPUT | GPIO_PULL_UP); + enum gpio_signal gpio_5v_en = port ? GPIO_USB_C1_5V_EN : + GPIO_USB_C0_5V_EN; + enum gpio_signal gpio_3a_en = port ? GPIO_EN_USB_C1_3A : + GPIO_EN_USB_C0_3A; + int flags; - /* - * Driving USB_Cx_5V_EN high, actually put a 16.5k resistance - * (2x 33k in parallel) on the NX5P3290 load switch ILIM pin, - * setting a minimum OCP current of 3186 mA. - * Putting an internal pull-up on USB_Cx_5V_EN, effectively put a 33k - * resistor on ILIM, setting a minimum OCP current of 1505 mA. - */ - gpio_set_level(gpio, vbus_en[port]); - gpio_set_flags(gpio, flags); + if (system_get_board_version() >= BOARD_VERSION_P1B) { + /* + * For P1B and beyond, 1.5 vs 3.0 A limit is controlled by a + * dedicated gpio where high = 3.0A and low = 1.5A. VBUS on/off + * is controlled by GPIO_USB_C0/1_5V_EN. Both of these signals + * can remain outputs. + */ + gpio_set_level(gpio_3a_en, vbus_rp[port] == TYPEC_RP_3A0 ? + 1 : 0); + gpio_set_level(gpio_5v_en, vbus_en[port]); + } else { + /* + * For P1 and earlier board revs, a single gpio signal is + * used to both enable VBUS and set the current limit. + * Driving USB_Cx_5V_EN high, actually put a 16.5k resistance + * (2x 33k in parallel) on the NX5P3290 load switch ILIM pin, + * setting a minimum OCP current of 3186 mA. + * Putting an internal pull-up on USB_Cx_5V_EN, effectively put + * a 33k resistor on ILIM, setting a minimum OCP current of + * 1505 mA. + */ + flags = (vbus_rp[port] == TYPEC_RP_1A5 && vbus_en[port]) ? + (GPIO_INPUT | GPIO_PULL_UP) : + (GPIO_OUTPUT | GPIO_PULL_UP); + gpio_set_level(gpio_5v_en, vbus_en[port]); + gpio_set_flags(gpio_5v_en, flags); + } } void typec_set_source_current_limit(int port, int rp) |