diff options
author | Edward Hill <ecgh@chromium.org> | 2020-05-11 20:35:22 -0600 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-05-12 19:04:32 +0000 |
commit | 65aa151d0544051118259fc086093670eef26518 (patch) | |
tree | 65c32fa6ce2476bcca352470593a2ff901fa8e16 /board/berknip/board.c | |
parent | 5c359b906557cd1a1fc80baa11a7043ca169a8b9 (diff) | |
download | chrome-ec-65aa151d0544051118259fc086093670eef26518.tar.gz |
Zork: Use FW_CONFIG for IOEX_MST_HPD_OUT.
Move mst_hpd_interrupt() out of variant_trembyle.c into individual
boards. Use FW_CONFIG to only enable IOEX_MST_HPD_OUT interrupt
when appropriate.
BUG=b:156046102
BRANCH=none
TEST=none
Signed-off-by: Edward Hill <ecgh@chromium.org>
Change-Id: I3f188088254208f01aea2094b7f2b57590b0d91b
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2195186
Reviewed-by: David Huang <david.huang@quanta.corp-partner.google.com>
Reviewed-by: Denis Brockus <dbrockus@chromium.org>
Commit-Queue: Denis Brockus <dbrockus@chromium.org>
Diffstat (limited to 'board/berknip/board.c')
-rw-r--r-- | board/berknip/board.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/board/berknip/board.c b/board/berknip/board.c index ea6ad978d1..d61369f645 100644 --- a/board/berknip/board.c +++ b/board/berknip/board.c @@ -308,6 +308,9 @@ void setup_fw_config(void) gpio_enable_interrupt(GPIO_6AXIS_INT_L); setup_mux(); + + if (ec_config_has_mst_hub_rtd2141b()) + ioex_enable_interrupt(IOEX_MST_HPD_OUT); } DECLARE_HOOK(HOOK_INIT, setup_fw_config, HOOK_PRIO_INIT_I2C + 2); @@ -368,3 +371,34 @@ static void setup_fans(void) thermal_params[TEMP_SENSOR_CPU] = thermal_cpu; } DECLARE_HOOK(HOOK_INIT, setup_fans, HOOK_PRIO_DEFAULT); + +/***************************************************************************** + * MST hub + */ + +static void mst_hpd_handler(void) +{ + int hpd = 0; + + /* + * 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); +} +DECLARE_DEFERRED(mst_hpd_handler); + +void mst_hpd_interrupt(enum ioex_signal signal) +{ + /* + * 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)); +} |