summaryrefslogtreecommitdiff
path: root/zephyr/shim/src/tcpc.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/shim/src/tcpc.c')
-rw-r--r--zephyr/shim/src/tcpc.c82
1 files changed, 55 insertions, 27 deletions
diff --git a/zephyr/shim/src/tcpc.c b/zephyr/shim/src/tcpc.c
index 0f96beff15..cdeeb4771b 100644
--- a/zephyr/shim/src/tcpc.c
+++ b/zephyr/shim/src/tcpc.c
@@ -1,4 +1,4 @@
-/* Copyright 2022 The Chromium OS Authors. All rights reserved.
+/* 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.
*/
@@ -7,39 +7,67 @@
#include <zephyr/sys/util.h>
#include "usb_pd_tcpm.h"
#include "usb_pd.h"
+#include "usbc/tcpc_anx7447.h"
#include "usbc/tcpc_ccgxxf.h"
#include "usbc/tcpc_fusb302.h"
+#include "usbc/tcpc_generic_emul.h"
#include "usbc/tcpc_it8xxx2.h"
#include "usbc/tcpc_nct38xx.h"
#include "usbc/tcpc_ps8xxx.h"
+#include "usbc/tcpc_ps8xxx_emul.h"
+#include "usbc/tcpc_rt1718s.h"
#include "usbc/tcpci.h"
#include "usbc/utils.h"
-#if DT_HAS_COMPAT_STATUS_OKAY(CCGXXF_TCPC_COMPAT) || \
- DT_HAS_COMPAT_STATUS_OKAY(FUSB302_TCPC_COMPAT) || \
- DT_HAS_COMPAT_STATUS_OKAY(IT8XXX2_TCPC_COMPAT) || \
- DT_HAS_COMPAT_STATUS_OKAY(PS8XXX_COMPAT) || \
- DT_HAS_COMPAT_STATUS_OKAY(NCT38XX_TCPC_COMPAT) || \
- DT_HAS_COMPAT_STATUS_OKAY(TCPCI_COMPAT) \
-
-#define TCPC_CONFIG(id, fn) [USBC_PORT(id)] = fn(id)
-
-#define MAYBE_CONST COND_CODE_1(CONFIG_PLATFORM_EC_USB_PD_TCPC_RUNTIME_CONFIG, \
- (), (const))
-
-MAYBE_CONST struct tcpc_config_t tcpc_config[] = {
- DT_FOREACH_STATUS_OKAY_VARGS(CCGXXF_TCPC_COMPAT, TCPC_CONFIG,
- TCPC_CONFIG_CCGXXF)
- DT_FOREACH_STATUS_OKAY_VARGS(FUSB302_TCPC_COMPAT, TCPC_CONFIG,
- TCPC_CONFIG_FUSB302)
- DT_FOREACH_STATUS_OKAY_VARGS(IT8XXX2_TCPC_COMPAT, TCPC_CONFIG,
- TCPC_CONFIG_IT8XXX2)
- DT_FOREACH_STATUS_OKAY_VARGS(PS8XXX_COMPAT, TCPC_CONFIG,
- TCPC_CONFIG_PS8XXX)
- DT_FOREACH_STATUS_OKAY_VARGS(NCT38XX_TCPC_COMPAT, TCPC_CONFIG,
- TCPC_CONFIG_NCT38XX)
- DT_FOREACH_STATUS_OKAY_VARGS(TCPCI_COMPAT, TCPC_CONFIG,
- TCPC_CONFIG_TCPCI)
-};
+#define HAS_TCPC_PROP(usbc_id) \
+ COND_CODE_1(DT_NODE_HAS_PROP(usbc_id, tcpc), (|| 1), ())
+
+#define DT_HAS_TCPC (0 DT_FOREACH_STATUS_OKAY(named_usbc_port, HAS_TCPC_PROP))
+
+#if DT_HAS_TCPC
+
+#define TCPC_CHIP_ENTRY(usbc_id, tcpc_id, config_fn) \
+ [USBC_PORT_NEW(usbc_id)] = config_fn(tcpc_id)
+
+#define CHECK_COMPAT(compat, usbc_id, tcpc_id, config_fn) \
+ COND_CODE_1(DT_NODE_HAS_COMPAT(tcpc_id, compat), \
+ (TCPC_CHIP_ENTRY(usbc_id, tcpc_id, config_fn)), ())
+
+#ifdef TEST_BUILD
+#define TCPC_CHIP_FIND_EMUL(usbc_id, tcpc_id) \
+ CHECK_COMPAT(TCPCI_EMUL_COMPAT, usbc_id, tcpc_id, \
+ TCPC_CONFIG_TCPCI_EMUL) \
+ CHECK_COMPAT(PS8XXX_EMUL_COMPAT, usbc_id, tcpc_id, \
+ TCPC_CONFIG_PS8XXX_EMUL)
+#else
+#define TCPC_CHIP_FIND_EMUL(...)
+#endif /* TEST_BUILD */
+
+#define TCPC_CHIP_FIND(usbc_id, tcpc_id) \
+ CHECK_COMPAT(ANX7447_TCPC_COMPAT, usbc_id, tcpc_id, \
+ TCPC_CONFIG_ANX7447) \
+ CHECK_COMPAT(CCGXXF_TCPC_COMPAT, usbc_id, tcpc_id, TCPC_CONFIG_CCGXXF) \
+ CHECK_COMPAT(FUSB302_TCPC_COMPAT, usbc_id, tcpc_id, \
+ TCPC_CONFIG_FUSB302) \
+ CHECK_COMPAT(IT8XXX2_TCPC_COMPAT, usbc_id, tcpc_id, \
+ TCPC_CONFIG_IT8XXX2) \
+ CHECK_COMPAT(PS8XXX_COMPAT, usbc_id, tcpc_id, TCPC_CONFIG_PS8XXX) \
+ CHECK_COMPAT(NCT38XX_TCPC_COMPAT, usbc_id, tcpc_id, \
+ TCPC_CONFIG_NCT38XX) \
+ CHECK_COMPAT(RT1718S_TCPC_COMPAT, usbc_id, tcpc_id, \
+ TCPC_CONFIG_RT1718S) \
+ CHECK_COMPAT(TCPCI_COMPAT, usbc_id, tcpc_id, TCPC_CONFIG_TCPCI) \
+ TCPC_CHIP_FIND_EMUL(usbc_id, tcpc_id)
+
+#define TCPC_CHIP(usbc_id) \
+ COND_CODE_1(DT_NODE_HAS_PROP(usbc_id, tcpc), \
+ (TCPC_CHIP_FIND(usbc_id, DT_PHANDLE(usbc_id, tcpc))), ())
+
+#define MAYBE_CONST \
+ COND_CODE_1(CONFIG_PLATFORM_EC_USB_PD_TCPC_RUNTIME_CONFIG, (), (const))
+
+/* Type C Port Controllers */
+MAYBE_CONST struct tcpc_config_t tcpc_config[] = { DT_FOREACH_STATUS_OKAY(
+ named_usbc_port, TCPC_CHIP) };
#endif /* DT_HAS_COMPAT_STATUS_OKAY */