summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShelley Chen <shchen@google.com>2021-04-16 06:24:17 +0000
committerCommit Bot <commit-bot@chromium.org>2021-07-14 23:27:27 +0000
commit98bd2f530200a22cc34cb1a8001617dcf0f00b27 (patch)
treef0918ea349b5cb6c4071e075a67fcd969d61fd33
parent7c130c7edda0d0c3a772430cd9233fa7df617faf (diff)
downloadchrome-ec-98bd2f530200a22cc34cb1a8001617dcf0f00b27.tar.gz
kindred: Set TCPC_AUX_SWITCH to 0xC on Port 0 on CCD enable
When the screen brightness is changed, DP sends signal on AUX channel. This causes CCD mode to be disconnected. This patch sets the MUX to aux+ <-> sbu2, aux- <-> sbu1 to fix it. Same change as I3dba1bdfd44a921077a2f60dec17119bb0077238 BUG=b:185137814 BRANCH=hatch TEST=manually verify servod doesn't exit when screen turns off due to the device being idle for too long Signed-off-by: Shelley Chen <shchen@google.com> Change-Id: Ie1edef535297c68b7e91e247caaeb7ad00d19392 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2831053 Reviewed-by: Aseda Aboagye <aaboagye@chromium.org> Commit-Queue: Shelley Chen <shchen@chromium.org> Tested-by: Shelley Chen <shchen@chromium.org> (cherry picked from commit 7d2eebe8c7d4c59df993218cfcba2616f20fc8a4) Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3029003 Reviewed-by: Shelley Chen <shchen@chromium.org>
-rw-r--r--board/kindred/board.c27
-rw-r--r--board/kindred/board.h3
-rw-r--r--board/kindred/gpio.inc3
3 files changed, 33 insertions, 0 deletions
diff --git a/board/kindred/board.c b/board/kindred/board.c
index 7c9ac8b30e..f5a5779f40 100644
--- a/board/kindred/board.c
+++ b/board/kindred/board.c
@@ -530,12 +530,39 @@ static void board_update_sensor_config_from_sku(void)
}
}
+static void anx7447_set_aux_switch(void)
+{
+ const int port = USB_PD_PORT_TCPC_0;
+
+ /* Debounce */
+ if (gpio_get_level(GPIO_CCD_MODE_ODL))
+ return;
+
+ /*
+ * Expect to set AUX_SWITCH to 0, but 0xc isolates the DP_AUX
+ * signal from SBU.
+ */
+ CPRINTS("C%d: AUX_SW_SEL=0x%x", port, 0xc);
+ if (tcpc_write(port, ANX7447_REG_TCPC_AUX_SWITCH, 0xc))
+ CPRINTS("C%d: Setting AUX_SW_SEL failed", port);
+}
+DECLARE_DEFERRED(anx7447_set_aux_switch);
+
+void ccd_mode_isr(enum gpio_signal signal)
+{
+ /* Wait 2 seconds until all mux setting is done by PD task */
+ hook_call_deferred(&anx7447_set_aux_switch_data, 2 * SECOND);
+}
+
static void board_init(void)
{
/* Initialize Fans */
setup_fans();
/* Enable HDMI HPD interrupt. */
gpio_enable_interrupt(GPIO_HDMI_CONN_HPD);
+ /* Trigger once to set mux in case CCD cable is already connected. */
+ ccd_mode_isr(GPIO_CCD_MODE_ODL);
+ gpio_enable_interrupt(GPIO_CCD_MODE_ODL);
/* Select correct gpio signal for PP5000_A control */
board_gpio_set_pp5000();
/* Use sku_id to set motion sensor count */
diff --git a/board/kindred/board.h b/board/kindred/board.h
index 1f1ad8800b..59093029c0 100644
--- a/board/kindred/board.h
+++ b/board/kindred/board.h
@@ -183,6 +183,9 @@ enum battery_type {
extern const int keyboard_factory_scan_pins[][2];
extern const int keyboard_factory_scan_pins_used;
void motion_interrupt(enum gpio_signal signal);
+
+void ccd_mode_isr(enum gpio_signal signal);
+
#endif /* !__ASSEMBLER__ */
#endif /* __CROS_EC_BOARD_H */
diff --git a/board/kindred/gpio.inc b/board/kindred/gpio.inc
index 2b749dffde..2adb08f564 100644
--- a/board/kindred/gpio.inc
+++ b/board/kindred/gpio.inc
@@ -37,6 +37,9 @@ GPIO_INT(USB_C1_TCPC_INT_ODL, PIN(F, 5), GPIO_INT_FALLING, tcpc_alert_event)
GPIO_INT(USB_C0_BC12_INT_ODL, PIN(9, 5), GPIO_INT_FALLING, bc12_interrupt)
GPIO_INT(USB_C1_BC12_INT_ODL, PIN(E, 4), GPIO_INT_FALLING, bc12_interrupt)
+/* CCD mode line*/
+GPIO_INT(CCD_MODE_ODL, PIN(E, 5), GPIO_INT_FALLING, ccd_mode_isr)
+
GPIO_INT(HDMI_CONN_HPD, PIN(7, 2), GPIO_INT_BOTH, hdmi_hpd_interrupt)
/* Volume button interrupts */