diff options
Diffstat (limited to 'board/fruitpie/usb_pd_policy.c')
-rw-r--r-- | board/fruitpie/usb_pd_policy.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/board/fruitpie/usb_pd_policy.c b/board/fruitpie/usb_pd_policy.c index 1cceb0b6b6..8a80175c4f 100644 --- a/board/fruitpie/usb_pd_policy.c +++ b/board/fruitpie/usb_pd_policy.c @@ -192,6 +192,34 @@ static void svdm_enter_dp_mode(int port, uint32_t mode_caps) CPRINTF("Entering mode w/ vdo = %08x\n", mode_caps); } +static int dp_on; + +static int svdm_dp_status(int port, uint32_t *payload) +{ + payload[0] = VDO(USB_SID_DISPLAYPORT, 1, CMD_DP_STATUS); + payload[1] = VDO_DP_STATUS(0, /* HPD IRQ ... not applicable */ + 0, /* HPD level ... not applicable */ + 0, /* exit DP? ... no */ + 0, /* usb mode? ... no */ + 0, /* multi-function ... no */ + dp_on, + 0, /* power low? ... no */ + dp_on); + return 2; +}; + +static int svdm_dp_config(int port, uint32_t *payload) +{ + board_set_usb_mux(port, TYPEC_MUX_DP, pd_get_polarity(port)); + dp_on = 1; + payload[0] = VDO(USB_SID_DISPLAYPORT, 1, CMD_DP_CONFIG); + payload[1] = VDO_DP_CFG(MODE_DP_PIN_E, /* sink pins */ + MODE_DP_PIN_E, /* src pins */ + 0, /* signalling unspec'd */ + 2); /* UFP connected */ + return 2; +}; + static void svdm_exit_dp_mode(int port) { CPRINTF("Exiting mode\n"); @@ -202,6 +230,8 @@ const struct svdm_amode_fx supported_modes[] = { { .svid = USB_SID_DISPLAYPORT, .enter = &svdm_enter_dp_mode, + .status = &svdm_dp_status, + .config = &svdm_dp_config, .exit = &svdm_exit_dp_mode, }, }; |