diff options
author | Aseda Aboagye <aaboagye@google.com> | 2020-04-21 20:15:33 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-04-23 03:08:01 +0000 |
commit | 333df910313489744af4087d7bf6759f68359267 (patch) | |
tree | d3bd0346f4cc159f0cc94ee8b11a89ff8a3441a8 | |
parent | d7d96bd08c822a99c68dfb72469d0f408c89bb96 (diff) | |
download | chrome-ec-333df910313489744af4087d7bf6759f68359267.tar.gz |
tcpci: Add trigger for VBUS presence changes
Some boards don't have a direct interrupt indicating ACOK, but the
TCPC can provide this notification via the POWER_STATUS register.
This commit adds a lightweight trigger which calls
board_vbus_presence_change() whenever the TCPC gets a POWER_STATUS
alert. The default implementation does nothing, but a board may
override it to make it useful.
BUG=b:154113446,b:154113465
BRANCH=None
TEST=Add override for waddledoo. Build and flash waddledoo, plug in
AC, verify that "AC on" prints are seen. Unplug AC, verify that
"AC off" prints are seen.
Signed-off-by: Aseda Aboagye <aaboagye@google.com>
Change-Id: I6ab1a2649c12a0525502eac6baab2e1b31168212
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2159941
Tested-by: Aseda Aboagye <aaboagye@chromium.org>
Reviewed-by: Diana Z <dzigterman@chromium.org>
Commit-Queue: Aseda Aboagye <aaboagye@chromium.org>
-rw-r--r-- | common/usb_common.c | 4 | ||||
-rw-r--r-- | driver/tcpm/tcpci.c | 2 | ||||
-rw-r--r-- | include/usb_pd.h | 5 |
3 files changed, 11 insertions, 0 deletions
diff --git a/common/usb_common.c b/common/usb_common.c index 588493b823..67db582f4f 100644 --- a/common/usb_common.c +++ b/common/usb_common.c @@ -36,6 +36,10 @@ #define CPRINTF(format, args...) #endif +__overridable void board_vbus_present_change(void) +{ +} + #if defined(CONFIG_CMD_PD) && defined(CONFIG_CMD_PD_FLASH) int hex8tou32(char *str, uint32_t *val) { diff --git a/driver/tcpm/tcpci.c b/driver/tcpm/tcpci.c index 29831e6b91..12620a6666 100644 --- a/driver/tcpm/tcpci.c +++ b/driver/tcpm/tcpci.c @@ -1061,6 +1061,8 @@ void tcpci_tcpc_alert(int port) usb_charger_vbus_change(port, tcpc_vbus[port]); pd_event |= TASK_EVENT_WAKE; #endif /* CONFIG_USB_PD_VBUS_DETECT_TCPC && CONFIG_USB_CHARGER */ + if (reg & TCPC_REG_POWER_STATUS_VBUS_DET) + board_vbus_present_change(); } if (alert & TCPC_REG_ALERT_RX_HARD_RST) { /* hard reset received */ diff --git a/include/usb_pd.h b/include/usb_pd.h index 946e2313c1..d971ac04d1 100644 --- a/include/usb_pd.h +++ b/include/usb_pd.h @@ -2764,4 +2764,9 @@ __override_proto int svdm_tbt_compat_attention(int port, uint32_t *payload); __override_proto enum ec_pd_port_location board_get_pd_port_location(int port); +/** + * Can be called whenever VBUS presence changes. The default implementation + * does nothing, but a board may override it. + */ +__override_proto void board_vbus_present_change(void); #endif /* __CROS_EC_USB_PD_H */ |