From a768573ff9b1548b420bf9ea5c92626c34c2ff6d Mon Sep 17 00:00:00 2001 From: Aseda Aboagye Date: Thu, 28 Mar 2019 10:43:52 -0700 Subject: common: pd_policy: Add notification for DP AltMode MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit simply adds a notification that can be called when the device enters DisplayPort Alternate mode or a DP attention VDM is received. Calling the notification will send a MODE_CHANGE host event which may wake the AP. BUG=chromium:786721 BRANCH=firmware-nami-10775.B TEST=With other PD Policies patches, flash nami and run faft_ec&pd Change-Id: Iaa221e69060a7d1015f7c1e2f6f053e6810a674a Signed-off-by: Aseda Aboagye Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1666366 Tested-by: Aseda Aboagye Reviewed-by: Diana Z Reviewed-by: Furquan Shaikh Commit-Queue: Aseda Aboagye Auto-Submit: Aseda Aboagye Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2274380 Tested-by: Dawid Niedźwiecki Reviewed-by: Paul Fagerburg Reviewed-by: Daisuke Nojiri Commit-Queue: Dossym Nurmukhanov --- common/usb_pd_policy.c | 17 +++++++++++++++++ include/ec_commands.h | 8 +++++++- include/usb_pd.h | 6 ++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/common/usb_pd_policy.c b/common/usb_pd_policy.c index 979ffa2603..12aa08bb31 100644 --- a/common/usb_pd_policy.c +++ b/common/usb_pd_policy.c @@ -34,6 +34,23 @@ static int rw_flash_changed = 1; +#ifdef CONFIG_HOSTCMD_EVENTS +void pd_notify_dp_alt_mode_entry(void) +{ + /* + * Note: EC_HOST_EVENT_PD_MCU may be a more appropriate host event to + * send, but we do not send that here because there are other cases + * where we send EC_HOST_EVENT_PD_MCU such as charger insertion or + * removal. Currently, those do not wake the system up, but + * EC_HOST_EVENT_MODE_CHANGE does. If we made the system wake up on + * EC_HOST_EVENT_PD_MCU, we would be turning the internal display on on + * every charger insertion/removal, which is not desired. + */ + CPRINTS("Notifying AP of DP Alt Mode Entry..."); + host_set_single_event(EC_HOST_EVENT_MODE_CHANGE); +} +#endif /* CONFIG_HOSTCMD_EVENTS */ + int pd_check_requested_voltage(uint32_t rdo, const int port) { int max_ma = rdo & 0x3FF; diff --git a/include/ec_commands.h b/include/ec_commands.h index a2f9079a7e..8199bb716a 100644 --- a/include/ec_commands.h +++ b/include/ec_commands.h @@ -596,7 +596,13 @@ enum host_event_code { /* EC desires to change state of host-controlled USB mux */ EC_HOST_EVENT_USB_MUX = 28, - /* TABLET/LAPTOP mode event*/ + /* + * The device has changed "modes". This can be one of the following: + * + * - TABLET/LAPTOP mode + * - detachable base attach/detach event + * - DisplayPort Alternate Mode entry + */ EC_HOST_EVENT_MODE_CHANGE = 29, /* Keyboard recovery combo with hardware reinitialization */ diff --git a/include/usb_pd.h b/include/usb_pd.h index c0f2f01b71..4ec6ad9f0b 100644 --- a/include/usb_pd.h +++ b/include/usb_pd.h @@ -1774,6 +1774,12 @@ int pd_get_partner_usb_comm_capable(int port); */ int pd_is_vbus_present(int port); +/* + * Notify the AP that we have entered into DisplayPort Alternate Mode. This + * sets a MODE_CHANGE host event which may wake the AP. + */ +void pd_notify_dp_alt_mode_entry(void); + /* ----- Logging ----- */ #ifdef CONFIG_USB_PD_LOGGING /** -- cgit v1.2.1