diff options
author | Eric Yilun Lin <yllin@chromium.org> | 2020-02-10 14:58:37 +0800 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-02-10 10:39:51 +0000 |
commit | 579c08cd553353baeb8965a5e9b15278bca61afa (patch) | |
tree | 6434f972d2e3c6108ee57263752fda62b27c3b3b /baseboard | |
parent | 97c2fbbb2692e0395d360cdc75140f9f1d6e5911 (diff) | |
download | chrome-ec-579c08cd553353baeb8965a5e9b15278bca61afa.tar.gz |
kukui: inform AP DP status by USB_MUX event
This CL notify the usb mux status to AP no matter the it5205 exists or
not.
Some revs of the krane and kodama replace virtual mux with a real mux.
However, this will stop informing the AP usb mux status, but it6505
still need the mux information to control the regulators.
BUG=b:149181702
BRANCH=kukui
TEST=plug hub w/ DP port, and see exton state DP=1 by
'cat /sys/class/extcon/extcon0/state'
Change-Id: I86c0998340c935b16b02ec0c3edf0484f1843ebf
Signed-off-by: Eric Yilun Lin <yllin@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2043625
Reviewed-by: Pi-Hsun Shih <pihsun@chromium.org>
Reviewed-by: Ting Shen <phoenixshen@chromium.org>
Tested-by: Pi-Hsun Shih <pihsun@chromium.org>
Commit-Queue: Ting Shen <phoenixshen@chromium.org>
Diffstat (limited to 'baseboard')
-rw-r--r-- | baseboard/kukui/usb_pd_policy.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/baseboard/kukui/usb_pd_policy.c b/baseboard/kukui/usb_pd_policy.c index 95fbdf0163..0925c1b329 100644 --- a/baseboard/kukui/usb_pd_policy.c +++ b/baseboard/kukui/usb_pd_policy.c @@ -105,13 +105,23 @@ __overridable int board_has_virtual_mux(void) return IS_ENABLED(CONFIG_USB_MUX_VIRTUAL); } +static void board_usb_mux_set(int port, mux_state_t mux_mode, + enum usb_switch usb_mode, int polarity) +{ + usb_mux_set(port, mux_mode, usb_mode, polarity); + + if (!board_has_virtual_mux()) + /* b:149181702: Inform AP of DP status */ + host_set_single_event(EC_HOST_EVENT_USB_MUX); +} + __override void svdm_safe_dp_mode(int port) { /* make DP interface safe until configure */ dp_flags[port] = 0; dp_status[port] = 0; - usb_mux_set(port, USB_PD_MUX_NONE, - USB_SWITCH_CONNECT, board_get_polarity(port)); + board_usb_mux_set(port, USB_PD_MUX_NONE, USB_SWITCH_CONNECT, + board_get_polarity(port)); } __override int svdm_enter_dp_mode(int port, uint32_t mode_caps) @@ -152,12 +162,12 @@ __override int svdm_dp_config(int port, uint32_t *payload) return 0; if (board_has_virtual_mux()) - usb_mux_set(port, USB_PD_MUX_DP_ENABLED, USB_SWITCH_CONNECT, - board_get_polarity(port)); + board_usb_mux_set(port, USB_PD_MUX_DP_ENABLED, + USB_SWITCH_CONNECT, board_get_polarity(port)); else - usb_mux_set(port, mf_pref ? - USB_PD_MUX_DOCK : USB_PD_MUX_DP_ENABLED, - USB_SWITCH_CONNECT, board_get_polarity(port)); + board_usb_mux_set( + port, mf_pref ? USB_PD_MUX_DOCK : USB_PD_MUX_DP_ENABLED, + USB_SWITCH_CONNECT, board_get_polarity(port)); payload[0] = VDO(USB_SID_DISPLAYPORT, 1, CMD_DP_CONFIG | VDO_OPOS(opos)); |