summaryrefslogtreecommitdiff
path: root/baseboard/zork/variant_trembyle.c
diff options
context:
space:
mode:
authorEdward Hill <ecgh@chromium.org>2020-03-31 16:09:28 -0600
committerCommit Bot <commit-bot@chromium.org>2020-04-07 06:30:40 +0000
commit68968cab21ac0c89322e44bddc18988f037ae7b2 (patch)
tree7707045c3f4a55492d781527bc818fc32ab78cbf /baseboard/zork/variant_trembyle.c
parented4ffafa80319a0084b684eb0b9f95c120922862 (diff)
downloadchrome-ec-68968cab21ac0c89322e44bddc18988f037ae7b2.tar.gz
Zork: avoid losing edges from MST hub to DP1_HPD
BUG=b:152512560 BRANCH=none TEST=scope shows 1ms HPD pulses preserved by EC Signed-off-by: Edward Hill <ecgh@chromium.org> Change-Id: I37c983385582955f31f24aed65b4b2c5b15e93ae Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2131051 Reviewed-by: Denis Brockus <dbrockus@chromium.org> Commit-Queue: Denis Brockus <dbrockus@chromium.org>
Diffstat (limited to 'baseboard/zork/variant_trembyle.c')
-rw-r--r--baseboard/zork/variant_trembyle.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/baseboard/zork/variant_trembyle.c b/baseboard/zork/variant_trembyle.c
index 1284ec5801..1f833c6dde 100644
--- a/baseboard/zork/variant_trembyle.c
+++ b/baseboard/zork/variant_trembyle.c
@@ -133,7 +133,10 @@ static void mst_hpd_handler(void)
{
int hpd = 0;
- /* Pass HPD through from DB OPT3 MST hub to AP's DP1. */
+ /*
+ * Ensure level on GPIO_DP1_HPD matches IOEX_MST_HPD_OUT, in case
+ * we got out of sync.
+ */
ioex_get_level(IOEX_MST_HPD_OUT, &hpd);
gpio_set_level(GPIO_DP1_HPD, hpd);
ccprints("MST HPD %d", hpd);
@@ -142,7 +145,14 @@ DECLARE_DEFERRED(mst_hpd_handler);
void mst_hpd_interrupt(enum ioex_signal signal)
{
- /* Debounce for 2 msec. */
+ /*
+ * Goal is to pass HPD through from DB OPT3 MST hub to AP's DP1.
+ * Immediately invert GPIO_DP1_HPD, to pass through the edge on
+ * IOEX_MST_HPD_OUT. Then check level after 2 msec debounce.
+ */
+ int hpd = !gpio_get_level(GPIO_DP1_HPD);
+
+ gpio_set_level(GPIO_DP1_HPD, hpd);
hook_call_deferred(&mst_hpd_handler_data, (2 * MSEC));
}