summaryrefslogtreecommitdiff
path: root/zephyr/shim/src/bb_retimer_usb_mux.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/shim/src/bb_retimer_usb_mux.c')
-rw-r--r--zephyr/shim/src/bb_retimer_usb_mux.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/zephyr/shim/src/bb_retimer_usb_mux.c b/zephyr/shim/src/bb_retimer_usb_mux.c
new file mode 100644
index 0000000000..c40068211e
--- /dev/null
+++ b/zephyr/shim/src/bb_retimer_usb_mux.c
@@ -0,0 +1,39 @@
+/* Copyright 2022 The ChromiumOS Authors.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include <zephyr/devicetree.h>
+#include <zephyr/sys/util_macro.h>
+#include "usb_mux.h"
+#include "usbc/usb_muxes.h"
+
+/**
+ * This prevents creating struct usb_mux bb_controls[] for platforms that didn't
+ * migrate USB mux configuration to DTS yet.
+ */
+#if DT_HAS_COMPAT_STATUS_OKAY(cros_ec_usb_mux_chain)
+
+BB_RETIMER_CHECK_SAME_CONTROLS(BB_RETIMER_INSTANCES_LIST)
+
+/**
+ * @brief bb_controls array should be constant only if configuration cannot
+ * change in runtime
+ */
+#define BB_CONTROLS_CONST \
+ COND_CODE_1(CONFIG_PLATFORM_EC_USBC_RETIMER_INTEL_BB_RUNTIME_CONFIG, \
+ (), (const))
+
+/**
+ * Define bb_controls for BB retimers in USB muxes chain e.g.
+ * [0] = {
+ * .retimer_rst_gpio = IOEX_USB_C0_BB_RETIMER_RST,
+ * .usb_ls_en_gpio = IOEX_USB_C0_BB_RETIMER_LS_EN,
+ * },
+ * [1] = { ... },
+ */
+BB_CONTROLS_CONST struct bb_usb_control bb_controls[] = {
+ USB_MUX_BB_RETIMERS_CONTROLS_ARRAY
+};
+
+#endif /* #if DT_HAS_COMPAT_STATUS_OKAY(cros_ec_usb_mux_chain) */