summaryrefslogtreecommitdiff
path: root/zephyr/projects/corsola/src/variant_db_detection.c
diff options
context:
space:
mode:
authorEric Yilun Lin <yllin@chromium.org>2021-11-26 13:10:35 +0800
committerCommit Bot <commit-bot@chromium.org>2021-12-01 03:20:47 +0000
commitfa02962cc2697fc9374a9b0d04c4bc66c7a4fbdb (patch)
treeb8acc8caa5a68045426b9ffc8bacb33470584cf8 /zephyr/projects/corsola/src/variant_db_detection.c
parent82a59bd513a8dc8546c39f3be506e10e3f117a1b (diff)
downloadchrome-ec-fa02962cc2697fc9374a9b0d04c4bc66c7a4fbdb.tar.gz
zephyr: corsola: refactor daughterboard detection
move the daughterboard detection out of the usbc_config.c BUG=b:207802869 TEST=zmake test all BRANCH=none Change-Id: Ie23915d116cfbfd161f640eeea342e18d2647216 Signed-off-by: Eric Yilun Lin <yllin@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3303262 Auto-Submit: Eric Yilun Lin <yllin@google.com> Commit-Queue: Eric Yilun Lin <yllin@google.com> Tested-by: Eric Yilun Lin <yllin@google.com> Reviewed-by: Ting Shen <phoenixshen@chromium.org>
Diffstat (limited to 'zephyr/projects/corsola/src/variant_db_detection.c')
-rw-r--r--zephyr/projects/corsola/src/variant_db_detection.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/zephyr/projects/corsola/src/variant_db_detection.c b/zephyr/projects/corsola/src/variant_db_detection.c
new file mode 100644
index 0000000000..340d54a196
--- /dev/null
+++ b/zephyr/projects/corsola/src/variant_db_detection.c
@@ -0,0 +1,65 @@
+/* Copyright 2021 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.
+ */
+
+/* Corsola daughter board detection */
+
+#include "console.h"
+#include "gpio.h"
+#include "hooks.h"
+
+#include "variant_db_detection.h"
+
+#define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ## args)
+#define CPRINTF(format, args...) cprintf(CC_SYSTEM, format, ## args)
+
+static void corsola_db_config(enum corsola_db_type type)
+{
+ switch (type) {
+ case CORSOLA_DB_HDMI:
+ /* EC_X_GPIO1 */
+ gpio_set_flags(GPIO_EN_HDMI_PWR, GPIO_OUT_HIGH);
+ /* X_EC_GPIO2 */
+ gpio_set_flags(GPIO_PS185_EC_DP_HPD, GPIO_INT_BOTH);
+ /* EC_X_GPIO3 */
+ gpio_set_flags(GPIO_PS185_PWRDN_ODL, GPIO_ODR_HIGH);
+ return;
+ case CORSOLA_DB_TYPEC:
+ /* EC_X_GPIO1 */
+ gpio_set_flags(GPIO_USB_C1_FRS_EN, GPIO_OUT_LOW);
+ /* X_EC_GPIO2 */
+ gpio_set_flags(GPIO_USB_C1_PPC_INT_ODL,
+ GPIO_INT_BOTH | GPIO_PULL_UP);
+ /* EC_X_GPIO3 */
+ gpio_set_flags(GPIO_USB_C1_DP_IN_HPD, GPIO_OUT_LOW);
+ return;
+ default:
+ break;
+
+ }
+}
+
+enum corsola_db_type corsola_get_db_type(void)
+{
+ static enum corsola_db_type db = CORSOLA_DB_NONE;
+
+ if (db != CORSOLA_DB_NONE)
+ return db;
+
+ if (!gpio_get_level(GPIO_HDMI_PRSNT_ODL))
+ db = CORSOLA_DB_HDMI;
+ else
+ db = CORSOLA_DB_TYPEC;
+
+ corsola_db_config(db);
+
+ CPRINTS("Detect %s DB", db == CORSOLA_DB_HDMI ? "HDMI" : "TYPEC");
+ return db;
+}
+
+static void corsola_db_init(void)
+{
+ corsola_get_db_type();
+}
+DECLARE_HOOK(HOOK_INIT, corsola_db_init, HOOK_PRIO_INIT_I2C - 1);