aboutsummaryrefslogtreecommitdiff
path: root/src/ec/google/chromeec/ec.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ec/google/chromeec/ec.c')
-rw-r--r--src/ec/google/chromeec/ec.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/ec/google/chromeec/ec.c b/src/ec/google/chromeec/ec.c
index 7fc360af64..764c6ac74f 100644
--- a/src/ec/google/chromeec/ec.c
+++ b/src/ec/google/chromeec/ec.c
@@ -29,6 +29,7 @@
#include <rtc.h>
#include <stdlib.h>
#include <security/vboot/vboot_common.h>
+#include <timer.h>
#include "chip.h"
#include "ec.h"
@@ -984,3 +985,26 @@ int google_chromeec_pd_get_amode(uint16_t svid)
return 0;
}
+
+const static long wait_for_display_timeout_ms = 2000;
+
+#define USB_SID_DISPLAYPORT 0xff01
+
+void google_chromeec_wait_for_display(void)
+{
+ struct stopwatch sw;
+
+ printk(BIOS_INFO, "Waiting for display\n");
+ stopwatch_init_msecs_expire(&sw, wait_for_display_timeout_ms);
+ while (google_chromeec_pd_get_amode(USB_SID_DISPLAYPORT) != 1) {
+ if (stopwatch_expired(&sw)) {
+ printk(BIOS_WARNING,
+ "Display not ready after %ldms. Abort.\n",
+ wait_for_display_timeout_ms);
+ return;
+ }
+ mdelay(200);
+ }
+ printk(BIOS_INFO, "Display ready after %lu ms\n",
+ stopwatch_duration_msecs(&sw));
+}