summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@google.com>2019-10-16 12:07:59 +0800
committerCommit Bot <commit-bot@chromium.org>2019-10-17 07:14:31 +0000
commit99c273e1ecd4f90aa8b883fd4ed9e56ca6bbbda1 (patch)
tree2eb2e688200ec0e1ad8417ff97091dc7aea9cfbf
parent37edd51bc1465a873ede878978556542b8fe3c20 (diff)
downloadchrome-ec-99c273e1ecd4f90aa8b883fd4ed9e56ca6bbbda1.tar.gz
kukui: runtime usb mux config selection
The compile time IF_ENABLED(CONFIG_USB_MUX_XXX) does not work on kukui, change this to runtime selection. BUG=b:135079572 TEST=On Krane Rev5/Kodama, verify the mux switch to dp + usb mode (i2cxfer r 0 0x48 0x11 returns 0x03 or 0x13) BRANCH=kukui Change-Id: Ib44f0c383ed5f9156e3dd3bf6faa3daebb22e146 Signed-off-by: Ting Shen <phoenixshen@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1864493 Tested-by: Ting Shen <phoenixshen@chromium.org> Commit-Queue: Ting Shen <phoenixshen@chromium.org> Reviewed-by: Eric Yilun Lin <yllin@chromium.org>
-rw-r--r--baseboard/kukui/usb_pd_policy.c12
-rw-r--r--baseboard/kukui/usb_pd_policy.h13
-rw-r--r--board/kukui/board.c6
3 files changed, 28 insertions, 3 deletions
diff --git a/baseboard/kukui/usb_pd_policy.c b/baseboard/kukui/usb_pd_policy.c
index 5d5ca68e2d..43136009d8 100644
--- a/baseboard/kukui/usb_pd_policy.c
+++ b/baseboard/kukui/usb_pd_policy.c
@@ -10,6 +10,7 @@
#include "timer.h"
#include "usb_mux.h"
#include "usb_pd.h"
+#include "usb_pd_policy.h"
#include "util.h"
#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ## args)
@@ -239,6 +240,11 @@ static int dp_flags[CONFIG_USB_PD_PORT_COUNT];
/* DP Status VDM as returned by UFP */
static uint32_t dp_status[CONFIG_USB_PD_PORT_COUNT];
+__overridable int board_has_virtual_mux(void)
+{
+ return IS_ENABLED(CONFIG_USB_MUX_VIRTUAL);
+}
+
static void svdm_safe_dp_mode(int port)
{
/* make DP interface safe until configure */
@@ -251,7 +257,7 @@ static void svdm_safe_dp_mode(int port)
static int svdm_enter_dp_mode(int port, uint32_t mode_caps)
{
/* Kukui/Krane doesn't support superspeed lanes. */
- const uint32_t support_pin_mode = IS_ENABLED(CONFIG_USB_MUX_VIRTUAL) ?
+ const uint32_t support_pin_mode = board_has_virtual_mux() ?
(MODE_DP_PIN_C | MODE_DP_PIN_E) : MODE_DP_PIN_ALL;
/**
@@ -293,7 +299,7 @@ static int svdm_dp_config(int port, uint32_t *payload)
int pin_mode;
/* Kukui doesn't support multi-function mode, mask it out. */
- if (IS_ENABLED(CONFIG_USB_MUX_VIRTUAL))
+ if (board_has_virtual_mux())
status &= ~PD_VDO_DPSTS_MF_MASK;
pin_mode = pd_dfp_dp_get_pin_mode(port, status);
@@ -301,7 +307,7 @@ static int svdm_dp_config(int port, uint32_t *payload)
if (!pin_mode)
return 0;
- if (IS_ENABLED(CONFIG_USB_MUX_VIRTUAL))
+ if (board_has_virtual_mux())
usb_mux_set(port, TYPEC_MUX_DP, USB_SWITCH_CONNECT,
board_get_polarity(port));
else
diff --git a/baseboard/kukui/usb_pd_policy.h b/baseboard/kukui/usb_pd_policy.h
new file mode 100644
index 0000000000..78e0213f53
--- /dev/null
+++ b/baseboard/kukui/usb_pd_policy.h
@@ -0,0 +1,13 @@
+/* Copyright 2019 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef __CROS_EC_BASEBOARD_USB_PD_POLICY_H
+#define __CROS_EC_BASEBOARD_USB_PD_POLICY_H
+
+#include "common.h"
+
+__override_proto int board_has_virtual_mux(void);
+
+#endif /* __CROS_EC_BASEBOARD_USB_PD_POLICY_H */
diff --git a/board/kukui/board.c b/board/kukui/board.c
index 4e7182b433..c62d89a92d 100644
--- a/board/kukui/board.c
+++ b/board/kukui/board.c
@@ -38,6 +38,7 @@
#include "timer.h"
#include "usb_charge.h"
#include "usb_mux.h"
+#include "usb_pd_policy.h"
#include "usb_pd_tcpm.h"
#include "util.h"
@@ -563,3 +564,8 @@ void board_fill_source_power_info(int port,
r->meas.current_lim = 1500;
r->max_power = r->meas.voltage_now * r->meas.current_max;
}
+
+__override int board_has_virtual_mux(void)
+{
+ return board_get_version() < 5;
+}