diff options
author | Todd Broch <tbroch@chromium.org> | 2014-10-13 15:45:50 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-10-30 21:48:06 +0000 |
commit | a3913d99d7a40062144b96d505bba56a62986faa (patch) | |
tree | 35b6531d59c0889a36d77253faa30bfa1ea86b4e /include | |
parent | d4f3279db9d31159624449828362e45062bd7703 (diff) | |
download | chrome-ec-a3913d99d7a40062144b96d505bba56a62986faa.tar.gz |
pd: dingdong/hoho: HPD over USB PD.
HPD needs to be transported of USB PD as both SBU lines are consumed
for differential AUX signalling.
This CL does the following:
1. Enables GPIO DP_HPD as interrupt
2. Sends debounced HPD across CC via the SVDM DP status message
BRANCH=none
BUG=chrome-os-partner:31192,chrome-os-partner:31193
TEST=manual,
From servo w/ GPIO attached to HPD drove the following transactions
after inserting with HPD low initially:
# e1: hpd_high
# e2: hpd_low
# non-registered glitch
# e3: hpd_high followed by hpd_low
# e4: hpd high
# non-registered glitch
# e5: hpd_irq
# e6: hpd_irq
# e7: hpd_irq
# e8: hpd_low followed by hpd_high
From fruitpie console (marked up to show result of above)
----> enter-mode, dp status, dp config
[6.774108 DONE] SVDM/1 [4] ff018144
[6.777467 DONE] SVDM/2 [16] ff018150 00000002
[6.780637 DONE] SVDM/1 [17] ff018051
----> attentions start arriving
----> e1 [18.966741 DONE] SVDM/2 [6] ff018106 0000008a
----> e2 [33.724367 DONE] SVDM/2 [6] ff018106 0000000a
----> e3 [64.550398 DONE] SVDM/2 [6] ff018106 0000008a
----> e3 [64.752452 DONE] SVDM/2 [6] ff018106 0000000a
----> e4 [74.247127 DONE] SVDM/2 [6] ff018106 0000008a
----> e5 [88.906254 DONE] SVDM/2 [6] ff018106 0000010a
----> e6 [100.938738 DONE] SVDM/2 [6] ff018106 0000010a
----> e7 [123.693414 DONE] SVDM/2 [6] ff018106 0000010a
----> e8 [130.050074 DONE] SVDM/2 [6] ff018106 0000000a
----> e8 [130.254087 DONE] SVDM/2 [6] ff018106 0000008a
Change-Id: I976c268467ece84cedab7ba4943fb59d1e48c113
Signed-off-by: Todd Broch <tbroch@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/223262
Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/usb_pd.h | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/include/usb_pd.h b/include/usb_pd.h index 986f5ef47d..8f231a754f 100644 --- a/include/usb_pd.h +++ b/include/usb_pd.h @@ -150,10 +150,11 @@ struct svdm_amode_data { uint32_t mode_caps; }; -enum hpd_level { - hpd_unknown = -1, - hpd_low = 0, +enum hpd_event { + hpd_none, + hpd_low, hpd_high, + hpd_irq, }; /* Policy structure for driving alternate mode */ @@ -414,6 +415,9 @@ struct pd_policy { #define PD_VDO_HPD_IRQ(x) ((x >> 8) & 1) #define PD_VDO_HPD_LVL(x) ((x >> 7) & 1) + +#define HPD_DEBOUNCE_LVL (100*MSEC) +#define HPD_DEBOUNCE_IRQ (2*MSEC) /* * DisplayPort Configure VDO * ------------------------- @@ -716,7 +720,7 @@ void pd_dev_store_rw_hash(int port, uint16_t dev_id, uint32_t *rw_hash); * @param vid Vendor ID * @param cmd VDO command number * @param data Pointer to payload to send - * @param data number of data objects in payload + * @param count number of data objects in payload */ void pd_send_vdm(int port, uint32_t vid, int cmd, const uint32_t *data, int count); @@ -775,6 +779,21 @@ int board_get_usb_mux(int port, const char **dp_str, const char **usb_str); */ void board_flip_usb_mux(int port); +/** + * Determine if in alternate mode or not. + * + * @param port port number. + * @return object position of mode chosen in alternate mode otherwise zero. + */ +int pd_alt_mode(int port); + +/** + * Send hpd over USB PD. + * + * @param port port number. + * @param hpd hotplug detect type. + */ +void pd_send_hpd(int port, enum hpd_event hpd); /* --- Physical layer functions : chip specific --- */ /* Packet preparation/retrieval */ |